一、mmdetection简介
中文大学-商汤科技联合实验室开源了基于 PyTorch 的检测库——mmdetection。商汤科技和港中大组成的团队在 2018年的COCO 比赛的物体检测(Detection)项目中夺得冠军,而 mmdetection 正是基于 COCO 比赛时的 codebase 重构。
这个开源库提供了已公开发表的多种视觉检测核心模块。通过这些模块的组合,可以迅速搭建出各种著名的检测框架,比如 Faster RCNN,Mask RCNN,R-FCN,RetinaNet , Cascade R-CNN及ssd 等,以及各种新型框架,从而大大加快检测技术研究的效率。遗憾的是现在还没有出yolo网络。
相比 FAIR 此前开源的 Detectron,mmdetection 有以下几大优势:
Performance 稍高
训练速度稍快: Mask R-CNN 差距比较大,其余的很小。
所需显存稍小: 显存方面优势比较明显,会小 30% 左右。
易用性更好: 基于 PyTorch 和基于 Caffe2 的 code 相比,易用性是有代差的。
简单来说,该仓库目前只支持在linux系统上运行,不支持window; PyTorch的版本要求为:PyTorch 1.0+ or PyTorch-nightly,且要根据其官网的安装命令安装,避免版本冲突问题。
2、运行demo测试环境是否安装成功
相信大家用这个mmdetection都不只是为了尝尝鲜试一下的吧,所以这里分享下我训练自定义的数据集的过程记录。
先给大家看一下我的整个mmdetection文件夹的内容。
需要说明的是官方提供的所有代码都默认使用的是coco格式的数据集,所以不想太折腾的话就把自己的数据集转化成coco数据集格式吧。各种类型数据转coco格式脚本见:转换工具箱 。我使用的是其中的labelme2coco.py文件,亲测没有问题。
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
推荐以软连接的方式创建data文件夹,下面是创建软连接的步骤
cd mmdetection
mkdir data
ln -s $COCO_ROOT data
首先说明的是我的数据集类别一共有4个,分别是:‘Glass_Insulator’, ‘Composite_Insulator’, ‘Clamp’, ‘Drainage_Plate’。且我跑的模型是’configs/faster_rcnn_r50_fpn_1x.py’。
官方提供的代码中都使用的是coco数据集,虽然我们自定义的数据集也已经转换成coco标准格式了,但是像class_name和class_num这些参数是需要修改的,不然跑出来的模型就不会是你想要的。
一些博客例如这个,所提供的方法是按照官方给的定义coco数据集的相关文件,新建文件重新定义自己的数据集和类等,但是其实这是有风险的,我之前按照他们的方法走到最后发现会出现错误,所以最简单便捷且保险的方法是直接修改coco数据集定义文件(官方也是这样建议的)。
1、定义数据种类,需要修改的地方在mmdetection/mmdet/datasets/coco.py。把CLASSES的那个tuple改为自己数据集对应的种类tuple即可。例如:
CLASSES = ('Glass_Insulator', 'Composite_Insulator', 'Clamp', 'Drainage_Plate')
2、接着在mmdetection/mmdet/core/evaluation/class_names.py修改coco_classes数据集类别,这个关系到后面test的时候结果图中显示的类别名称。例如:
def coco_classes():
return [
'Glass_Insulator', 'Composite_Insulator', 'Clamp', 'Drainage_Plate'
]
3、修改configs/faster_rcnn_r50_fpn_1x.py中的model字典中的num_classes、data字典中的img_scale和optimizer中的lr(学习率)。例如:
num_classes=5,#类别数+1
img_scale=(0,478), #输入图像尺寸的最大边与最小边(train、val、test这三处都要修改)
optimizer = dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001) #当gpu数量为8时,lr=0.02;当gpu数量为4时,lr=0.01;我只要一个gpu,所以设置lr=0.0025
python tools/train.py configs/faster_rcnn_r50_fpn_1x.py --gpus 1 --validate --work_dir work_dirs
展示下开始训练的界面:
在这里插入图片描述
训练完之后work_dirs文件夹中会保存下训练过程中的log日志文件、每个epoch的pth文件(这个文件将会用于后面的test测试)
四、Testing
checkpoint_file = 'work_dirs/epoch_100.pth'
2、使用test命令。例如:
python tools/test.py configs/faster_rcnn_r50_fpn_1x.py work_dirs/epoch_100.pth --out ./result/result_100.pkl --eval bbox --show
但是使用这个测试命令的时候会报错,报错的情况我也在官方库的issue上提交了,可以查看我的error描述,看看与你的是否一致。
根据我的问题描述可以知道使用demo.py来测试是可以出结果的,但是会出现”warnings.warn('Class names are not saved in the checkpoint’s ’ "的警告信息。使用这一步的test命令的时候会报错,程序中断,但是其实问题是一致的,应该是训练中保存下来的pth文件中没有CLASSES信息,所以show不了图片结果。因此需要按照下面的步骤修改下官方代码才可以。
(1) 修改mmdetection/mmdet/tools/test.py中的第29行为:
if show:
model.module.show_result(data, result, dataset.img_norm_cfg, dataset='coco')
最后展示效果如下:
在这里插入图片描述
在这里插入图片描述
此处的格式化输出称为检测评价矩阵(detection evaluation metrics)。此处摘录COCO数据集文档中对该评价矩阵的简要说明:
Average Precision (AP):
AP % AP at IoU=.50:.05:.95 (primary challenge metric)
APIoU=.50 % AP at IoU=.50 (PASCAL VOC metric)
APIoU=.75 % AP at IoU=.75 (strict metric)
AP Across Scales:
APsmall % AP for small objects: area < 322
APmedium % AP for medium objects: 322 < area < 962
APlarge % AP for large objects: area > 962
Average Recall (AR):
ARmax=1 % AR given 1 detection per image
ARmax=10 % AR given 10 detections per image
ARmax=100 % AR given 100 detections per image
AR Across Scales:
ARsmall % AR for small objects: area < 322
ARmedium % AR for medium objects: 322 < area < 962
ARlarge % AR for large objects: area > 962
如果大家按照我的步骤走下来出现什么问题的话欢迎在评论去留言,不知道我有没记录漏了哪个步骤!
五、实践中的Tips
如果实践中修改了mmcv的相关代码,需要到mmcv文件夹下打开终端,激活mmdetection环境,并运行"pip install ."后才会生效(这样修改的代码才会同步到anaconda的mmdetection环境配置文件中)
若想使用tensorboard可视化训练过程,在config文件中修改log_config如下:
log_config = dict(
interval=10, # 每10个batch输出一次信息
hooks=[
dict(type='TextLoggerHook'), # 控制台输出信息的风格
dict(type='TensorboardLoggerHook') # 需要安装tensorflow and tensorboard才可以使用
])
六、好资料推荐阅读
为了更好地理解mmdetection,现在好的资料还比较少,但还是有的,下面给大家推荐一些可能会对你有帮助的。
参考文献:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务