編者按:本文節選自《深度學習理論與實戰:提高篇 》一書,原文連結http://fancyerii.github.io/2019/03/14/dl-book/。作者李理,環信人工智慧研發中心vp,有十多年自然語言處理和人工智慧研發經驗,主持研發過多款智能硬體的問答和對話系統,負責環信中文語義分析開放平臺和環信智慧機器人的設計與研發。
以下為正文。
目錄
安裝數據準備訓練測試預測
Faster R-CNN有很多開源的版本,我們這裡介紹PyTorch實現的用法。前面介紹過原理,這裡就不分析原始碼了,有興趣的讀者開源自己閱讀原始碼。
安裝
建議使用virtualenv安裝。
# 獲取代碼git clone https://github.com/jwyang/faster-rcnn.pytorch.git#或者使用作者fork的版本,保證代碼和作者使用的一致# git clone https://github.com/fancyerii/faster-rcnn.pytorch.git# 安裝virtualenvvirtualenv -p /usr/bin/python3.6 venvsource venv/bin/activate# 安裝pytorch 0.4.0(注意這個實現只支持0.4.0,不能安裝0.4.1或者更新版本)# whl包需要去PyTorch的官網下載,更加自己的Python版本,GPU進行選擇合適的下載安裝# 這裡有老的版本下載: https://pytorch.org/get-started/previous-versions/# 安裝其它依賴pip install -r requirements.txt
數據準備
有很多數據集可以選擇,我們這裡使用PASCAL VOC數據集,這是官網。
cd faster-rcnn.pytorchwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
解壓這3個tar包,創建data目錄並且建立符號連結。
tar xvf VOCtrainval_06-Nov-2007.tartar xvf VOCtest_06-Nov-2007.tartar xvf VOCdevkit_08-Jun-2007.tar# mkdir data && cd dataln -s ../VOCdevkit VOCdevkit2007
訓練
使用如下腳本進行訓練,比較重要的參數是lr,如果太大可能會出現nan/inf,作者使用這個參數是可以收斂的。
python trainval_net.py --dataset pascal_voc --net res101 --bs 1 --nw 1 \--lr 0.0004 --lr_decay_step 8 --cuda
測試
接下來是用測試集合進行測試,作者訓練後得到的mAP在73.5%左右。讀者可以多調調超參數,原始碼作者得出的mAP是在75.2%左右。
python test_net.py --dataset pascal_voc --net res101 \--checksession 1 --checkepoch 20 --checkpoint 10021 \--cudaSaving cached annotations to /bigdata/lili/faster-rcnn.pytorch/data/VOCdevkit2007/VOC2007/ImageSets/Main/test.txt_annots.pklAP for aeroplane = 0.7534AP for bicycle = 0.8044AP for bird = 0.7760AP for boat = 0.6076AP for bottle = 0.5756AP for bus = 0.8021AP for car = 0.8283AP for cat = 0.8664AP for chair = 0.5332AP for cow = 0.8147AP for diningtable = 0.6709AP for dog = 0.8700AP for horse = 0.8561AP for motorbike = 0.7939AP for person = 0.7834AP for pottedplant = 0.4588AP for sheep = 0.7238AP for sofa = 0.7499AP for train = 0.7524AP for tvmonitor = 0.6907Mean AP = 0.7356python demo.py --net res101 \--checksession 1 --checkepoch 20 --checkpoint 10021 \--cuda --load_dir models --image_dir testimgs
預測
我們創建一個測試目錄testimgs,在裡面放幾張圖片,看看實際檢測的效果。
python demo.py --net res101 --checksession 1 --checkepoch 20 --checkpoint 10021 \--cuda --load_dir models --image_dir testimgs
下圖是上面命令檢測的實際效果,汽車都被正確的檢測出來了。
圖:Faster R-CNN檢測效果