跑通Pytorch1.0版本的Faster-RCNN,並訓練自己的數據集(一)

我的環境: 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。
 

下一篇介紹如何訓練測試自己的數據集

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章