1. 程式人生 > >R-FCN、SSD、YOLO2、faster-rcnn和labelImg實驗筆記

R-FCN、SSD、YOLO2、faster-rcnn和labelImg實驗筆記

轉自:https://ask.julyedu.com/question/7490

R-FCN
paper:https://arxiv.org/abs/1605.06409
作者程式碼:https://github.com/daijifeng001/R-FCN #matlab版本
這裡使用python版本的程式碼:https://github.com/Orpine/py-R-FCN

1.下載程式碼
git clone https://github.com/Orpine/py-R-FCN.git

2.克隆caffe
cd py-R-FCN
git clone https://github.com/Microsoft/caffe.git #Microsoft的源
[可選]
cd caffe
git reset --hard 1a2be8e

3.編譯Cython模組
cd py-R-FCN/lib
make

4.編譯caffe和pycaffe

這裡Makefile.config要支援Python layers!

In your Makefile.config, make sure to have this line uncommented

WITH_PYTHON_LAYER := 1

cd py-R-FCN/caffe
cp Makefile.config.example Makefile.config 
make -j8 && make pycaffe

5.下載resnet caffemodel
從OneDriver下載rfcn_models https://1drv.ms/u/s!AoN7vygOjLIQqUWHpY67oaC7mopf
解壓到:py-R-FCN/data下
解壓後的目錄:
py-R-FCN/data/rfcn_models/resnet50_rfcn_final.caffemodel
py-R-FCN/data/rfcn_models/resnet101_rfcn_final.caffemodel

6.執行demo
python py-R-FCN/tools/demo_rfcn.py --net ResNet-50
python py-R-FCN/tools/demo_rfcn.py --net ResNet-101

ResNet-50效果圖:

resnet50.png


resnet50-2.png

ResNet-101效果圖:

R-FCN101.png

R-FCN101-2.png

7.準備訓練和測試
筆者這裡簡單使用VOC2007,並且修改名稱VOC0712,筆者把資料集直接放在py-R-FCN/data下
官網使用VOC2007和VOC2012,使用的時候要合併資料集,具體參考官網的Preparation for Training & Testing 第四點

8.下載ImageNet 與預訓練的ResNet-50和ResNet-100
OneDriver:https://onedrive.live.com/%3Fa ... FF777(在KaimingHe的github https://github.com/KaimingHe/d ... works )
mkdir py-R-FCN/data/imagenet_models
將model放到該目錄

9.可自己修改模型,類別,修改相應的py-r-fcn/py-R-FCN/models/pascal_voc/目錄下對應的檔案和py-r-fcn/lib/datasets/pascal_voc.py。筆者這裡還是使用預設的。

10.修改迭代次數
vi py-r-fcn/experiments/scripts/rfcn_end2end_ohem.sh
把pascal_voc的ITERS 調小

11.訓練
./py-r-fcn/experiments/scripts/rfcn_end2end_ohem.sh 0 ResNet-50 pascal_voc 
其他訓練方式請自行參考官網Usage

R-FCN_training.png


12.測試
將訓練好的模型py-r-fcn/py-R-FCN/output/rfcn_end2end_ohem/voc_0712_trainval/resnet50_rfcn_ohem_iter_x.caffemodel,放到 py-r-fcn/py-R-FCN/data/rfcn_models 下,修改 py-R-FCN/tools/demo_rfcn.py的NETS,執行

SSD
paper:https://arxiv.org/abs/1512.02325
作者程式碼:https://github.com/weiliu89/caffe/tree/ssd

1.下載程式碼:
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd

2.編譯程式碼
cp Makefile.config.example Makefile.config
make -j8
make py
make test -j8
make runtest -j8

3.準備
1.下載caffemodel和prototxt 
https://gist.github.com/weiliu ... f81d6
從上邊地址下載完放到/models/VGGNET/

4.下載VOC2007和VOC2012
cd /root/data
wget http://host.robots.ox.ac.uk/pa ... 2.tar
wget http://host.robots.ox.ac.uk/pa ... 7.tar
wget http://host.robots.ox.ac.uk/pa ... 7.tar
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar

5.建立LMDB檔案
cd $CAFFE_ROOT
./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh

6.訓練模型
python examples/ssd/ssd_pascal.py 
也可以從這裡http://www.cs.unc.edu/%257Ewli ... ar.gz 下訓練好的模型。

7.評估模型
python examples/ssd/score_ssd_pascal.py

ssd-final.png

8.測試模型
python examples/ssd/ssd_pascal_webcam.py #筆者這步忽略
貼幾張youtube的SSD實時檢測效果,視訊地址:https://www.youtube.com/watch?v=6q-DBCPROA8

youtube_ssd_1.png

youtubeaas1.png

youtubess3.png

youtubessd5.png

直接用ssd_detect.ipynb(examples/ssd_detect.ipynb)測試

ssd-office.png

9.訓練其他資料集忽略

mxnet 版本的ssd
程式碼地址:https://github.com/zhreshold/mxnet-ssd

1.下載程式碼
git clone --recursive https://github.com/zhreshold/mxnet-ssd.git

2.編譯mxnet
cd mxnet-ssd/mxnet
cp make/config.mk ./config.mk #自行修改配置檔案
make -j8

3.下載預訓練模型
地址:https://dl.dropboxusercontent. ... 2.zip。下載後解壓到model下

4.測試demo
python demo.py --epoch 0 --images ./data/demo/dog.jpg --thresh 0.5

效果圖:

mxnet-ssd1.png

mxnetssd3.png

5.其他的訓練資料忽略

YOLO2
paper:https://arxiv.org/abs/1506.02640
官網:http://pjreddie.com/darknet/yolo/

1.下載程式碼
git clone https://github.com/pjreddie/darknet
cd darknet
make

2.下載模型
wget http://pjreddie.com/media/files/yolo.weights

3.檢測
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
效果圖

yolo1.png

yolo2.png

其他效果圖

yolo3.png

yolo4.png

4.所有檢測
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0

yolo5.png

5.在視訊上檢測
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights <video file>

yolo2.png

yolo2-2.png

yolo3.png

yolo2-v3.png

faster-rcnn
paper:https://arxiv.org/abs/1506.01497
官方版本:https://github.com/ShaoqingRen/faster_rcnn #matlab
這裡使用python版本:https://github.com/rbgirshick/py-faster-rcnn

1.下載程式碼
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
筆者這裡換了官方的源,沒問題的同學可忽略
cd caffe-fast-rcnn

git remote add caffe https://github.com/BVLC/caffe.gitX86Xgit fetch caffe

git merge caffe/master 

2.編譯Cython模組
cd $FRCN_ROOT/lib
make

3.編譯caffe和pycaffe

這裡Makefile.config要支援Python layers!

In your Makefile.config, make sure to have this line uncommented

WITH_PYTHON_LAYER := 1

cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe

4.下載預訓練模型
cd $FRCN_ROOT
./data/scripts/fetch_faster_rcnn_models.sh

5.測試demo
cd $FRCN_ROOT
./tools/demo.py

效果圖:

faster-rcnn1.png

faster-rcnn.png

faster-rcnn4.png

faster-rcnn5.png

faster-rcnn6.png

6.其他資料集訓練的此處忽略

labelImg
筆者使用的影象標註工具是labelImg,製作的格式和PASCAL VOC一樣,可在windows、linux和Mac使用。
程式碼地址:https://github.com/tzutalin/labelImg

1.環境依賴
至少python2.6和PyQt 4.8

2.Linux/Ubuntu/Mac 安裝
sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
make all
./labelImg.py

Windows
在檔案目錄下執行
pyrcc4 -o resources.py resources.qrc
python labelImg.py

3.常規使用步驟
python labelImg.py
在File選單選Change default saved annotation folder
點選Open Dir,開啟圖片路徑
點選Create RectBox,畫標註

4.常用快捷鍵
Ctrl + r 選擇annotation的預設存放路徑
Ctrl + n 新建一個標註
Ctrl + s 儲存圖片
n:下張圖片
p:上一張圖片

5.預先可以在 labelImg/data/predefined_classes.txt 定義標註類別

labelImage.png