使用mmdetection快速复现计算机视觉顶会论文

本文介绍了如何在Linux系统下利用OpenMMLAB的mmdetection复现论文算法,包括环境配置、数据集格式转换、代码适应性修改,以及模型评估的步骤,为初学者提供实践指南。
摘要由CSDN通过智能技术生成

最近,老师让我将我们组的一个算法和目前最先进的算法做对比实验,复现过论文的都知道,每篇论文的硬件和软件环境各不相同,代码框逻辑结构也各不相同,这就导致复现论文变得麻烦,有没有什么办法能够快速复现这些计算顶会上的论文呢,经过我的调研发现,商汤科技公司发布的openmmlab项目将各个领域的最新论文进行复现,并且使用他们的框架进行编写,也就是用户只需要搭建好他们框架的环境,就可以在这个环境下快速复现所有openmmlab支持的论文的算法,并且openmmlab的代码结构比较清晰,可以通过config文件快速根据需要调整算法的参数。但是我在使用openmmlab的mmdetection项目跑我自定义数据集的时候,还是遇到了一些问题,下面记录分享我使用mmdetection中的支持的算法跑自定义数据集的过程供各位小伙伴参考。下面主要是在linux系统下使用mmdetection的记录,也建议小伙伴们在linux系统下运行mmdetection,windows下bug太多。

1 mmdetection环境安装

mmdetection主要是需要MMCV进行支持。

MMCV的版本需要根据电脑上cuda和pytorch的版本进行更改

比如我的电脑上cuda是11.3,pytorch是1.10.0,因此我就到下面这个网址中去找,我要的mmcv版本:(可以根据你的cuda和pytorch版本修改下面网址)

https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html

网址内容如下、

找到上图中对应的版本,复制下载地址,通过下面命令在ubuntu系统中进行下载

wget 地址

下载完成之后,将路径切换到对应的下载位置,使用下面命令进行安装即可

pip install mmcv文件名

 到这里最基础的环境,就安装成功了,还缺的库,在运行mmdetection的时候,通过报错,缺什么,就安装什么即可。

2、自定义数据集格式修改

这里建议将自定义的数据集格式修改为coco数据集格式,因为我在网上看的视频、博客基本都是将数据集修改为coco数据集格式的。一般来说,大家的数据集格式可能是yolo、voc、coco。大家可以直接在csdn中搜索yolo转coco,voc转coco,有很多现成的代码供大家进行转换。这里我就不再赘述,我后续也会出数据集格式转换的文章(大家可以先关注一波,hahaha),mmdetection项目的整体文件格式大致如下所示:

2.1 数据集存放位置

下面介绍转换好的coco数据集在mmdetection项目中的文件名称和存放位置:

在mmdet文件夹下创建data文件夹,在data文件夹下创建coco文件夹,在coco文件夹下创建annotations文件夹用来存放标签文件。在coco文件夹下直接将训练图片train2017和验证图片val2017放入

3、mmdetection代码修改

想要mmdetection能够运行我们自定义的代码文件,那么肯定是要对mmdetection原项目进行一定修改的,这里也是困扰大部分小伙伴的地方,这里如果没有修改好,后面进行训练的时候就容易出现各种问题。

3.1 检测类别的修改

将以下文件的检测类别修改为自定义数据集对应的类别:(这里我的自定义数据集只有Floating-debris这一个类别)

修改位置1:

修改位置2:

3.2 算法配置文件修改(非常重要)

3.2.1 生成完整算法配置文件

算法配置文件都在config文件夹内:

这里不建议直接修改config文件夹中对应算法的配置文件,因为首先我们尽量不要去修改原代码防止出现一些bug,其次原配置文件有的是通过应用其他公共配置文件进行编写的,直接修改需要找到引用的公共文件,然后再公共文件中进行修改,这样不仅麻烦,而且风险很大

mmdetection在运行算法的时候,会生成这个算法完整的配置文件,并将其存放在tools文件夹下的workdir文件夹中,因此,我们可以先运行mmdetection文件,然后在生成的算法配置文件中再进行我们的修改。下面介绍具体操作步骤:

找到你要跑的算法,一般有两个位置,一个是configs文件夹,另一个是projects文件夹

下面以dino算法为例:

选择你要跑的文件,复制文件路径

然后再终端执行如下代码:(不要照抄下面命令,后面的算法配置文件路径要根据你自己的电脑来写)

python tools/train.py /root/mmdetection-main/configs/dino/dino-4scale_r50_8xb2-12e_coco.py
# 或者
cd tools
python train.py /root/mmdetection-main/configs/dino/dino-4scale_r50_8xb2-12e_coco.py

在输出一定内容后,就ctrl+c终止(或者等待自己报错终止,因为上述文件还没修改,一般都会报错)

这个时候到tools文件下的work_dir文件中自动生成的完整的配置文件,我们在这个配置文件的基本上改,不动原本项目内容,不容易出错,还省事。这里我将生成的配置文件名修改为了my_dino....,你可以自己修改或者不进行修改,只要自己能够区分就行了。

3.2.2 修改生成的算法配置文件(核心)

主要修改的地方如下所示

  • 文件路径
# 这里要填上数据的根目录
data_root = '/root/mmdetection-main/mmdet/data/coco/'
# 配置文件中其他的路径同样要检查,修改,要确保路径正确,想要避免出错,可以全部替换成绝对路径
  • 添加metainfo(很坑,困扰了我很久,不添加会报list out of range错误)

metainfo = dict(
    classes=('Floating_debris'),
    palette=[(220, 20, 60)]
)

然后需要在train_dataloader、test_dataloader、val_dataloader代码中添加metainfo=metainfo

  • 日志保存间隔以及checkpoint保存间隔(根据自己的需要修改,不会影响正常运行)

checkpoint=dict(interval=10, type='CheckpointHook'),
    logger=dict(interval=50, type='LoggerHook'),
  • epoch以及val_interval(根据自己的需要修改,不会影响正常运行)

# 一般有以下两个地方
max_epoch = 273
train_cfg = dict(max_epochs=273, type='EpochBasedTrainLoop', val_interval=7)
  •  batch_size(这个根据电脑显存来配置,如果电脑显存不够,这里又设置的太大的话,就会导致训练的时候超显存而中止)
auto_scale_lr = dict(base_batch_size=8, enable=False)
# 直接全局搜索batch 找到根据情况修改 batch_size调的越大,训练效果越好,但是注意别爆显存了
  • num_class

num_class = 自定义数据集种类数

  • 加载预训练文件

load_from = None

预训练文件可以到github openmmlab mmdetection项目官网去查看

https://github.com/open-mmlab/mmdetection

可以将需要的配置文件下载到本地,然后再load_from后面添加上对应的配置文件路径即可。

修改好文件之后,可以rename一下,然后放在原来的configs文件下的位置

3.3 训练

可以使用修改好的文件,进行训练(train.py文件后面要加上对应的修改好的配置文件的路径)

# 还是使用tools文件夹下的train.py函数进行训练,可以先进行tools文件夹,然后运行trian.py
python train.py /root/mmdetection-main/configs/dino/my_dino-4scale_r50_8xb2-12e_coco.py

 4、训练过程日志输出解析

下面是我网上找的一张图,感觉介绍的还是比较详细的

5、模型评估分析

5.1 日志分析(可以绘制分类曲线)

# 要先安装 pip install seaborn
LOGFILE=_ 	# log文件 log.json
OUTFILE=_ 	# 图片输出地址
KEYS=_ 		# 打印的键值
TITLE=_		# 输出图片title
python tools/analysis_tools/analyze_logs.py plot_curve $LOGFILE [--keys ${KEYS}] [--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] [--style ${STYLE}] [--out ${OUTFILE}]

例如:

# 不设置--key 默认就是mAP_bbox
python analysis_tools/analyze_logs.py plot_curve /root/mmdetection-main/tools/work_dirs/dino-4scale_r50_8xb2-12e_coco/20240218_141430/vis_data/20240218_141430.json --out log_curve_dini_50.png
# 设置--key
python analysis_tools/analyze_logs.py plot_curve /root/mmdetection-main/tools/work_dirs/dino-4scale_r50_8xb2-12e_coco/20240218_141430/vis_data/20240218_141430.json --key loss --out log_curve_dini_50.png

--key有哪些内容可以到log文件中去查看

 5.2 使用image_demo.py测试图片

复制一张测试集图片到demo文件夹下:

运行示例:

python /root/mmdetection-main/demo/image_demo.py /root/mmdetection-main/demo/000004.jpg /root/mmdetection-main/configs/dino/my_dino-4scale_r50_8xb2-12e_coco.py --weights /root/mmdetection-main/tools/work_dirs/dino-4scale_r50_8xb2-12e_coco/epoch_12.pth

6、总结

到这里,使用mmdetection的环境配置,数据集格式位置、配置文件修改、训练,测试都介绍完毕了,感谢各位小伙伴看到这里,如果对大家有帮助的话,麻烦给博主点个关注,感谢感谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿000001号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值