[05/29/2020]該回購是大約兩年前啟動的,它是支持多GPU培訓的第一個開源對象檢測代碼。它一直在整合許多人的巨大努力。但是,過去幾年中,我們看到許多高質量的存儲庫出現了,例如:
在這一點上,我認為此存儲庫在管道和編碼方式方面是不合時宜的,並且不會積極地保持。儘管您仍然可以將此倉庫用作遊樂場,但我強烈建議您轉到上述存儲庫,以深入研究對象檢測的西部世界!
該項目是更快的R-CNN的Pytorch實現,旨在加快更快的R-CNN對象檢測模型的訓練。最近,有許多好的實現:
rbgirshick/py-faster-rcnn,基於pycaffe + numpy開發
longcw/praster_rcnn_pytorch,基於pytorch + numpy開發
Endernewton/TF-Faster-RCNN,基於TensorFlow + Numpy開發
ruotianluo/pytorch-faster-rcnn,基於pytorch + tensorflow + numpy開發
在實施過程中,我們轉介上述實現,especailly longcw/faster_rcnn_pytorch。但是,與上述實現相比,我們的實施具有幾個獨特的新功能:
它是純Pytorch代碼。我們將所有Numpy實現都轉換為Pytorch!
它支持多圖像批處理培訓。我們修改了所有層,包括數據加載器,RPN,ROI-Pooling等,以支持每個Minibatch中的多個圖像。
它支持多次GPU培訓。我們使用多個GPU包裝器(此處的nn.dataparallear)使使用一個或多個GPU的靈活性,作為上述兩個功能的優點。
它支持三種合併方法。我們整合了三種合併方法:ROI POON,ROI ALIGN和ROI作物。更重要的是,我們修改了所有這些,以支持多圖像批處理培訓。
它是記憶效率的。我們將圖像縱橫比將具有相似縱橫比的圖像限制為MiniBatch。因此,我們可以在單個Titan X(12 GB)上使用批處理= 4(4張圖像)訓練Resnet101和VGG16。當使用8 GPU訓練時,每個GPU的最大批次化為3(RES101),總計24。
它更快。基於上述修改,培訓速度要快得多。我們在下表中報告了NVIDIA TITAN XP的訓練速度。
特徵金字塔網絡(FPN)
面具R-CNN(正在進行Roytseng-tw已經實施)
圖R-CNN(擴展到場景圖生成)
我們使用兩個不同的網絡體系結構:VGG16和RESNET101在三個數據集上徹底基準測試代碼:Pascal VOC,可可和視覺基因組。以下是結果:
1)。 Pascal VOC 2007(火車/測試:07TrainVal/07 -Test,比例= 600,ROI Align)
| 模型 | #GPU | 批量大小 | LR | lr_decay | max_epoch | 時間/時代 | mem/gpu | 地圖 |
|---|---|---|---|---|---|---|---|---|
| VGG-16 | 1 | 1 | 1E-3 | 5 | 6 | 0.76小時 | 3265MB | 70.1 |
| VGG-16 | 1 | 4 | 4E-3 | 8 | 9 | 0.50小時 | 9083MB | 69.6 |
| VGG-16 | 8 | 16 | 1E-2 | 8 | 10 | 0.19小時 | 5291MB | 69.4 |
| VGG-16 | 8 | 24 | 1E-2 | 10 | 11 | 0.16小時 | 11303MB | 69.2 |
| RES-101 | 1 | 1 | 1E-3 | 5 | 7 | 0.88小時 | 3200 MB | 75.2 |
| RES-101 | 1 | 4 | 4E-3 | 8 | 10 | 0.60小時 | 9700 MB | 74.9 |
| RES-101 | 8 | 16 | 1E-2 | 8 | 10 | 0.23小時 | 8400 MB | 75.2 |
| RES-101 | 8 | 24 | 1E-2 | 10 | 12 | 0.17小時 | 10327MB | 75.1 |
2)。可可(火車/測試:Coco_train+Coco_val-Minival/Minival,Scale = 800,Max_size = 1200,ROI Align)
| 模型 | #GPU | 批量大小 | LR | lr_decay | max_epoch | 時間/時代 | mem/gpu | 地圖 |
|---|---|---|---|---|---|---|---|---|
| VGG-16 | 8 | 16 | 1E-2 | 4 | 6 | 4.9小時 | 7192 MB | 29.2 |
| RES-101 | 8 | 16 | 1E-2 | 4 | 6 | 6.0小時 | 10956 MB | 36.2 |
| RES-101 | 8 | 16 | 1E-2 | 4 | 10 | 6.0小時 | 10956 MB | 37.0 |
筆記。由於上述模型使用比例= 800,因此您需要在test命令末尾添加“ -ls”。
3)。可可(火車/測試:Coco_train+Coco_val-Minival/Minival,Scale = 600,Max_size = 1000,ROI Align)
| 模型 | #GPU | 批量大小 | LR | lr_decay | max_epoch | 時間/時代 | mem/gpu | 地圖 |
|---|---|---|---|---|---|---|---|---|
| RES-101 | 8 | 24 | 1E-2 | 4 | 6 | 5.4小時 | 10659 MB | 33.9 |
| RES-101 | 8 | 24 | 1E-2 | 4 | 10 | 5.4小時 | 10659 MB | 34.5 |
4)。視覺基因組(火車/測試:vg_train/vg_test,比例= 600,max_size = 1000,ROI Align,類別= 2500)
| 模型 | #GPU | 批量大小 | LR | lr_decay | max_epoch | 時間/時代 | mem/gpu | 地圖 |
|---|---|---|---|---|---|---|---|---|
| VGG-16 | 1 P100 | 4 | 1E-3 | 5 | 20 | 3.7小時 | 12707 MB | 4.4 |
感謝Remi在視覺基因組上提供了驗證的檢測模型!
首先,克隆代碼
git clone https://github.com/jwyang/faster-rcnn.pytorch.git
然後,創建一個文件夾:
cd faster-rcnn.pytorch && mkdir data
pascal_voc 07+12 :請按照py-faster-rcnn中的說明準備VOC數據集。實際上,您可以參考任何其他人。下載數據後,在文件夾數據/中創建軟鏈接。
可可:還請遵循PY-FASTER-RCNN中的說明來準備數據。
視覺基因組:請按照自下而上的注意說明準備視覺基因組數據集。您需要首先下載圖像和對象註釋文件,然後執行必要條件,以根據此存儲庫中提供的腳本獲得詞彙和清潔註釋。
我們在VGG和Resnet101的實驗中使用了兩個驗證的模型。您可以從:
VGG16:Dropbox,VT服務器
Resnet101:Dropbox,VT服務器
下載它們並將它們放入數據/預處理_model/。
筆記。我們比較了Pytorch和Caffe的預算模型,令人驚訝的是,發現咖啡館預讀的模型的性能略高於預計的Pytorch。我們建議使用上述鏈接中的Caffe預估計模型來重現我們的結果。
如果您想使用Pytorch預訓練的模型,請記住將圖像從BGR轉移到RGB,並使用與預讀的模型中使用的相同數據變壓器(減去平均值和正常化)。
正如Ruotianluo/pytorch-faster-rcnn指出的那樣,請選擇make.sh文件中的正確-arch ,以編譯CUDA代碼:
| GPU模型 | 建築學 |
|---|---|
| Titanx(Maxwell/Pascal) | SM_52 |
| GTX 960m | SM_50 |
| GTX 1080(TI) | SM_61 |
| GRID K520(AWS G2.2XLARGE) | SM_30 |
| 特斯拉K80(AWS P2.xlarge) | SM_37 |
有關設置體系結構的更多詳細信息,請參見此處或此處
使用PIP安裝所有Python依賴性:
pip install -r requirements.txt
使用以下簡單命令來編譯CUDA依賴性:
cd lib
sh make.sh
它將編譯您需要的所有模塊,包括NMS,ROI_POOING,ROI_ALIGN和ROI_CROP。默認版本使用Python 2.7編譯,如果您使用的是其他Python版本,請自己編譯。
正如本期所指出的那樣,如果您在編譯過程中遇到某些錯誤,則可能會錯過將CUDA路徑導出到您的環境中。
在培訓之前,請設置正確的目錄,以保存和加載訓練有素的模型。更改trainval_net.py和test_net.py中的參數“ save_dir”和“ load_dir”以適應您的環境。
要使用pascal_voc上的VGG16訓練更快的R-CNN型號,只需運行:
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
其中“ bs”是默認1的批處理大小。或者,要在pascal_voc上使用resnet101訓練,簡單運行:
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py
--dataset pascal_voc --net res101
--bs $BATCH_SIZE --nw $WORKER_NUMBER
--lr $LEARNING_RATE --lr_decay_step $DECAY_STEP
--cuda
上面,可以根據您的GPU內存大小自適應設置batch_size和worker_number。在帶有12G內存的Titan XP上,它最多可達4 。
如果您有多個(例如8)Titan XP GPU,請全部使用!嘗試:
python trainval_net.py --dataset pascal_voc --net vgg16
--bs 24 --nw 8
--lr $LEARNING_RATE --lr_decay_step $DECAY_STEP
--cuda --mGPUs
如果您想對可可或視覺基因組進行訓練,將數據集更改為“可可”或“ VG”。
如果您想評估Pascal_Voc測試集中預訓練的VGG16模型的檢測性能,只需運行
python test_net.py --dataset pascal_voc --net vgg16
--checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT
--cuda
指定特定的模型會話,Checkepoch和檢查點,例如,會話= 1,Epoch = 6,檢查點= 416。
如果您想使用預訓練的型號在自己的圖像上運行檢測
python demo.py --net vgg16
--checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT
--cuda --load_dir path/to/model/directoy
然後,您將在文件夾$ root/images中找到檢測結果。
請注意默認示例僅支持Pascal_Voc類別。您需要更改行以調整自己的模型。
以下是一些檢測結果:


您可以通過運行在實時演示中使用網絡攝像頭
python demo.py --net vgg16
--checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT
--cuda --load_dir path/to/model/directoy
--webcam $WEBCAM_ID
通過單擊圖像窗口,然後按“ Q”鍵來停止演示。
該項目同樣由Jianwei Yang和Jiasen Lu以及許多其他項目(感謝它們!)。
@article{jjfaster2rcnn,
Author = {Jianwei Yang and Jiasen Lu and Dhruv Batra and Devi Parikh},
Title = {A Faster Pytorch Implementation of Faster R-CNN},
Journal = {https://github.com/jwyang/faster-rcnn.pytorch},
Year = {2017}
}
@inproceedings{renNIPS15fasterrcnn,
Author = {Shaoqing Ren and Kaiming He and Ross Girshick and Jian Sun},
Title = {Faster {R-CNN}: Towards Real-Time Object Detection
with Region Proposal Networks},
Booktitle = {Advances in Neural Information Processing Systems ({NIPS})},
Year = {2015}
}