一、簡介
商湯科技(2018 COCO 目標檢測挑戰賽冠軍)和香港中文大學最近開源了一個基於Pytorch實現的深度學習目標檢測工具箱mmdetection,支援Faster-RCNN,Mask-RCNN,Fast-RCNN等主流的目標檢測框架,後續會加入Cascade-RCNN以及其他一系列目標檢測框架。
相比於Facebook開源的Detectron框架,作者聲稱mmdetection有三點優勢:performance稍高、訓練速度稍快、所需視訊記憶體稍小。
我很早就聽說了這個工具箱,但是一直沒有開源。現在總算是開源了,於是就迫不及待地測試一下這個框架的效果。下面將記錄一下我的測試過程,已經期間所遇到的一些坑。
2019.05.26更新了網盤裡的demo.py檔案,現在的demo應該可以匹配官方的最新程式碼了。
2019.02.22上傳多個mmdetection模型,檢測器包括Faster-RCNN、Mask-RCNN、RetinaNet,backbone包括Resnet-50、Resnet-101、ResNext-101,網盤連結:mmdetection(密碼:dpyl)
二、安裝教程
本人的系統環境:
Ubuntu 16。04
Cuda 9。0 + Cudnn 7。0。5
Python 3。6 (mmdetection要求Python版本需要3。4+)
Anaconda 3 (可選)
這裡推薦大家使用Anaconda,可以比較方便的建立Python虛擬環境,避免不同的Python庫之間產生衝突。在安裝mmdetection之前,需要安裝以下幾個依賴庫:
PyTorch 1。1 (Pytorch 0。4。1的版本需要切換branch,在clone了mmdetection的git之後需要git checkout pytorch-0。4。1)
Cython
mmcv
下面是我的安裝和測試步驟,以Anaconda 3為例。
1。 使用conda建立Python虛擬環境(可選)
conda create -n mmdetection python=3。6
source activate mmdetection
這樣就建立了名為mmdetection的Python3。6環境,並且在terminal中啟用。如果不需要虛擬環境,則將下文的conda install改為pip install
2。 安裝PyTorch 1。1
conda install pytorch=1。1 -c pytorch
安裝好以後,進入Python環境,輸入以下程式碼測試是否安裝成功,不報錯則說明安裝成功
import torch
3。 安裝Cython
conda install cython
4。 安裝mmcv
git clone https://github。com/open-mmlab/mmcv。git
cd mmcv
pip install 。
注意pip install 後面有個點,別漏了
5。 安裝mmdetection
git clone https://github。com/open-mmlab/mmdetection。git
cd mmdetection
。/compile。sh
python setup。py install
到此,我們就完成了mmdetection及其依賴庫的安裝
6。 測試Demo 將下方的程式碼寫入py檔案,並存放到mmdetection資料夾目錄下,然後執行。該程式碼的功能是檢測圖片中的目標,測試模型是官方給出的Faster-RCNN-fpn-resnet50的模型,執行程式碼會自動下載模型。由於模型是儲存在亞馬遜雲伺服器上,速度可能會稍慢,如果下載失敗可以透過我的網盤連結mmdetection(密碼:dpyl)進行下載,存放到mmdetection資料夾目錄下,然後修改下方程式碼的相關部分
from
mmdet。apis
import
init_detector
,
inference_detector
,
show_result
# 首先下載模型檔案https://s3。ap-northeast-2。amazonaws。com/open-mmlab/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351。pth
config_file
=
‘configs/faster_rcnn_r50_fpn_1x。py’
checkpoint_file
=
‘checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351。pth’
# 初始化模型
model
=
init_detector
(
config_file
,
checkpoint_file
)
# 測試一張圖片
img
=
‘test。jpg’
result
=
inference_detector
(
model
,
img
)
show_result
(
img
,
result
,
model
。
CLASSES
)
# 測試一系列圖片
imgs
=
[
‘test1。jpg’
,
‘test2。jpg’
]
for
i
,
result
in
enumerate
(
inference_detector
(
model
,
imgs
,
device
=
‘cuda:0’
)):
show_result
(
imgs
[
i
],
result
,
model
。
CLASSES
,
out_file
=
‘result_
{}
。jpg’
。
format
(
i
))
### 7。 準備自己的資料 mmdetection支援coco格式和voc格式的資料集,下面將分別介紹這兩種資料集的使用方式 - coco資料集 官方推薦coco資料集按照以下的目錄形式儲存,以coco2017資料集為例
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
推薦以軟連線的方式建立data資料夾,下面是建立軟連線的步驟
cd mmdetection
mkdir data
ln -s $COCO_ROOT data
其中,$COCO_ROOT需改為你的coco資料集根目錄 - voc資料集 與coco資料集類似,將voc資料集按照以下的目錄形式儲存,以VOC2007為例
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── VOCdevkit
│ │ ├── VOC2007
│ │ │ ├── Annotations
│ │ │ ├── JPEGImages
│ │ │ ├── ImageSets
│ │ │ │ ├── Main
│ │ │ │ │ ├── test。txt
│ │ │ │ │ ├── trainval。txt
同樣推薦以軟連線的方式建立
cd mmdetection
mkdir data
ln -s $VOC2007_ROOT data/VOCdevkit
其中,$VOC2007_ROOT需改為你的VOC2007資料集根目錄
如果需要標註自己的資料,推薦使用LabelImg工具標註,然後需要修改mmdet/datasets/voc。py檔案中的CLASSES為你自己的類別
### 8。 訓練
官方推薦使用分散式的訓練方式,這樣速度更快,如果是coco訓練集,修改CONFIG_FILE中的pretrained引數,改為你的模型路徑,然後執行下方程式碼
。/tools/dist_train。sh
mmdetection官方程式碼已更新,目前已支援voc格式的資料集,不再需要自己修改
如果不想採用分散式的訓練方式,或者你只有一塊顯示卡,則執行下方的程式碼
python tools/train。py
至此,如果一切順利的話,你的模型應該就開始訓練了