MMDetection目标检测实例

MMDetection目标检测实例

MMDetection基于cooc数据集,Faster-rcnn方法的目标识别训练



前言

接触深度学习目标检测工具箱MMDetection将近一周了,学习过程十分艰难,光是安装配置环境就用了三天时间,不过慢慢克服苦难的样子是真漂亮!
由于这个工具箱是商汤科技(2018 COCO 目标检测挑战赛冠军)和香港中文大学在2018年联合开源的,比较新,而且没有非常详细的教程供我们学习,因此这里我要非常感谢那些大佬在平台上分享自己的经验。
以下便是一个小小实例想和大家分享(MMDetection工具包的使用环境:Ubuntu+Pycharm),愿大家也可以借助MMDetection感受一下深度学习目标检测的独特魅力。


一、MMDetection安装

安装的话我的经验简单地说就是:
1.硬件配置(GPU
2.Linux比Windows好安装
3.参照Github上面的说明,一些依赖库的版本一定要对应

以下是我推荐的视频和博客:
mmdetection合集
深度学习目标检测工具箱mmdetection,训练自己的数据

二、数据集介绍

这个实例我是依据这个视频来做的,但是有很多步骤内容不太一样,可能是这个工具箱更新速度太快了,py文件有欣欣然出现的也有悄悄然陨落的,但是大体过程还是OK的。

数据集我存在了网盘里,大家直接下载就可以jku4 ,目标检测是由“壶”和“说明书”组成的,给大家放一个图感受一下:

在这里插入图片描述
数据集打开是三个文件夹:

在这里插入图片描述

其中annotations文件夹中有两个JSON文件:
在这里插入图片描述

Instances_train2017中,种类是’hu’和’shu’(应该是壶和书的意思):

在这里插入图片描述

二、创建更改相关的py文件

注意这里我所使用的mmdetection-master是在Github下载的,这个工具箱更新速度很快,所对应的py文件可能会被更新,但是大体流程是差不多一致的。

1.修改coco.py下的CLASSES=(‘hu’,’shu’),顺序不要颠倒,因为JSON格式(看上面那个图)的种类顺序就是’hu’,’shu’。

class CocoDataset(CustomDataset):
	CLASSES=('hu','shu')

2.修改configs/faster-rcnn/faster_rcnn_r50_fpn_1x_coco.py,通过这个找到它所依赖的4的py文件。

在这里插入图片描述

2.1修改configs/base/models/faster_rcnn_r50_fpn.py.

Step1:找到num_classes=3,我的py文件中num_classes只有一处(其实这块我也一直很疑惑到底是2还是3,原本是81,我数了数类别是80个,应该需要考虑到背景,但是第一次尝试的时候设置num_classes=2也可以训练下来,更新:又尝试了新的数据集,2个类别的,但是num_classes=3的时候就报错,大家两种方式都可以试一下) Step2:pretrained=None(在最上面)但是我没弄懂为什么要这样,大家可以看看那个视频。

在这里插入图片描述
2.2修改configs/base/datasets/coco_detection.py
修改文件的相关路径data_root以及image_scale()。

2.3修改schedule_1x.py和default_runtime.py

Step1:这里先通过torch.cuda.device_count()来查看你的GPU数量。当GPU数量为8时,lr=0.02;当GPU数量为4时,lr=0.01;我只要一个GPU,所以设置lr=0.0025。这里也可以修改一下total_epochs(总共迭代的次数)。
在这里插入图片描述
在这里插入图片描述

Step2:这里的interval=11是因为Val2017里面一共有11张照片,[更新:换一句话说就是每一段的间隙,如下图,val里面一共有4000张,但是我设置为12的话,训练时的过程即为下图所示]
在这里插入图片描述

load_from=’faster_rcnn_r50_fpn_1x_3.pth’(对应下文)
在这里插入图片描述

3.修改mmdet/evaluation/class_names.py中的coco_classes()。

在这里插入图片描述

4.在mmdetection-master的目录下创建一个名叫changefasterrcnn的py文件。

这边需要在该目录下创建一个checkpoints,并下载对应的pth,这个是官方训练好的权重文件,可以在对应的方法文件夹的readme中查找链接下载,像这个就是在faster-rcnn文件夹中的readme中下载这里是我提供的链接提取码:9iq1 (可能因为官方更新而不能用,会出Error,譬如什么”pth is not a checkpoint”)。
在这里插入图片描述

三、编译训练

Xshell(终端)输入:

python changefasterrcnn.py

运行完后,会在mmdetection-master目录下生成faster_rcnn_r50_fpn_1x_3.pth,对应的就是2.3的Step2所提到的pth文件(load_from=’faster_rcnn_r50_fpn_1x_3.pth’)。
在这里插入图片描述

这边就是训练过程了,过程大概5分种(这里需要提前建立一个work_dirs文件夹,训练过程中的什么日志啊,json文件以及每次迭代的pth文件,这里注意lasest.pth它是一个链接并不是一个pth文件,最后可以用epoch_10.pth来进行检测):

python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py

在这里插入图片描述
第十次迭代训练的精确性和召回率:
在这里插入图片描述

四、运行Demo实例

1.修改image_demo.py

因为我用的Xshell不好界面化显示(Pycharm社区版貌似也对pyplot过敏),即最后一个show_result_pyplot方法用不起来。如果你可以的话,就不要改了。
在这里插入图片描述
show_result_pyplot()具体内容在这个地方:
在这里插入图片描述

将plt.show()改为plt.savefig(‘myfigure’),将图片保存下来再打开查看,不让它跳出来:
在这里插入图片描述

2.终端运行

将一张照片(00000.bmp)先放入demo文件夹中,并且将之前训练得到的epoch_10.pth放入checkpoints文件夹中。

python demo/image_demo.py demo/00000.bmp configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py checkpoints/epoch_10.pth

最后当铛铛铛,可以得到这张来之不易的myfigure,看检测效果还是不错的:
在这里插入图片描述


总结

这个MMDetection工具包虽然很好用,但无论环境的安装配置还是后续的py文件内容的修改都极大考验我们的耐心与细心,希望大家都可以从中锻炼自己的能力,如果遇到Bug也可以在下面留言,我若也遇到相同的bug情况会向大家交流讨论的。如果大家对于目标检测感兴趣,也可以参加Kaggle,Tianchi以及专门的coco数据竞赛。

猜你喜欢

转载自blog.csdn.net/weixin_45734379/article/details/112725000