企業(yè)如何進(jìn)行網(wǎng)站建設(shè)產(chǎn)品網(wǎng)絡(luò)營(yíng)銷方案
學(xué)習(xí)記錄,自用。
1. 下載數(shù)據(jù)集
點(diǎn)擊以下鏈接下載種子文件,然后使用迅雷進(jìn)行下載,僅下載勾選的文件即可。
https://hyper.ai/datasets/4889/c107755f6de25ba43c190f37dd0168dbd1c0877e
2. 解壓?
找到下載好的ILSVRC2012_img_train.tar
?和?ILSVRC2012_img_val.tar
創(chuàng)建兩個(gè)用于放訓(xùn)練集和測(cè)試集的文件夾??
mkdir train
mkdir val
解壓文件??
tar xvf ILSVRC2012_img_train.tar -C ./train
tar xvf ILSVRC2012_img_val.tar -C ./val
ILSVRC2012_img_train.tar解壓后為1000個(gè)tar壓縮包,對(duì)應(yīng)1000類別,需要再次解壓,
解壓腳本(先創(chuàng)建txt文件,粘貼下面代碼,最后保存為.sh文件)??
#!/bin/bash# 遍歷所有以.tar結(jié)尾的文件,進(jìn)行解壓
for x in *.tar
do# 獲取文件名(不包括.tar后綴)filename=$(basename "$x" .tar)# 創(chuàng)建目錄并解壓文件mkdir "$filename"tar -xvf "$x" -C "$filename"
done# 刪除原來的tar文件
rm *.tar
執(zhí)行腳本之后,就獲得了1000個(gè)文件夾(每個(gè)文件夾對(duì)應(yīng)一種類別)。
目前,已經(jīng)把所有的 JPEG 圖片搞了出來。
3.數(shù)據(jù)標(biāo)簽
對(duì)于訓(xùn)練集,同一類別的數(shù)據(jù)在同一文件夾下;
驗(yàn)證集沒有標(biāo)簽,需要進(jìn)行處理,下面的步驟都是對(duì)驗(yàn)證集標(biāo)簽的處理。
驗(yàn)證集的標(biāo)簽在 Development kit(ILSVRC2012_devkit_t12.tar.gz
),
解壓ILSVRC2012_devkit_t12.tar.gz??
tar -xvf ILSVRC2012_devkit_t12.tar.gz
解壓后得到ILSVRC2012_devkit_t12文件夾,在ILSVRC2012_devkit_t12\data\ILSVRC2012_validation_ground_truth.txt找到驗(yàn)證集對(duì)應(yīng)的標(biāo)簽。
之后,在imagenet目錄(devkit和val的根目錄下)創(chuàng)建并運(yùn)行如下 python 腳本
from scipy import io
import os
import shutildef move_valimg(val_dir='./ILSVRC2012_img_val', devkit_dir='./ILSVRC2012_devkit_t12'):"""move valimg to correspongding folders.val_id(start from 1) -> ILSVRC_ID(start from 1) -> WINDorganize like:/val/n01440764images/n01443537images....."""# load synset, val ground truth and val images listsynset = io.loadmat(os.path.join(devkit_dir, 'data', 'meta.mat'))ground_truth = open(os.path.join(devkit_dir, 'data', 'ILSVRC2012_validation_ground_truth.txt'))lines = ground_truth.readlines()labels = [int(line[:-1]) for line in lines]root, _, filenames = next(os.walk(val_dir))for filename in filenames:# val image name -> ILSVRC ID -> WINDval_id = int(filename.split('.')[0].split('_')[-1])ILSVRC_ID = labels[val_id-1]WIND = synset['synsets'][ILSVRC_ID-1][0][1][0]print("val_id:%d, ILSVRC_ID:%d, WIND:%s" % (val_id, ILSVRC_ID, WIND))# move val imagesoutput_dir = os.path.join(root, WIND)if os.path.isdir(output_dir):passelse:os.mkdir(output_dir)shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))if __name__ == '__main__':move_valimg()
如果在運(yùn)行腳本的時(shí)候報(bào)錯(cuò),大概率是ILSVRC2012_img_val有非jpeg文件,將其移出即可;
我這里有兩個(gè)其他文件,使用迅雷下載時(shí)產(chǎn)生的額外文件,我執(zhí)行了一下命令將其移出。
mv .5d6d0df7ed81efd49ca99ea4737e0ae5e3a5f2e5.torrent ..
mv .5D6D0DF7ED81EFD49CA99EA4737E0AE5E3A5F2E5.js ..
如何還有其他報(bào)錯(cuò),可以自行調(diào)試代碼。
4.數(shù)據(jù)加載
使用 torchvision.datasets.ImageFolder() 就可以直接加載處理好的數(shù)據(jù)集
import os
import torch
import torchvision.datasets as datasetsroot = 'data/imagenet'
def get_imagenet(root, train = True, transform = None, target_transform = None):if train:root = os.path.join(root, 'train')else:root = os.path.join(root, 'val')return datasets.ImageFolder(root = root,transform = transform,target_transform = target_transform)