首先我们在第一篇里面已经下载了SegNeXt代码
打开源代码
查看readme文件
我们先安装一下里面提到的torchprofile
链接在这
其实只要这个语句就能安装
pip install torchprofile
这一步没什么问题
很顺利
接下来继续按照他的教程走
我们在(一)已经安装了mmsegmentation
接下来去下载一下他的数据
下载数据
数据的描述在这个文件里
我先去下载ade数据试试
ADE20K 的训练集和验证集可以在 这里 下载。
您还可以在 这里 下载验证集。
数据格式如下
mmsegmentation
├── mmseg
├── tools
├── configs
├── data
│ ├── ade
│ │ ├── ADEChallengeData2016
│ │ │ ├── annotations
│ │ │ │ ├── training
│ │ │ │ ├── validation
│ │ │ ├── images
│ │ │ │ ├── training
│ │ │ │ ├── validation
编译配置
然后按照他的语句进行源代码编译
很顺利
没报什么错
打开vscode查看一下train的代码
这里忘记如何配置的vscode的小伙伴可以查看我的这篇文章Ubuntu20搭建pytorch深度学习框架——运行Dlinknet提取道路(一)——前期准备环境配置
我详细介绍了怎么查询自己的虚拟环境
以及如何配置vscode
配置完成后包就不会变红啦
然后打算在vscode中运行
报错
bash: ./tools/dist_train.sh: 权限不够
解决方法
chmod 777 ./tools/dist_train.sh /path/to/config 8
但这里报错
chmod: 无法访问 ‘/path/to/config’: 没有那个文件或目录
chmod: 无法访问 ‘8’: 没有那个文件或目录
训练
查看train的md文件
这个里面写的有个bug
按照我下面的语句运行才可以成功
bash tools/dist_train.sh configs/pspnet/pspnet_r50-d8_512x512_80k_ade20k.py
然后就会生成这样一些文件
这个一直报错
RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1640811805959/work/torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:957, invalid usage, NCCL version 21.0.3
ncclInvalidUsage: This usually reflects invalid usage of NCCL library (such as too many async ops, too many collectives at once, mixing streams in a group, etc).
错误解决
这个问题是因为我们执行的语句有问题
在我请教了师兄之后
师兄告诉我
bash 那个是分布式用的,我们就一张卡不需要
救了孩子的命
所以我们的语句换成这样就可以成功啦
单卡的说明在这里
python tools/train.py configs/pspnet/pspnet_r50-d8_512x512_80k_ade20k.py
成功开始训练!
测试
结果已经预测出来了
同理 我的语句是
python tools/test.py work_dirs/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k.py work_dirs/pspnet_r50-d8_512x512_80k_ade20k/iter_80000.pth --eval mIoU
出来的页面与之前的类似
其他尝试
还可以尝试一下其他的检查点文件
比如我尝试了一下 iter_40000.pth
看一下结果
果然没有之前的好
但是这个语句只会出来一个miou结果
我需要他把预测的图片生成该怎么办呢
这个语句就可以输出结果
python tools/test.py work_dirs/pspnet_r50-d8_512x512_80k_ade20k/pspnet_r50-d8_512x512_80k_ade20k.py work_dirs/pspnet_r50-d8_512x512_80k_ade20k/iter_80000.pth --show-dir work_results/ --eval mIoU
使用SegNeXt进行训练及预测
首先去他给的网址下载与训练权重
下载下来后
用相同的方法进行训练 看看ade数据效果如何
把这个预训练放在这个路径下
base
训练语句如下:
只不过数据的位置需要更改一下
放在如下图所示的位置
结果比想象中的好太多了!
使用最新的检查点文件进行测试
结果如下:
large
同样的我尝试了large训练到8000的权重的测试结果为
继续训练
第32000次:
第36000次:
latest:
训练自己的数据集
参考博客1
参考博客2(voc格式)
参考博客3(voc格式)
参考博客4(ade格式)
结合这一句话
我明白了
对数据格式的要求:
1、八位深度的mask
2、类别的顺序就代表了mask上对应类别的像素值!!!所以我需要修改一下我的图片