如何在Caffe下實現SSD


一. 配置 Caffe環境及下載、編譯、測試SSD源碼

1.下載源碼

git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

2. 編譯源碼

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等路徑,運行即可
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

【4】https://blog.csdn.net/lilai619/article/details/53791420

【5】https://blog.csdn.net/jesse_mx/article/details/52965281


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM