一、簡介

商湯科技(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 [optional arguments]

mmdetection官方程式碼已更新,目前已支援voc格式的資料集,不再需要自己修改

如果不想採用分散式的訓練方式,或者你只有一塊顯示卡,則執行下方的程式碼

python tools/train。py ——gpus ——work_dir

至此,如果一切順利的話,你的模型應該就開始訓練了