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
留言
張貼留言