做產(chǎn)品批發(fā)生意用什么類型的網(wǎng)站好備案域名查詢
使用的系統(tǒng)是windows,找到的解壓命令很多都linux系統(tǒng)中的,為了能在windows系統(tǒng)下使用,因此下載Git這個軟件,在其中的Git Bash中使用以下命令,因為Git Bash集成了很多l(xiāng)inux的命令,方便我們的使用。
ImageNet 中目前共有 14,197,122 幅圖像,總共分為 21,841 個類別(synsets),通常我們所說的 ImageNet 數(shù)據(jù)集其實是指 ISLVRC2012 比賽用的子數(shù)據(jù)集,其中 train 有 1,281,167 張照片和標簽,共 1000 類,大概每類 1300 張圖片,val 有 50,000 副圖像,每類 50 個數(shù)據(jù),test 有 100,000 副圖片,每類 100 個數(shù)據(jù)。
比賽分為三個場景:圖像分類(CLS)、目標定位(LOC)和目標檢測(DET)。CLS:2010-2014 比賽中獨立任務,2015 年與 LOC 合并,使用 top5。LOC:從 2011 年開始,2015 年與 CLS 合并為 CLS-LOC,單目標定位任務的數(shù)據(jù)與 CLS 任務包含相同的照片,照片數(shù)據(jù)手動標注圖像是否存在 1000 個物體類別之一的實例,每張圖片包含一個 gt 標簽,該類別的每個實例都標注了邊界框 bounding box,比賽中 IoU>0.5。
1.數(shù)據(jù)集下載:(一個大佬的鏈接)
- 訓練集:ILSVRC2012_img_train.tar.gz,提取碼:yoos;
- 驗證集:ILSVRC2012_img_val.tar.gz,提取碼:yl8m;
- 測試集:ILSVRC2012_img_test.tar.gz,提取碼:jumt;
- 任務 1&2 的 devkit:ILSVRC2012_devkit_t12.tar,提取碼:dw6i;
2. 數(shù)據(jù)解壓
我們會得到訓練集與驗證集的兩個壓縮包,分別是?ILSVRC2012_img_train.tar
?和?ILSVRC2012_img_val.tar
。
數(shù)據(jù)集布局要求是:
/path/to/imagenet/train/class1/img1.jpegclass2/img2.jpegval/class1/img3.jpegclass2/img4.jpeg
首先創(chuàng)建兩個用于放訓練集和測試集的文件夾,然后解壓:
(1)解壓訓練集
右鍵對訓練集選擇Git Bash Here
三行命令逐行輸入進Git Bash Here窗口中:
mkdir train && mv ILSVRC2012_img_train.tar train/ && cd train
tar -xvf ILSVRC2012_img_train.tar && rm -f ILSVRC2012_img_train.tar
find . -name "*.tar" | while read NAME ; do mkdir -p "${NAME%.tar}"; tar -xvf "${NAME}" -C "${NAME%.tar}"; rm -f "${NAME}"; done
cd ..
結果如下:
(2)解壓測試集
wget https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.shmkdir val && tar -xvf ILSVRC2012_img_val.tar -C val && mv valprep.sh val && cd val && bash valprep.sh
下載的valprep.sh文件在外網(wǎng)(valprep.sh文件中保存的就是圖片按類生成文件夾的布局),或者可以直接迅雷鏈接,將下載后的文件放入和驗證集壓縮包同一文件夾下,這樣直接在Git Bash Here窗口使用第二個命令就可以完成解壓。(也是一個大佬的鏈接)
鏈接:https://pan.xunlei.com/s/VMkus56ePQ4LMJUIXheBkhXSA1 提取碼:k9ej
或者利用python解壓測試集:
【點擊下載驗證集標簽】
對于訓練集,不同類別的數(shù)據(jù)躺在不同的文件夾里,用起來很方便(同一文件夾的視為一類)。但是驗證集沒有對應的標簽,需要額外處理。
驗證集的標簽在?Development kit?(文件名為?ILSVRC2012_devkit_t12.tar.gz
)中的ILSVRC2012_devkit_t12\data\ILSVRC2012_validation_ground_truth.txt
?中:
在映射關系儲存在和txt文件同目錄下的 meta.mat 文件中。我們希望驗證集的文件結構長得和訓練集一樣,即 :
/val
/n01440764
images
/n01443537
images
解壓完壓縮包后:新建python文件:
from scipy import io
import os
import shutildef move_valimg(val_dir='./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()
3. 預處理Crop & Resize
數(shù)據(jù)集在扔給網(wǎng)絡模型做訓練前還需要統(tǒng)一尺寸處理,一方面是 CNN 需要統(tǒng)一尺寸的輸入,另一方面是可以有數(shù)據(jù)增強的效果。一般來說有 crop 和 resize 兩個過程。
其中 crop 的方法有 single crop 和 multiple crops 兩種:
- single crop:先將圖像 resize 到某個尺度,例如:256 x N(短邊為256),然后 centercrop 成 224x224 作為模型的輸入;
- multiple crops 的具體形式有多種,可自行指定,比如:1)10 crops:取(左上,左下,右上,右下,正中)以及它們的水平翻轉(zhuǎn),這 10 個 crops 作為 CNN 輸入,最終取平均預測結果;2)144 crops:首先將圖像 resize 到 4 個尺度:256xN,320xN,384xN,480xN,然后每個尺度上去取“最左”,“正中”,“最右”這 3 個位置的正方形區(qū)域,對每個正方形區(qū)域,取上述的 10 個 224x224 的 crops,則得到 4x3x10=120 個 crops,再對上述正方形區(qū)域直接 resize 到 224x224,以及做水平翻轉(zhuǎn),則又得到 4x3x2=24 個 crops,總共加起來就是 144 個 crops,輸入到網(wǎng)絡最后取平均預測結果
4.??用Pytorch加載
使用 torchvision.datasets.ImageFolder() 就可以直接加載處理好的數(shù)據(jù)集啦!
-
def load_ImageNet(ImageNet_PATH, batch_size=64, workers=3, pin_memory=True): traindir = os.path.join(ImageNet_PATH, 'ILSVRC2012_img_train')valdir = os.path.join(ImageNet_PATH, 'ILSVRC2012_img_val')print('traindir = ',traindir)print('valdir = ',valdir)normalizer = transforms.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])train_dataset = datasets.ImageFolder(traindir,transforms.Compose([transforms.RandomResizedCrop(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),normalizer]))val_dataset = datasets.ImageFolder(valdir,transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),normalizer]))print('train_dataset = ',len(train_dataset))print('val_dataset = ',len(val_dataset))train_loader = torch.utils.data.DataLoader(train_dataset,batch_size=batch_size,shuffle=True,num_workers=workers,pin_memory=pin_memory,sampler=None)val_loader = torch.utils.data.DataLoader(val_dataset,batch_size=batch_size,shuffle=False,num_workers=workers,pin_memory=pin_memory)return train_loader, val_loader, train_dataset, val_dataset