本文處理對象為 ILSVRC2012 分類數(shù)據(jù)集茉兰。
一、下載:
首先進(jìn)入ImageNet 官網(wǎng):
用學(xué)生郵箱注冊并登錄后才能免費下載脆淹,因此如果沒有注冊的話,需要首先用學(xué)生郵箱注冊賬戶沽一。
這里需要注意的是:
- 不翻墻的話會導(dǎo)致注冊失敻悄纭!>饴辍咐柜!
PS:可能有人因為想找迅雷下載鏈接而點進(jìn)了這篇帖子兼蜈,為了避免你們空手離開攘残,我就貼一個下載鏈接吧,如果有用的話就麻煩點個贊和關(guān)注吧~
訓(xùn)練集迅雷種子文件:提取碼:46aw
驗證集百度云:提取碼:7bt4
標(biāo)簽映射文件百度云:提取碼:axte
下載以下3個文件即可:
ILSVRC2012_img_train.tar
ILSVRC2012_img_val.tar
ILSVRC2012_devkit_t12.tar.gz
二为狸、解壓:
假設(shè)3個文件所在目錄為:
/home/data/imagenet
1.解壓訓(xùn)練集:
執(zhí)行命令:
cd /home/data/imagenet
進(jìn)入該文件目錄下歼郭。執(zhí)行命令:
mkdir train && tar -xvf ILSVRC2012_img_train.tar -C train && for x in `ls train/*tar`; do fn=train/`basename $x .tar`; mkdir $fn; tar -xvf $x -C $fn; rm -f $fn.tar; done
將訓(xùn)練集解壓到文件夾 train 目錄下。執(zhí)行命令:
cd train
進(jìn)入 train 目錄下辐棒。執(zhí)行命令:
ls -lR|grep "^d"|wc -l
查看該目錄下的文件夾數(shù)量病曾,若解壓成功,則返回1000漾根。執(zhí)行命令:
ls -lR|grep "^-"|wc -l
查看 train 目錄下所有文件(圖片)的數(shù)量泰涂,若解壓成功,則返回1281167辐怕。
2.解壓驗證集:
執(zhí)行命令:
cd /home/data/imagenet
進(jìn)入3個文件所在的根目錄逼蒙。執(zhí)行命令:
mkdir val
創(chuàng)建解壓驗證集的文件夾。執(zhí)行命令:
tar xvf ILSVRC2012_img_val.tar -C ./val
將驗證集圖像解壓到 val 目錄下寄疏。此時 val 目錄下是50000張圖像是牢,并沒有被分類到1000個文件夾下。因此需要將驗證集中的圖像進(jìn)行分類存放陕截。
執(zhí)行命令:
tar -xzf ILSVRC2012_devkit_t12.tar.gz
解壓下載的第3個文件驳棱,該文件中記錄著驗證集中的圖像名及其類別標(biāo)簽之間的映射關(guān)系。
在 '/home/data/imagenet' 目錄下創(chuàng)建 Python 腳本农曲,假設(shè)命名為“unzip.py”社搅,其內(nèi)容如下:
from scipy import io
import os
import shutil
def 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) -> WIND
organize like:
/val
/n01440764
images
/n01443537
images
.....
"""
# load synset, val ground truth and val images list
synset = 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 -> WIND
val_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 images
output_dir = os.path.join(root, WIND)
if os.path.isdir(output_dir):
pass
else:
os.mkdir(output_dir)
shutil.move(os.path.join(root, filename), os.path.join(output_dir, filename))
if __name__ == '__main__':
move_valimg()
運行該腳本后,驗證集就處理成功了。