訓練自己的VOC數(shù)據(jù)集及常見問題見下文:
mmdetection訓練自己的VOC數(shù)據(jù)集及常見問題_不瘦8斤的妥球球餅的博客-CSDN博客_mmdetection訓練voc
目錄
一、環(huán)境安裝
二、訓練測試步驟
三、常見問題
batch size設置
學習率和epoch的修改
訓練過程loss為nan的問題
GPU out of memory
保存最佳權(quán)重文件
訓練生成的.pth文件占用較大內(nèi)存
一、環(huán)境安裝
代碼:GitHub - open-mmlab/mmdetection: OpenMMLab Detection Toolbox and Benchmark
官方安裝教程:Prerequisites — MMDetection 2.23.0 documentation
或者mmdetection/get_started.md at master · open-mmlab/mmdetection · GitHub
二、訓練測試步驟
步驟一:準備數(shù)據(jù)。首先根據(jù)規(guī)范的COCO數(shù)據(jù)集導入到項目目錄下,如下所示:
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations(放json文件train,val,test)
│ │ ├── train2017(放圖片)
│ │ ├── val2017(放圖片)
│ │ ├── test2017(放圖片)
推薦以軟連接的方式創(chuàng)建:
cd mmdetection
mkdir data
ln -s $COCO2017_ROOT data/coco
其中,$COCO2017_ROOT需改為你的coco數(shù)據(jù)集根目錄。
自定義的數(shù)據(jù)集可借鑒一個大佬的.xml轉(zhuǎn)為coco格式的.json文件代碼:把voc格式的標注文件.xml轉(zhuǎn)為coco格式的.json文件_ming.zhang的博客-CSDN博客_pascal voc標注格式
#注意:
- 將圖片和.xml文件放在同一文件夾下
- 其中xml_list = glob.glob(xml_dir +"/*.xml")中g(shù)lob.glob要使用絕對路徑。
運行該代碼可將數(shù)據(jù)集按照9:1分成訓練集和測試集。
步驟二:修改config.py
在configs文件夾中選擇自己要訓練的config文件,例如:faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py
選好后,打開可以看到faster_rcnn_r50_fpn_1x_coco.py的基礎配置如下:
?
需要修改前兩個文件(如紅框所示):
1. 退到上級目錄找到_base_,找到faster_rcnn_r50_fpn.py,修改原COCO類的數(shù)目:
?
2. 在../_base_/datasets/coco_detection.py修改成你的數(shù)據(jù)源:
步驟三:修改mmdetection/mmdet/datasets目錄下coco.py
修改CLASSES成自己的類別數(shù),如果是一個類別,需要寫成CLASSES = ('person',)【需要加一個逗號】,否則會出現(xiàn) “AssertionError: CLASSES in RepeatDatasetshould be a tuple of str.Add comma if number of classes is 1 as CLASSES = (person,)” 的錯誤。
步驟四:修改mmdetection/mmdet/core/evaluation目錄下class_names.py
步驟五:運行python setup.py install,重新編譯
?
步驟六:運行訓練代碼
1. 使用單個GPU進行訓練
python ./tools/train.py ${CONFIG_FILE} [optional arguments]
python ./tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn.py ?--work_dir models
2.使用多個GPU進行訓練
./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]
./tools/dist_train.sh ?configs/faster_rcnn/faster_rcnn_r50_fpn.py
[optional arguments] ?可選參數(shù)
--no-validate ?: 不建議使用,代碼中每隔K(默認為1)執(zhí)行評估,可以在configs/_base_/datasets/voc0712.py 修改evaluation = dict(interval=1, metric='mAP')
--work-dir ${WORK_DIR} ? 覆蓋配置文件中指定的工作目錄
--resume-from ${CHECKPOINT_FILE} ? 程序中斷后繼續(xù)訓練,從先前的檢查點文件恢復
--options 'Key=value' ? : ?在使用的配置中覆蓋一些設置。
步驟七:測試:
# single-gpu testing
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] [--show]
三、常見問題
batch size設置
學習率和epoch的修改
?
重要:配置文件中的默認學習率(lr=0.02)是8個GPU和samples_per_gpu=2(批大小= 8 * 2 = 16)。根據(jù)線性縮放規(guī)則,如果您使用不同的GPU或每個GPU的有多少張圖像,則需要按批大小設置學習率,例如,對于4GPU* 2 img / gpu=8,lr =8/16 * 0.02 = 0.01 ;對于16GPU* 4 img / gpu=64,lr =64/16 *0.02 = 0.08 。
計算公式:lr = (gpu_num * samples_per_gpu) / 16 * 0.02
?
訓練過程loss為nan的問題
常見問題解答 — MMDetection 2.23.0 文檔
1.檢查數(shù)據(jù)的標注是否正常
長或?qū)挒?0 的框可能會導致回歸 loss 變?yōu)?nan,一些小尺寸(寬度或高度小于 1)的框在數(shù)據(jù)增強(例如,instaboost)后也會導致此問題。 因此,可以檢查標注并過濾掉那些特別小甚至面積為 0 的框,并關(guān)閉一些可能會導致 0 面積框出現(xiàn)數(shù)據(jù)增強。
2.降低學習率
一般出現(xiàn)loss nan,無非是網(wǎng)絡傳輸?shù)奶荻冗^大導致的,所以首先考慮在模型配置schedule_1x.py里減小模型的學習率。可是學習率調(diào)小100倍甚至10000倍,還出現(xiàn)nan的情況,所以考慮其他原因?qū)е隆O扰懦龑W習率的影響,將學習率設為0,loss依舊nan,然后就可以嘗試下一個了。
3.延長 warm up 的時間
一些模型在訓練初始時對學習率很敏感,可以在模型配置schedule_1x.py里把?warmup_iters
?從 500 更改為 1000 或 2000。
4.梯度裁剪
一些模型需要梯度裁剪來穩(wěn)定訓練過程。 默認的 grad_clip 是 None, 你可以在模型配置schedule_1x.py里設置 optimizer_config=dict(_delete_=True, grad_clip=dict(max_norm=35, norm_type=2)) 如果你的 config 沒有繼承任何包含 optimizer_config=dict(grad_clip=None), 你可以直接設置optimizer_config=dict(grad_clip=dict(max_norm=35, norm_type=2))。
5.不使用fp16訓練
如果用了fp16訓練,可嘗試將其注釋掉。
# fp16 = dict(loss_scale=512.)
GPU out of memory
常見問題解答 — MMDetection 2.23.0 文檔
-
存在大量 ground truth boxes 或者大量 anchor 的場景,可能在 assigner 會 OOM。 您可以在 assigner 的配置中設置?
gpu_assign_thr=N
,這樣當超過 N 個 GT boxes 時,assigner 會通過 CPU 計算 IOU。 -
在 backbone 中設置?
with_cp=True
。 這使用 PyTorch 中的?sublinear?strategy
?來降低 backbone 占用的 GPU 顯存。 -
使用?
config/fp16
?中的示例嘗試混合精度訓練。loss_scale
?可能需要針對不同模型進行調(diào)整。
保存最佳權(quán)重文件
將evaluation = dict(interval=1, metric='bbox')
改為
evaluation = dict(interval=1, metric='bbox', save_best='auto')
訓練生成的.pth文件占用較大內(nèi)存
可修改configs/base/default_runtime.py文件中:
checkpoint_config = dict(interval=10) # interval=10 表示10個epoch保存一次
參考鏈接:文章來源:http://www.zghlxwxcb.cn/news/detail-463521.html
使用mmdetection中的YOLOv3訓練自己的數(shù)據(jù)集_菜菜2020的博客-CSDN博客_mmdetection yolov3文章來源地址http://www.zghlxwxcb.cn/news/detail-463521.html
到了這里,關(guān)于mmdetection訓練自己的COCO數(shù)據(jù)集及常見問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!