Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

尝试进行了复现,但是没有达到论文中的结果,不知道哪一步出现了问题。 #29

Open
sunmingqi-1 opened this issue Nov 21, 2023 · 23 comments

Comments

@sunmingqi-1
Copy link

sunmingqi-1 commented Nov 21, 2023

十分感谢您的工作以及@wwqq之前的回复 ,我目前正在尝试复现这篇论文的代码但是没有成功,我想要做分割任务,我在seaformer-seg 的local_configs/seaformer/seaformer_small.py 中的model backbone 中的checkpoint 直接用的,在seaformer-cls 中的README.md中下载的参数,(我没有使用seaformer-cls 做预训练,直接使用的在Google 上下载的参数,不知道这一步是否正确。)就是下面这个:(一开始用成了seaformer-seg 的README.md中提及的参数)
image
下载后是一个SeaFormer_B_cls_76.4.pth.tar ,之后我执行命令cp SeaFormer_S_cls_73.4.pth.tar SeaFormer_S.pth不知道这一步将.pth.tar 转为 .pth 文件处理的对不对),
image
之后我修改了下面这个地方:
image
数据集使用的cityScapes,如下:
image
image
之后就没有修改其它的地方了,使用如下命令执行的:
CUDA_VISIBLE_DEVICES=2 sh tools/dist_train.sh local_configs/seaformer/seaformer_small_1024x512_160k_1x8city.py 1 --work-dir checkpoint_b

但是,最后指标都上不去了,

image

始终mIoU维持在45~50之间。之后我就停止了训练。
image

可以看到aAcc、mIoU、mAcc几乎没有变化(不知道是什么原因)?
我使用同样的方法,验证了seaformer_base ,也时候出现了这样的情况?
我的环境如下:
torch 1.10.0+cu111
torchaudio 0.10.0+rocm4.1
torchvision 0.11.0+cu111
mmcv-full 1.7.1
mmengine 0.9.1
mmsegmentation 1.2.1 /home/pc_stu2/Projects/mmsegmentation

复现这篇论文花了很长时间,但是还是不能和论文中的结果对应上,如果您有时间,十分希望您可以指导一下。

Originally posted by @sunmingqi-1 in #28 (comment)

@wwqq
Copy link
Collaborator

wwqq commented Nov 21, 2023

@sunmingqi-1 你好,文中的结果是在单机八卡上训练得到的,可能是因为你在单卡上训练导致的这个结果

@sunmingqi-1
Copy link
Author

sunmingqi-1 commented Nov 22, 2023

@wwqq 十分感谢您的回复。单卡训练结果不是应该更好一些,1. 多卡不是只是更加快一些但是不影响结果? 我之前加载预训练参数的时候加载错了加载成了seaformer-seg这个项目中README.md提到的参数,就是下面这个:
image ,但是奇怪的是这个最终mIoU 虽然没有达到论文的70多,但是依然比使用seaformer-cls 中的那个参数高很多,2. 想问一下您这又是什么原因呢?
3. 还有想问一下您用的什么显卡做的这个实验?4.batch size 没有看到在哪里设置?我想调的高一些? 我也一直怀疑是否是我把cityscpase 的数据集处理错了,我从官网上下载后,执行了下面这个脚本生成了”*_gtFine_labelTrainIds.png" 文件,
image
5.我仅仅对数据集做了这一步处理,就开始训练了,cityspase 还有很多脚本,是否还需要其他操作?,最后训练集2975张,验证集500张。十分希望您可以回复我这几点疑惑。

@1787648106
Copy link

@wwqq 十分感谢您的回复。单卡训练结果不是应该更好一些,1. 多卡不是只是更加快一些但是不影响结果? 我之前加载预训练参数的时候加载错了加载成了seaformer-seg这个项目中README.md提到的参数,就是下面这个: image ,但是奇怪的是这个最终mIoU 虽然没有达到论文的70多,但是依然比使用seaformer-cls 中的那个参数高很多,2. 想问一下您这又是什么原因呢? 3. 还有想问一下您用的什么显卡做的这个实验?4.batch size 没有看到在哪里设置?我想调的高一些? 我也一直怀疑是否是我把cityscpase 的数据集处理错了,我从官网上下载后,执行了下面这个脚本生成了”*_gtFine_labelTrainIds.png" 文件, image 5.我仅仅对数据集做了这一步处理,就开始训练了,cityspase 还有很多脚本,是否还需要其他操作?,最后训练集2975张,验证集500张。十分希望您可以回复我这几点疑惑。

hey, maybe the batch size you should set a proper value(such as 16) if you use a single gpu to run it.

@sunmingqi-1
Copy link
Author

@1787648106 you are right。

@zckcola
Copy link

zckcola commented Jan 11, 2024

你是对的。

你好,我用的单卡3090进行的训练base,虽然还没训练完,但感觉精度和论文中的不是很对的上,请问你解决了吗?
image

@sunmingqi-1
Copy link
Author

你是对的。

你好,我用的单卡3090进行的训练base,虽然还没训练完,但感觉精度和论文中的不是很对的上,请问你解决了吗? image

我改成4卡训练后,复现了最终结果。单卡好像实不行。

@zckcola
Copy link

zckcola commented Jan 11, 2024

你是对的。

你好,我用的单卡3090进行的训练base,虽然还没训练完,但感觉精度和论文中的不是很对的上,请问你解决了吗? image

我改成4卡训练后,复现了最终结果。单卡好像实不行。

可是这是为什么呢,单卡和多卡差异大多是训练时间差异吧,尽管有些差异也不至于如此。

@zckcola
Copy link

zckcola commented Jan 11, 2024

我想想,难道它的损失函数和使用的卡数有关吗

@sunmingqi-1
Copy link
Author

我想想,难道它的损失函数和使用的卡数有关

具体为什么我也不知道,我也觉得单卡和多卡,在最终精度上应该不能有太大的差距。

@zckcola
Copy link

zckcola commented Jan 11, 2024 via email

@sunmingqi-1
Copy link
Author

我觉得,可能是哪部分代码有问题,但是mmcv我首次使用,不知道它的损失,以及模型模块,训练脚本在哪。如果您知道的话, 希望您替我解答一下,万分感谢 凯 @.***  

------------------ 原始邮件 ------------------ 发件人: "fudan-zvg/SeaFormer" @.>; 发送时间: 2024年1月11日(星期四) 下午3:32 @.>; @.@.>; 主题: Re: [fudan-zvg/SeaFormer] 尝试进行了复现,但是没有达到论文中的结果,不知道哪一步出现了问题。 (Issue #29) 我想想,难道它的损失函数和使用的卡数有关 具体为什么我也不知道,我也觉得单卡和多卡,在最终精度上应该不能有太大的差距。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

image
losses 在这里,mmseg,是基于配置文件的,你可以从train.py 开始,调试一下。

@zckcola
Copy link

zckcola commented Jan 11, 2024

我觉得,可能是哪部分代码有问题,但是mmcv我首次使用,不知道它的损失,以及模型模块,训练脚本在哪。如果您知道的话, 希望您替我解答一下,万分感谢 凯 @.***  

------------------ 原始邮件 ------------------ 发件人: "fudan-zvg/SeaFormer" @.>; 发送时间: 2024年1月11日(星期四) 下午3:32 _@**._>; _@.@._>; 主题: Re: [fudan-zvg/SeaFormer] 尝试进行了复现,但是没有达到论文中的结果,不知道哪一步出现了问题。 (Issue #29) 我想想,难道它的损失函数和使用的卡数有关 具体为什么我也不知道,我也觉得单卡和多卡,在最终精度上应该不能有太大的差距。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: _@_.*>

image losses 在这里,mmseg,是基于配置文件的,你可以从train.py 开始,调试一下。

好的,谢谢您的回答

@wwqq
Copy link
Collaborator

wwqq commented Jan 11, 2024

@sunmingqi-1 @zckcola 你好,可以按照https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-seg README操作指引来运行代码,所有实验默认都是使用8卡完成。如果使用更少的gpu训练模型,需要将config文件中的batch size等比例增加以保证总的batch size一致。比如config里batch size=2,gpus=8,如果使用1gpu,则需要将config文件中batch size改为16。

@zckcola
Copy link

zckcola commented Jan 11, 2024

@sunmingqi-1 @zckcola 你好,可以按照https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-seg README操作指引来运行代码,所有实验默认都是使用8卡完成。如果使用更少的gpu训练模型,需要将config文件中的batch size等比例增加以保证总的batch size一致。比如config里batch size=2,gpus=8,如果使用1gpu,则需要将config文件中batch size改为16。

我训练之前改了这个配置文件的参数,请问我这应该是每个gpu16批次大小吧。
image

@wwqq
Copy link
Collaborator

wwqq commented Jan 11, 2024

@sunmingqi-1 @zckcola 你好,可以按照https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-seg README操作指引来运行代码,所有实验默认都是使用8卡完成。如果使用更少的gpu训练模型,需要将config文件中的batch size等比例增加以保证总的batch size一致。比如config里batch size=2,gpus=8,如果使用1gpu,则需要将config文件中batch size改为16。

我训练之前改了这个配置文件的参数,请问我这应该是每个gpu16批次大小吧。 image

是的,可以提供一下运行的log文件吗,谢谢!

@zckcola
Copy link

zckcola commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片:
image
image
image

@zckcola
Copy link

zckcola commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片: image image image

我刚看见了,log文件在这里
20240110_190640.log

@zckcola
Copy link

zckcola commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片: image image image

我刚看见了,log文件在这里 20240110_190640.log

image
image

@wwqq
Copy link
Collaborator

wwqq commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片: image image image

我刚看见了,log文件在这里 20240110_190640.log

image image

@zckcola 你好
1、你将https://github.com/fudan-zvg/SeaFormer/blob/main/seaformer-seg/local_configs/seaformer/seaformer_base.py 这个路径下的init_cfg改为了/root/autodl-tmp/SeaFormer-main/seaformer-seg/SeaFormer_B_cityf_77.7.pth。SeaFormer_B_cityf_77.7.pth这个checkpoint是在cityscapes上finetune后的模型,是直接用来评测的,不是作为训练初始化使用的。需要训练复现结果,应该按照README中的命令行,将分类预训练得到的checkpoint拷贝到init_cfg中对应的路径下。如果你没有做分类预训练,可以在https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-cls 下载提供的分类预训练模型,下载好后拷贝到init_cfg中对应的路径下。
2、另外,即使不训练直接做评测,你下载的SeaFormer_B_cityf_77.7对应的config是seaformer_base_1024x1024_160k_1x8city.py,而不是现在使用的seaformer_base_1024x512_160k_1x8city.py。评测时模型和config需要满足README中对应的关系。
image

@zckcola
Copy link

zckcola commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片: image image image

我刚看见了,log文件在这里 20240110_190640.log

image image

@zckcola 你好 1、你将https://github.com/fudan-zvg/SeaFormer/blob/main/seaformer-seg/local_configs/seaformer/seaformer_base.py 这个路径下的init_cfg改为了/root/autodl-tmp/SeaFormer-main/seaformer-seg/SeaFormer_B_cityf_77.7.pth。SeaFormer_B_cityf_77.7.pth这个checkpoint是在cityscapes上finetune后的模型,是直接用来评测的,不是作为训练初始化使用的。需要训练复现结果,应该按照README中的命令行,将分类预训练得到的checkpoint拷贝到init_cfg中对应的路径下。如果你没有做分类预训练,可以在https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-cls 下载提供的分类预训练模型,下载好后拷贝到init_cfg中对应的路径下。 2、另外,即使不训练直接做评测,你下载的SeaFormer_B_cityf_77.7对应的config是seaformer_base_1024x1024_160k_1x8city.py,而不是现在使用的seaformer_base_1024x512_160k_1x8city.py。评测时模型和config需要满足README中对应的关系。 image

好的,谢谢您的解答

@zckcola
Copy link

zckcola commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片: image image image

我刚看见了,log文件在这里 20240110_190640.log

image image

@zckcola 你好 1、你将https://github.com/fudan-zvg/SeaFormer/blob/main/seaformer-seg/local_configs/seaformer/seaformer_base.py 这个路径下的init_cfg改为了/root/autodl-tmp/SeaFormer-main/seaformer-seg/SeaFormer_B_cityf_77.7.pth。SeaFormer_B_cityf_77.7.pth这个checkpoint是在cityscapes上finetune后的模型,是直接用来评测的,不是作为训练初始化使用的。需要训练复现结果,应该按照README中的命令行,将分类预训练得到的checkpoint拷贝到init_cfg中对应的路径下。如果你没有做分类预训练,可以在https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-cls 下载提供的分类预训练模型,下载好后拷贝到init_cfg中对应的路径下。 2、另外,即使不训练直接做评测,你下载的SeaFormer_B_cityf_77.7对应的config是seaformer_base_1024x1024_160k_1x8city.py,而不是现在使用的seaformer_base_1024x512_160k_1x8city.py。评测时模型和config需要满足README中对应的关系。 image
请问这种类型权重文件怎么加载
image

@wwqq
Copy link
Collaborator

wwqq commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片: image image image

我刚看见了,log文件在这里 20240110_190640.log

image image

@zckcola 你好 1、你将https://github.com/fudan-zvg/SeaFormer/blob/main/seaformer-seg/local_configs/seaformer/seaformer_base.py 这个路径下的init_cfg改为了/root/autodl-tmp/SeaFormer-main/seaformer-seg/SeaFormer_B_cityf_77.7.pth。SeaFormer_B_cityf_77.7.pth这个checkpoint是在cityscapes上finetune后的模型,是直接用来评测的,不是作为训练初始化使用的。需要训练复现结果,应该按照README中的命令行,将分类预训练得到的checkpoint拷贝到init_cfg中对应的路径下。如果你没有做分类预训练,可以在https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-cls 下载提供的分类预训练模型,下载好后拷贝到init_cfg中对应的路径下。 2、另外,即使不训练直接做评测,你下载的SeaFormer_B_cityf_77.7对应的config是seaformer_base_1024x1024_160k_1x8city.py,而不是现在使用的seaformer_base_1024x512_160k_1x8city.py。评测时模型和config需要满足README中对应的关系。 image
请问这种类型权重文件怎么加载
image

不要解压,直接copy就行了,cp SeaFormer_B_cls_76.4.pth.tar <init_cfg中的路径>

@zckcola
Copy link

zckcola commented Jan 11, 2024

你好,如果你说的是运行时的工作目录的话,我设置了runs,但是没有看到什么日志文件,这是训练图片:image image image

我刚看见了,log文件在这里 20240110_190640.log

image image

你好 1、你将 https://github.com/fudan-zvg/SeaFormer/blob/main/seaformer-seg/local_configs/seaformer/seaformer_base.py 这个路径下的init_cfg改为了/root/autodl-tmp/SeaFormer-main/seaformer-seg/SeaFormer_B_cityf_77.7.pth。SeaFormer_B_cityf_77.7.pth这个checkpoint是在cityscapes上finetune后的模型,是直接用来评测的,不是作为训练初始化使用的。需要训练复现结果,应该按照README中的命令行,将分类预训练得到的checkpoint拷贝到init_cfg中对应的路径下。如果你没有做分类预训练,可以在 https://github.com/fudan-zvg/SeaFormer/tree/main/seaformer-cls 下载提供的分类预训练模型,下载好后拷贝到init_cfg中对应的路径下。2、另外,即使不训练直接做评测,你下载的SeaFormer_B_cityf_77.7对应的config是seaformer_base_1024x1024_160k_1x8city.py,而不是现在使用的seaformer_base_1024x512_160k_1x8city.py。评测时模型和config需要满足README中对应的关系。image 请问这种类型权重文件怎么加载
image

不要解压,直接copy就行了,cp SeaFormer_B_cls_76.4.pth.tar <init_cfg中的路径>
刚刚看了readme里弄好了,真是打扰您了,抱歉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants