點擊上方「CVer」,選擇加"星標"置頂
重磅乾貨,第一時間送達
本文作者:cjsnx shsb
https://zhuanlan.zhihu.com/p/162730118
本文已由原作者授權,不得擅自二次轉載
上一次安裝mmdetection的docker環境離現在已經快一個月了,本來打算隔三五天記錄一下,然後一直拖延到現在都沒記錄更新。。。。這個項目是打算記錄安裝環境,訓練模型最後到源碼解析。
1 新建容器
進入正題 mmdetection docker環境上次已經介紹一次了 ,現在我們新建一個容器
sudo nvidia-docker run -shm-size=8g -name mm_det -it -v /train_data:/mmdetection/data
nvidia-docker:新建容器能調用GPU
-name : 容器名稱 可自行修改
-v :映射宿主目錄到容器目錄, /train_data 是宿主目錄,映射到容器目錄 /mmdetection/data
退出容器
exit
重新進入容器
sudo docker exec -i -t mm_det /bin/bash
doxker exec :在運行的容器中執行命令
-i -t : 交互模式執行
mm_det : 容器名稱
/bin/bash :執行腳本
2 準備自己的VOC數據集
mmdetection 支持VOC數據集,還有COCO數據集格式,還可以自定義數據格式,現在我們採用VOC的數據格式,mm_det容器已經映射宿主目錄了,在宿主目錄/train_data,新建目錄存放數據集,可在容器內/mmdetection/data裡在操作,新建目錄結構如下
VOCdevkit
--VOC2007
----Annotations
----ImageSets
-Main
----JEPGImages
Annotations 目錄存放.xml文件,JEPGImages 存放訓練圖片,劃分數據集使用以下代碼,
代碼保存在/VOCdevkit/VOC2007 目錄下 ,直接執行
import os
import random
trainval_percent = 0.8
train_percent = 0.8
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')
for i in list:
name = total_xml[i][:-4] + '\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
上述代碼分割數據集,訓練集佔80%,測試集佔20% 運行代碼後可在/VOCdevkit/VOC2007/ImageSets/Main看見三個.txt文件
三個.txt文件裡面分別是訓練測試圖片名稱的索引,數據集準備到這就完成了
3 修改 VOC0712.py 文件
cd /mmdetection/configs/_base_/datasets
進入目錄後打開voc0712.py
在data的配置 要刪除屏蔽VOC2012的路徑,和VOC2012變量 保存文件
4 修改 voc.py 文件
cd /mmdetection/mmdet/datasets
打開 voc.py文件
這個CLASSE 是VOC標籤的類別 我們要換成自己數據集的類別標籤
5 修改class_names.py 文件
cd /mmdetection/mmdet/core/evaluation
打開 class_names.py 文件
修改 voc_classes() 函數返回的標籤,換成自己數據集的標籤 保存退出
6 修改 faster_rcnn_r50_fpn_1x_coco.py
cd mmdetection/configs/faster_rcnn
我們這次選用faster_rcnn 模型訓練,打開faster_rcnn_r50_fpn_1x_coco.py文件
faster_rcnn_r50_fpn_1xcoco.py文件裡面調用了三個文件,第一個是模型配置文件,第二個是數據集配置文件,後來兩個是配置學習率,迭代次數,模型加載路徑等等,我們把原來COCO_detection.py 修改成VOC0712.py 文件
7 修改faster_rcnn_r50_fpn.py
cd /mmdetection/configs/_base_/models
打開 faster_rcnn_r50fpn.py 文件 ,修改num_classes 數量,num_classes 的值等於類別數量,不需要加背景了
以上就是需要修改的內容,修改完成後開始訓練模型
8 訓練模型
python3 ./tools/train.py ./configs/faster_rcnn_r50_fpn_1x.py
訓練完成後可以參考/mmdetection/demo/image_demo.py文件進行測試
以上就是使用自己的數據集集訓練mmdetection faster_rcnn模型的所有內容
下載1
在CVer公眾號後臺回覆:PRML,即可下載758頁《模式識別和機器學習》PRML電子書和源碼。該書是機器學習領域中的第一本教科書,全面涵蓋了該領域重要的知識點。本書適用於機器學習、計算機視覺、自然語言處理、統計學、計算機科學、信號處理等方向。
PRML
下載2
在CVer公眾號後臺回覆:CVPR2020,即可下載CVPR2020 2020代碼開源的論文合集
在CVer公眾號後臺回覆:ECCV2020,即可下載ECCV 2020代碼開源的論文合集
重磅!CVer-目標檢測 微信交流群已成立
掃碼添加CVer助手,可申請加入CVer-目標檢測 微信交流群,目前已匯集4100人!涵蓋2D/3D目標檢測、小目標檢測、遙感目標檢測等。互相交流,一起進步!
同時也可申請加入CVer大群和細分方向技術群,細分方向已涵蓋:目標檢測、圖像分割、目標跟蹤、人臉檢測&識別、OCR、姿態估計、超解析度、SLAM、醫療影像、Re-ID、GAN、NAS、深度估計、自動駕駛、強化學習、車道線檢測、模型剪枝&壓縮、去噪、去霧、去雨、風格遷移、遙感圖像、行為識別、視頻理解、圖像融合、圖像檢索、論文投稿&交流、PyTorch和TensorFlow等群。
一定要備註:研究方向+地點+學校/公司+暱稱(如目標檢測+上海+上交+卡卡),根據格式備註,可更快被通過且邀請進群
▲長按加群
▲長按關注我們
整理不易,請給CVer點讚和在看!