Image Dataset (1) ILSVRC12
本文主要是解釋 Caffe 對 ILSVRC12 的訓練預處理過程,如果有興趣的話可以安裝 Caffe 玩玩看。
1. 去 ImageNet 下載圖片庫:
下載 ILSVRC2012_img_train.tar 和 ILSVRC2012_img_val.tar,個別解壓縮到 train 和 val 資料夾。ILSVRC2012_img_train.tar 超大的 (大約 100 多 gb),下載和解壓縮需要大空間。
我們還需要對 ILSVRC2012_img_train.tar 內的檔案再解壓縮一次。在 train/ 寫個簡單的腳本 unzip_ILSVRC.sh,解壓縮到相對應的目錄。
#/usr/bin/sh for item in `ls *.tar` do filename=`basename $item .tar` mkdir $filename tar -xvf $item -C ./$filename done
$ sudo chmod +x unzip_ILSVRC.sh $ ./unzip_ILSVRC.sh
來看看 n01440764_5763 資料夾中的圖片,n01440764 是丁鱖的相關圖 (下面會介紹如何查詢資料夾和其相應名稱)。
n01440764_5763.JPEG
n01440764_9981.JPEG
由此可知 ILSVRC2012 中的圖片大小不同,標示的東西也不一定是畫面中的主要成份 (n01440764_9981.JPEG 中人比魚還大增加了辨識的難度)。
2.下載 ILSVRC2012 的相關資料:
直接執行 script 就可以了。
$ cd $CAFFE_ROOT/data/ilsvrc12/ $./get_ilsvrc_aux.sh
簡單看看載了些什麼
打開 synset_words.txt:
n01440764 tench, Tinca tinca n01443537 goldfish, Carassius auratus n01484850 great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias n01491361 tiger shark, Galeocerdo cuvieri n01494475 hammerhead, hammerhead shark n01496331 electric ray, crampfish, numbfish, torpedo n01498041 stingray n01514668 cock n01514859 hen ...............
synset_words.txt 紀錄了資料夾名稱,父類和標籤。前面提過 n01440764 是 Tinca 就是這樣查出來的。
3. Caffe 訓練前的 data 預處理:
使用 $CAFFE_HOME/examples/imagenet/create_imagenet.sh 進行預處理。
改了一堆路徑,依照個人喜好即可。
#!/usr/bin/env sh # Create the imagenet lmdb inputs # N.B. set the path to the imagenet train + val data dirs set -e #[start-20180531-cooper-mod]# EXAMPLE=/usr/image/ILSVRC DATA=$CAFFE_HOME/data/ilsvrc12 TOOLS=$CAFFE_HOME/build/tools #[end-20180531-cooper-mod]# #[start-20180531-cooper-mod]# TRAIN_DATA_ROOT=/usr/image/ILSVRC/train/ VAL_DATA_ROOT=/usr/image/ILSVRC/val/ #[end-20180531-cooper-mod]# # Set RESIZE=true to resize the images to 256x256. Leave as false if images have # already been resized using another tool. #[start-20180531-cooper-mod]# RESIZE=true #[end-20180531-cooper-mod]# if $RESIZE; then RESIZE_HEIGHT=256 RESIZE_WIDTH=256 else RESIZE_HEIGHT=0 RESIZE_WIDTH=0 fi if [ ! -d "$TRAIN_DATA_ROOT" ]; then echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT" echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \ "where the ImageNet training data is stored." exit 1 fi if [ ! -d "$VAL_DATA_ROOT" ]; then echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT" echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \ "where the ImageNet validation data is stored." exit 1 fi echo "Creating train lmdb..." #[start-20180531-ben-mod]# GLOG_logtostderr=1 $TOOLS/convert_imageset.bin \ --resize_height=$RESIZE_HEIGHT \ --resize_width=$RESIZE_WIDTH \ --shuffle \ $TRAIN_DATA_ROOT \ $DATA/train.txt \ $EXAMPLE/ilsvrc12_train_lmdb echo "Creating val lmdb..." GLOG_logtostderr=1 $TOOLS/convert_imageset.bin \ --resize_height=$RESIZE_HEIGHT \ --resize_width=$RESIZE_WIDTH \ --shuffle \ $VAL_DATA_ROOT \ $DATA/val.txt \ $EXAMPLE/ilsvrc12_val_lmdb #[end-20180531-ben-mod]# echo "Done."
好了就可以執行腳本,執行這隻腳本需要點時間。
$ ./create_imagenet.sh
留言
張貼留言