二、MMsegmentation 配置教程+训练教程+模型测试( 服务器)

时间: 2022年4月8日
内容:训练 MM Segmentation 中的deeplabv3 深度神经网络

如果想要系统的学习,可以参考官方文档:

https://mmsegmentation.readthedocs.io/en/latest/get_started.html#installation

但是我理解力有限感觉不太详细。
基础的配置和介绍可以看我的上一篇博客,这篇讲一下训练。
安利一个很好用的ssh工具:MobaXterm (比pycharm传文件稳定)

1 试错

首先我也是在网上参考的教程:

https://zhuanlan.zhihu.com/p/393070556

这个教程我跟着做了下来,里面有很多值得参考的东西。比如VOCA数据集的生成。
但是我最终没有跑成,总是报错:
File Not Found Error:caugut FileNotFoundError in DataLoader Worker process 0.
这个问题网上很少有人出现,大概就是找不到数据集,但是我按教程来的也不知道错在哪里。这个bug我始终没改掉。猜测是这篇教程的作者漏掉了什么东西导致找不到路径。

2 学习

还有一篇不错的教程,可以参考:

https://blog.csdn.net/weixin_44044411/article/details/118196847

我的环境

anaconda +python 3.7+cuda111+pytorch1.8.0+mmcv-full1.3.16

3 开始

既然我的bug无法解决,于是进行了求助。
但是没人遇到我的奇葩问题,前辈告诉我,教程里在work-dirs中修改的py配置文件,是临时生成的文件,不好直接运行那个,大概是这个原因吧。

3.1

首先,将mmsegmentation project 进行还原,对于我是还原,对于刚下载好的文件就是啥都别改

下载 打开work dir mmsegmentation 初始化 指令:

git clone https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation
pip install -e .  # or "python setup.py develop"

mmsegmentation文件夹就是我们要工作的文件夹,如图:

划红线的work-dir是运行代码生成的;my-config是我建立的。

3.2

在mmsegmentation文件夹下新建data文件夹,把你的数据集放在里面。
比如你的数据集名字叫做 demo_voc
格式是VOC 数据集
demo_voc里面是:

划红线是我自己写的 忽略。
这就是标准的voc数据集需要的文件,其中多出来的ImageSets里面是ImageSets/Segmentation/train.txt、val.txt
这个需要自己做一份,上面知乎的教程里面有。

先在配置文件中修改你的类别数:标出的类别数改成你的,类别数等于 n + 1。也就是多少类别+背景。

3.3

尝试运行
格式: python …/train.py …/xxx.py

第一个是训练文件,不用改;
第二个是配置文件。

我们要运行:

python tools/train.py configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py --work-dir work-dirs

注意这个:
configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py
不是:
configs/base/model里面的。
他们俩的区别在上一篇博客里讲过。

运行结果会报错,找不到文件,因为mmsegmentation默认的数据集VOC2012我们没有。
如果跑官方数据集,下载好之后放在指定路径就可以了。
如果跑自己数据集需要修改。

3.4

打开:
configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py
这里面就是配置文件和类别,要改两个:

1 类别修改为自己数据集类别。
配置文件可以看到四个。
2 其中pascal_voc12_aug.py(打开看看知道里面只是配置文件)改为pascal_voc12.py。

这两个文件都是这个数据集的配置文件,后缀aug文件会跳转到后者。

_base_ = [
    '../_base_/models/deeplabv3_r50-d8.py',
    '../_base_/datasets/pascal_voc12.py', '../_base_/default_runtime.py',
    '../_base_/schedules/schedule_20k.py'
]
model = dict(
    decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5))

现在思路很清晰 只改这里面的文件就可以啦。

3.5

打开 config/base/pascal_voc12.py
修改data_root
修改 检查 train、val、test 三个dict里面的路径,主要是修改ann_dir

如果你做过上面的教程,这些soeasy。

首先 data_root,就是 data/demo_voc
然后对于voc数据集,ann_dir是 SegmentationClassPNG
这是我的文件,可以参考。

然后就可以运行啦,还是上面的指令,就可以开始训练啦。

应该有人关心训练配置,别忘了上面是四个文件,还差 '…/base/schedules/schedule_20k.py’这个文件没改。
我们在里面修改保存模型interval和迭代次数,一般数据集小的话不用20000.



执行:开始训练

python tools/train.py configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py --work-dir work-dirs

4

这样子训练,会发现每隔一个interval就会停下来,因为在保存模型时候出错啦。
我们修改的数据集和官方数据集的类名和类数不同,每次保存模型我设置的都进行测试,测试的时候就会报错。
所以还差两个文件要改: 底层配置 下面借鉴知乎教程

4.1

首先是在mmsegmentation/mmseg/datasets下,找到voc.py(因为我们的格式是VOC),做如下修改。其中PALETTE你可以简单理解为颜色,background对应[0, 0, 0]就是黑色,依次类推。

原来的标注VOC共有21类,我们需要换成我们的类别名字。

关于PALETTE,其实就是类别的颜色,第一个背景是黑色,怎么获得后面的颜色的通道值呢?
你可以用qq的截图工具,在选区域的时候光标会出现这个通道值,抄下来就好了。
(暴露的年龄没错我喜欢用qq)
我的四类分别是 红黄绿蓝。

4.2

然后在mmsegmentation/mmseg/core/evaluation下,这就是模型评估时候的文件。
找到class_names.py,做类似修改:
修改和voc有关的两个类


这样类别就修改好了。

4.3

训练

python tools/train.py configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py --work-dir work-dirs

应该没问题了,后面的 –work-dir +路径是保存的模型和log日志文件;
这些参数还有很多 比如–gpus-ids 、 –gpus
具体的你可以在train.py中找到。

每个interval保存模型,然后跑完了可以测试。

4.4 多GPU训练

train.py中封装了一个cfg对象。
cfg是一个Config的对象。这是官方解释:将各种文本设置变成可访问的属性。
参考:

https://blog.csdn.net/qq_20549061/article/details/107871736

只看后面就可以了。
对于GPU,
选参数,gpu-ids,gpu的id号 ,nargs =‘+’。命令格式为–gou-ids 0 1 2。
也就是在指令后面加上 –gpu-ids 0 1 2 3 4

注意它这个是空格分的 我之前遇到用,分的比较多

多GPU训练:

python tools/train.py configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py --work-dir work-dirs  --gpu-ids 1 2 3 4 5 6

nvidia-smi 指令可以查看gpu的情况 编号及占用情况 然后选空闲的编号就行了

5

测试:
指令格式 :

python …/test.py …/model.py …/work-dirs/…/latest.pth –参数

解释:
latest.pth 是训练生成的模型,默认在work-dirs中。
后面的参数可以看test.py文件中的解释。
my_output是新建的输出图片的保存路径。

python tools/test.py configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py work_dirs/latest.pth --show-dir my_output

6

这篇文章的内容可能很简单,但是对于一开始的我来说对于bug无从下手。
网上的教程我没有真正的用上,最后是受到了前辈的指导,所以我需要记录下来,万一有个像我一样的人呢。

刚入门,希望和大家一起交流学习沟通。希望能帮到您~

来源:当像鸟飞向你的山

物联沃分享整理
物联沃-IOTWORD物联网 » 二、MMsegmentation 配置教程+训练教程+模型测试( 服务器)

发表评论