所谓“复现”,不过是跑通了官方的代码,以下仅为个人的一些经验和理解,欢迎指正。
(其实仅作为个人学习使用,也欢迎交流)
首先贴出官方文献和代码:
官方文献:InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions,链接:InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions | Papers With Code官方Github代码:GitHub - OpenGVLab/InternImage: [CVPR 2023 Highlight] InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions
一、代码复现
1、配置信息
Linux系统Ubuntu 9.4.0(在Windows上跑会出现各种各样的问题,主要是包不兼容的问题),4卡,Cuda 11.1。
2、环境配置
下载了官方代码解压,得到以下文件:
进入 ./segmentation 文件夹下,用Notepad++软件打开README.md文件,跟据上面的内容配置环境。
3、数据集准备
ADE20K数据集下载:
官网下载:ADE20K dataset (mit.edu),这里的训练测试只用到 ADEChallengeData2016 数据集(MIT Scene Parsing Challenge 2016)就可以了。这里再附上百度网盘下载链接:链接:https://pan.baidu.com/s/1VWVzoeIgzDbFgo_RXcQ_Mw?pwd=mv4j 提取码:mv4j
关于数据集的介绍请看官网,下面的训练和测试都是基于ADEChallengeData2016进行。
4、测试(test.py部分)
将数据集上传到Linux系统,官方代码默认读取路径是 ./segmentation/data/ADEChallenge Data2016/... ,如果不想改代码的话,就在 ./segmentation 文件夹下新建一个 data 文件夹,然后把ADEChallengeData2016数据集加载到data文件夹下。数据集组织格式如下(官方代码默认):
---------------
|
|--ADEChallengeData2016
|
|--annotations
| |
| |--training
| | |
| | |--ADE_train_00000001.png
| | |--ADE_train_00000002.png
| | |--……
| |
| |--validation
| | |
| | |--ADE_val_00000001.png
| | |--ADE_val_00000002.png
| | |--……
|
|--images
| |
| |--training
| | |
| | |--ADE_train_00000001.png
| | |--ADE_train_00000002.png
| | |--……
| |
| |--validation
| | |
| | |--ADE_val_00000001.png
| | |--ADE_val_00000002.png
| | |--……
| |
若数据集放于其它路径下,则需要通过修改代码来进行数据集的读取,这里有两种解决办法:
方法一:修改test.py文件代码。
找到读取数据集的代码行:
dataset = build_dataset(cfg.data.test) #建立数据集
在该代码行前一行添加代码:
cfg.data.test['data_root'] = 'E:/data/ADE20K/ADEChallengeData2016' #通过这个命令行改变测试集的位置,添加你的测试集路径
dataset = build_dataset(cfg.data.test) #建立数据集
这样修改之后,代码就会跟据你指明的路径读取数据,数据集的组织形式依旧如上面代码块所示。若更改组织形式,则需要指明图片所在路径和标注文件所在路径,如下面代码所示:
cfg.data.test['data_root'] = 'E:/data/ADE20K/ADEChallengeData2016' #通过这个命令行改变测试集的位置,添加你的测试集路径
cfg.data.test['img_dir'] = 'val/Images' #指向图片文件的路径,图片文件的完整路径为:cfg.data.test['data_root'] + cfg.data.test['img_dir']
cfg.data.test['ann_dir'] = 'val/Masks' #指向标注文件的路径,标注文件的完整路径为:cfg.data.test['data_root'] + cfg.data.test['ann_dir']
dataset = build_dataset(cfg.data.test) #建立数据集
方法二:通过修改数据读取的底层文件实现,参考:(64条消息) mmsegmentation教程1:自定义数据集、config文件修改、训练教程_AESA相控阵的博客-CSDN博客
跟据你的模型需要,下载ckpt的链接文件并保存到你的文件中(即下文代码的[your_wei ght_path])。
做到以上准备之后,运行以下代码就可以查看模型在ADE20K数据集上的测试结果:
python test.py configs/ade20k/upernet_internimage_t_512_160k_ade20k.py [your_weight_path]/upernet_internimage_t_512_160k_ade20k.pth --eval mIoU
5、训练(train.py部分)
与第4部分类似,需要准备数据集和修改数据读取代码,模型训练不需要下载模型参数文件。准备好数据集和修改数据读取代码之后,运行以下代码(README.md)。
sh dist_train.sh configs/ade20k/upernet_internimage_t_512_160k_ade20k.py 8
可能会出现报错,原因是 sh 命令被版本舍弃了(具体原因自己网上搜索)?将 sh 命令换为 bash 命令就可以了,即:
bash dist_train.sh configs/ade20k/upernet_internimage_t_512_160k_ade20k.py 8