一. 配置 Caffe環境及下載、編譯、測試SSD源碼
1.下載源碼
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd
2. 編譯源碼
- 配置Makefile.config 【Instuction】【已配置好文件】
- 編譯python接口等
make -j8
# Make sure to include $CAFFE_ROOT/python to your PYTHONPATH.
make py
make test -j8
# (Optional)
make runtest -j8
3.測試源碼
- 下載訓練好的模型,放到
$CAFFE_ROOT/models/
- 下載VOC2007、VOC2012等數據集,解壓縮,放到
$HOME/caffe/data/
# Download the data.
cd $HOME/caffe/data
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
# Extract the data.
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
- 生成LMDB格式數據集
- 修改./data/VOC0712/create_list.sh中的root_dir、name等
- 修改./data/VOC0712/create_data.sh中的data_root_dir、dataset_name等
cd $CAFFE_ROOT
# Create the trainval.txt, test.txt, and test_name_size.txt in data/VOC0712/
./data/VOC0712/create_list.sh
# You can modify the parameters in create_data.sh if needed.
# It will create lmdb files for trainval and test with encoded original image:
# - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
# - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
# and make soft links at examples/VOC0712/
./data/VOC0712/create_data.sh
- 測試SSD源碼
- 注意修改gpu id及 device_id
- mAP score在0.77左右
cd $CAFFE_ROOT
# You can modify the parameters in score_ssd_pascal.py if needed.
python examples/ssd/score_ssd_pascal.py
- 單張圖片測試
- 使用jupyter notebook打開
/home/amax/caffe/examples/ssd_detect.ipynb
,另存為ssd_detect.py - 注釋掉
get_ipython().magic(u'matplotlib inline')
- matplotlib.get_backend()設置為
TkAgg
- 末尾加上
plt.show()
- 更改caffe_root、model_def、image等路徑,運行即可
- 使用jupyter notebook打開
labelmap_file = 'data/VOC0712/labelmap_voc.prototxt'
model_def = 'models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt'
model_weights = 'models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel'
image = caffe.io.load_image('examples/images/cat.jpg')
二.使用SSD訓練自己的數據集
1.生成訓練數據、測試數據
- 將JPEG等圖片格式轉換為VOC格式,存放於
$caffe_root/data/VOCdevkit/ssd_test
- 參考鏈接https://www.cnblogs.com/EstherLjy/p/8215596.html
- 創建目錄
$CAFFE_ROOT/data/ssd_test
,同時將data/VOC0712下的create_list.sh、create_data.sh、labelmap_voc.prototxt這三個文件copy到該目錄下,分別重命名 - 修改標注文件
$CAFFE_ROOT/data/ssd_test/labelmap_voc_ssd_test.prototxt
為自己的類別,注意保留label 0,background類別 - 創建目錄
$CAFFE_ROOT/examples/ssd_test
- 修改兩個
create_xxx_xxx.sh
文件,將與VOC0712相關的信息替換成ssd_test,然后運行
cd $CAFFE_ROOT
./data/ssd_test/create_list.sh
./data/ssd_test/create_data.sh
2.訓練
- 下載預訓練模型VGG_ILSVRC_16_layers_fc_reduced.caffemodel,放在
./models/VGGNet/
路徑下 - 修改訓練文件
$CAFFE_ROOT/data/example/ssd/ssd_pascal.py
- train_data、test_data存放地址(82-84行)
- mdel_name、save_dir等(236-246行)
- name_size_file、pretrain_model、label_map_file等(258-263行)
- 類別數:num_classes = open(label_map_file).read().count(‘label’)
- 測試圖片數量:num_test_image = len(open(name_size_file).readlines())
- solver_param 中’max_iter’: 120000, 表示最大迭代次數;’test_interval’: 10000, 每次評估模型效果的間隔迭代次數,用於觀察是否收斂及過擬合
- gpus=''0''
cd $CAFFE_ROOT
python example/ssd/ssd_pascal.py
3.測試訓練結果
cd $CAFFE_ROOT
python example/ssd/score_ssd_pascal.py
三.其他
1.遇到的錯誤及相關解決方案
四.參考鏈接
【1】https://github.com/weiliu89/caffe/tree/ssd
【2】https://blog.csdn.net/zhy8623080/article/details/73188594
【3】https://www.cnblogs.com/EstherLjy/p/6863890.html