我的環境: Ubuntu 18.04 + cuda 10.1 + pytorch=1.0.0 + torchvision=0.2.1 + python=3.6.2
代碼參考的是github上大神的開源代碼https://github.com/jwyang/faster-rcnn.pytorch
Step一、下載安裝
1、首先代碼下載,自己down或者git命令clone都可,需要注意的是repo的master分支是pytroch=0.4版本的,所以需要切換到pytorch-1.0分支
git命令
git clone https://github.com/jwyang/faster-rcnn.pytorch.git
在faster-rcnn.pytorch文件夾目錄下終端運行
git checkout pytorch-1.0
#打開terminal cd 到faster-rcnn.pytorch文件,同時在內創建一個data文件夾
cd faster-rcnn.pytorch && mkdir data
#並在data文件夾下創建一個pretrained_model,用來存放之後的預訓練模型
cd data && mkdir pretrained_model
#安裝依賴的pyhon包,這一步若是報錯說沒有權限訪問安裝就在開頭加上 sudo
#注意scipy版本,不需要太高,我的scipy=1.2.1
pip install -r requirements.txt
接着回退到根目錄下運行
cd ..
cd lib
python setup.py build develop
2、然後是預訓練模型的下載
作者給出了兩種特徵提取網絡的Pretrained Models,下載鏈接:
下載完成後把他們放到data/pretrained_model目錄下。
3、數據集的準備
這邊使用的是Pascal_VOC數據集
下載數據集並創建軟連接(便於多個項目使用同一數據集)
下載訓練、驗證測試數據集training, validation, test data 和 VOCdevkit
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
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
將三個文件解壓到同一個文件夾內VOCdevkit
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
最終在VOCdevkit目錄下有VOC2007/Annotations等文件夾,數據集格式如圖所示
VOCdevkit
└── VOC2007
├── Annotations
├── ImageSets
│ └── Main
│ ├── test.txt
│ ├── train.txt
│ ├── trainval.txt
│ └── val.txt
└── JPEGImages
#VOC數據集的文件夾tree結構:其中Annotations內放xml標註文件,JPEGImages內放圖片,
#ImageSets/Main/內的四個txt文件分別是測試集、訓練集、訓練驗證集、驗證集。
cd 先前創建的data文件夾,創建軟連接 ln -s $VOCdevkit \home\VOCdevkit2007
刪除軟連接方式:在軟連接所在路徑下 rm -rf VOCdevkit2007
Step二、訓練
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \
--dataset pascal_voc --net vgg16 \
--bs $BATCH_SIZE --nw $WORKER_NUMBER \
--lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
--cuda
設定參數
CUDA_VISIBLE_DEVICES=0 python trainval_net.py --dataset pascal_voc --net res101 --epochs 20 --bs 1 --nw 4 --lr 1e-2 --lr_decay_step 8 --use_tfb --mGPUs --cuda
參數的意義:
CUDA_VISIBLE_DEVICES:使用哪一個GPU
–dataset pascal_voc:用pascal數據集
test_net.py --dataset pascal_voc --net vgg16 --checksession 1 --checkepoch 6 --checkpoint 416 --cuda
–net res101:用res101作爲特徵提取網絡,可選vgg16
–epochs 20:20個epoch,每個epoch都過一遍全部的訓練圖。
–bs 1:batch_size=1
–nw 4:num_works=4,4線程進行讀取,我的顯卡顯存是11G,如果顯存小的話就設爲1
–lr 1e-2: 初始學習率是0.01;可選參數
–lr_decay_step 8: 每幾個epoch學習率衰減一次(默認衰減一次0.1,通過decay_gamma可調);可選參數
–use_tfb: 使用tensorboardX實現記錄和可視化,不用就不寫;可選參數
–mGPUs: 多GPU訓練,不用就不寫該命令;可選參數
–cuda:使用cuda;
Step三、測試
測試訓練完成模型的效果
python test_net.py --dataset pascal_voc --net vgg16 --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT --cuda
e.g. SESSION=1, EPOCH=6, CHECKPOINT=416
python test_net.py --dataset pascal_voc --net vgg16 --checksession 1 --checkepoch 6 --checkpoint 416 --cuda
批量測試圖片
run demo.py
python demo.py --dataset pascal_voc --net res101 --cfg cfgs/res101.yml --load_dir models --checksession 1 --checkepoch 28 --checkpoint 2813 --image_dir images --cuda
參數的意義:
–dataset pascal_voc:用pascal數據集
–net res101:用res101作爲特徵提取網絡,可選vgg16
–cfg cfgs/res101.yml:加載res101的配置
–load_dir models --checksession 1 --checkepoch 28 --checkpoint 2813:這四個參數共同決定讀取models/文件夾中訓練好的faster_rcnn_1_28_2813.pth權重文件
–image_dir path/to/your/image:需要批量檢測的圖像文件路徑
–bs 1:batch_size=1
–cuda:使用cuda
測試好的圖片輸出在與image相同的文件夾內,其命名爲原圖名字+_det。
下一篇介紹如何訓練測試自己的數據集