最近使用 mmdetection框架训练算法模型,感觉稳定性不错,而且在加上一些trick之后可以达到SOTA的效果,所以最近在将自己的一些代码迁移到该框架下,顺便在此记录下一些使用小结。
模型训练
首先得准备好一个config.py
文件,并将其放入./configs
文件夹内。关于config文件的编写,可以参照mmdetection
中./configs
文件夹内原有的案例。
当然,对于mmdetection
中没有的模型,得先在mmdet
中写好,并写入__init__.py
文件。确认无误后,我们便可以开始训练了。
对于模型的训练,mmdetection
提供了单机多GPU训练和多机多卡多线程训练的方式。我个人比较喜欢用后者,毕竟同步BN能在一定程度上提升模型的效果。
nohup ./tools/dist_train.sh ./configs/faster_rcnn_r50_fpn_2x.py 4 > train.out 2>&1 &
上述命令中,4
表示gpu调用数,这里没有使用tensorboard
可视化,所以用.out
输出所有结果了。此外,这里还可以加上--validate
语句将模型在验证集中进行测试。
验证模型
模型训练完成后,我们可以用./tools/test.py
或者./tools/dist_test.sh
对模型进行验证,如下所示:
CUDA_VISIBLE_DEVICES=3 python ./tools/test.py configs/faster_rcnn_r50_fpn.py ./mmdet_fasterrcnn/epoch_20.pth --out results.pkl --eval bbox
./tools/dist_test.sh configs/faster_rcnn_r50_fpn.py ./mmdet_fasterrcnn/epoch_23.pth 4 --out results.pkl --eval bbox
确定模型参数后,可以用./tools/publish_model.py
将模型按规则命名:
python tools/publish_model.py ./mmdet_fasterrcnn/epoch_18.pth faster_rcnn_r50_fpn_18e_20200327.pth
注意
在训练模型和调参过程中,需要注意多进程训练完成后,部分进程可能未停止,这里需要kill
掉这些进程,然后用top -u [usrname]
确认。