Shank2358/GGHL

训练我自己的数据集的时候,加载预训练模型一直报错

lalalagogogochong opened this issue · 19 comments

作者,你好,我在训练自己的数据集的时候,加载模型一直报错,能帮忙看下是什么问题吗
torch.nn.modules.module.ModuleAttributeError: 'DataParallel' object has no attribute 'load_darknet_weights'
image

作者,你好,我在训练自己的数据集的时候,加载模型一直报错,能帮忙看下是什么问题吗 torch.nn.modules.module.ModuleAttributeError: 'DataParallel' object has no attribute 'load_darknet_weights' image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

作者,你好,我在训练自己的数据集的时候,加载模型一直报错,能帮忙看下是什么问题吗 torch.nn.modules.module.ModuleAttributeError: 'DataParallel' object has no attribute 'load_darknet_weights' image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。
image

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

我试了一下好像还是不太行,报这个错误
image

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

我试了一下好像还是不太行,报这个错误 image

还有一个问题,我在使用单卡训练的时候,训练过程中显存爆了,我看应该是在保存模型那会,这个显存占用会发生变化么,还有训练的时候我只准备了训练集,没有准备测试集,这个会有问题吗
image

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

我试了一下好像还是不太行,报这个错误 image

还有一个问题,我在使用单卡训练的时候,训练过程中显存爆了,我看应该是在保存模型那会,这个显存占用会发生变化么,还有训练的时候我只准备了训练集,没有准备测试集,这个会有问题吗 image

1)第一个问题我正在排查,我稍后给您反馈。可以请问一下您的pytorch和cuda版本吗。谢谢。
2)关于第二个问题,训练过程是会发生现存变化的,原因是开了多尺度训练(图像尺寸从736像素到896像素随机变化的),也就是输入的训练图像尺寸是在变化的。通常在训练时我会预留2G左右的显存。爆显存其实是由于保存后下一次训练时输入尺寸变了的原因。
3)只有训练集是没问题的,可以一直训练只是过程中没有验证,或者你也可以将训练集分一部分出来做验证。
只有训练的情况,需要改下面这一行,把开始验证的epoch改成大于您的最大epoch就行了,或者把这个验证注释掉。这句话的意思是epoch>=50的时候开始用验证/测试集进行测试。
image

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

我试了一下好像还是不太行,报这个错误 image

还有一个问题,我在使用单卡训练的时候,训练过程中显存爆了,我看应该是在保存模型那会,这个显存占用会发生变化么,还有训练的时候我只准备了训练集,没有准备测试集,这个会有问题吗 image

第一个问题应该是缺少prefetch_generator库,https://pypi.org/project/prefetch_generator/
pip安装一下应该就好了,我的版本是1.0.1,您试试看
pip install prefetch_generator==1.0.1
image
分布式可能还有一些其他的库需要pip,如果还有报这类错误,麻烦您pip安装一下。谢谢。

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

我试了一下好像还是不太行,报这个错误 image

还有一个问题,我在使用单卡训练的时候,训练过程中显存爆了,我看应该是在保存模型那会,这个显存占用会发生变化么,还有训练的时候我只准备了训练集,没有准备测试集,这个会有问题吗 image

第一个问题应该是缺少prefetch_generator库,https://pypi.org/project/prefetch_generator/ pip安装一下应该就好了,我的版本是1.0.1,您试试看 pip install prefetch_generator==1.0.1 image 分布式可能还有一些其他的库需要pip,如果还有报这类错误,麻烦您pip安装一下。谢谢。

您好,
1、第一个问题已经安装了prefetch_generator库,可是还是报下面的错误,pytorch版本是1.7.1 ,cuda11.4,可能是pytorch版本问题,我先换成1.8试试
image
2、如果在线评估的话,评估集的格式是什么样的呢,我看readme里面只有测试集的格式,如果在线评估的话,数据要以什么形式存放呢

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

我试了一下好像还是不太行,报这个错误 image

还有一个问题,我在使用单卡训练的时候,训练过程中显存爆了,我看应该是在保存模型那会,这个显存占用会发生变化么,还有训练的时候我只准备了训练集,没有准备测试集,这个会有问题吗 image

第一个问题应该是缺少prefetch_generator库,https://pypi.org/project/prefetch_generator/ pip安装一下应该就好了,我的版本是1.0.1,您试试看 pip install prefetch_generator==1.0.1 image 分布式可能还有一些其他的库需要pip,如果还有报这类错误,麻烦您pip安装一下。谢谢。

您好, 1、第一个问题已经安装了prefetch_generator库,可是还是报下面的错误,pytorch版本是1.7.1 ,cuda11.4,可能是pytorch版本问题,我先换成1.8试试 image 2、如果在线评估的话,评估集的格式是什么样的呢,我看readme里面只有测试集的格式,如果在线评估的话,数据要以什么形式存放呢

刚试了一下,torch1.8也还是有问题,不是torch版本的问题
image

image

您好。这个应该是多卡并行设置的问题。能请问一下您的电脑是多个GPU吗。我明天重新测试一下然后给您反馈,预计明天中午前可以解决,请稍等。谢谢。

谢谢您,已经改好了,是有多个GPU,但是我只用一个GPU训练的,用多个GPU训练好像有点问题,多GPU训练的命令是什么呢,我看没有train_GGHL_dist.sh这个文件,只有一个train.sh,上面的这个问题修改了一下这个地方就可以了。

多卡分布式训练就是那个train.sh,里面调用的是train_GGHL_dist.py,我忘改名了。在那个里面改多卡设置就行,我的默认设置是2卡的

我试了一下好像还是不太行,报这个错误 image

还有一个问题,我在使用单卡训练的时候,训练过程中显存爆了,我看应该是在保存模型那会,这个显存占用会发生变化么,还有训练的时候我只准备了训练集,没有准备测试集,这个会有问题吗 image

第一个问题应该是缺少prefetch_generator库,https://pypi.org/project/prefetch_generator/ pip安装一下应该就好了,我的版本是1.0.1,您试试看 pip install prefetch_generator==1.0.1 image 分布式可能还有一些其他的库需要pip,如果还有报这类错误,麻烦您pip安装一下。谢谢。

您好, 1、第一个问题已经安装了prefetch_generator库,可是还是报下面的错误,pytorch版本是1.7.1 ,cuda11.4,可能是pytorch版本问题,我先换成1.8试试 image 2、如果在线评估的话,评估集的格式是什么样的呢,我看readme里面只有测试集的格式,如果在线评估的话,数据要以什么形式存放呢

抱歉忘说了,更新torch1.8以后lib里面的DCN库要重新编译一下就好了。如果没用到DCN可以把这些注释掉就行,这个是为GGHLv2.0预留的,这里没有用到。cd ./lib/DCNv2, sh make.sh
torch1.7和torch1.8的DDP函数名有一些不一样,其实1.7也是可以用的。

cd ./lib/DCNv2

您好,换成1.8也还是不好用,还是上面的那个错误,提示TypeError: barrier() got an unexpected keyword argument 'device_ids'
还有就是如果在线评估的话,评估集的格式是什么样的呢,我看readme里面只有测试集的格式,如果在线评估的话,数据要以什么形式存放呢

cd ./lib/DCNv2

您好,换成1.8也还是不好用,还是上面的那个错误,提示TypeError: barrier() got an unexpected keyword argument 'device_ids' 还有就是如果在线评估的话,评估集的格式是什么样的呢,我看readme里面只有测试集的格式,如果在线评估的话,数据要以什么形式存放呢

请问您对这个bash修改了吗,这里的GPU数量和ID需要跟您的设备匹配上,麻烦您检查一下。然后这个sh匹配的是train_GGHL_dist.py的代码不是train_GGHL.py的代码。train_GGHL.py那个只能进行单卡训练或者旧的DP多卡训练。我这会儿也把这个仓库重新部署到服务器上再试试看还有可能是什么原因。另外能麻烦您告诉我以下错误提示是在这个代码的哪一行吗,或者给我一个类似的截图,谢谢。
image

抱歉我没有明白在线评估指的是什么?是一边训练一边验证的数据集?这个和测试数据集是一样的,都是使用的VOC格式,config.py文件里有一个DATA_PATH = "/opt/datasets/DOTA/"就是测试数据集的路径,更具体的文件夹结构在readme里面有写,长这样的
image
您只需要把数据这样准备好然后修改cfg文件中的路径即可。数据预处理的话DOTA数据集可以使用官方的工具包,
image
其他数据也可以参考这个修改,或者直接写一个脚本转换
然后训练数据有一个额外的预处理使用的是DOTA2Train.py,这个也在上述文件夹下。
您先试试看可不可以用,有遇到问题我可以帮您解决。谢谢。

cd ./lib/DCNv2

您好,换成1.8也还是不好用,还是上面的那个错误,提示TypeError: barrier() got an unexpected keyword argument 'device_ids' 还有就是如果在线评估的话,评估集的格式是什么样的呢,我看readme里面只有测试集的格式,如果在线评估的话,数据要以什么形式存放呢

在train_GGHL_dist.py的第104行,这里是多卡分布式训练DDP函数传入参数的位置,这里的参数是来自bash里面设置的值,错误应该是这里的devices_id传入的GPU id号或数量不对导致的
image

错误反馈的代码是在train_GGHL_dist.py的第129行
image

需要检查的是train_GGHL_dist.sh这里面的参数设置,我简单解释一下每个参数,麻烦您检查一下看看
image
1)节点数是 --nnodes=1,也就是有一台机子组网,如果是多机的情况这个是设备数量(这些设备的GPU需要一样)
2)每个节点的卡数是--nproc_per_node=2 ,也就表示我的设备一台里面有两个卡,然后CUDA_VISIBLE_DEVICES=0,1表示我这两个卡的ID是0和1,这里需要根据您的设备修改。
3)node_rank代表节点的rank
4)master_addr=localhost表示地址是本地(也可以改为远程设备的ip),端口号是master_port=1234

下面这个是torch官方的tutorials,可以查到我上述内容更详细的解释
https://pytorch.org/tutorials/intermediate/ddp_tutorial.html#
这个是一个博客里面的参数设置例子
https://blog.csdn.net/zwqjoy/article/details/89415933
希望这些对您有帮助。
我正在换不同设备和节点数测试这个代码,看看您这个问题还有可能是什么原因导致的,因为我目前试了几次都还没有遇到这个bug,我想弄出这个bug看看,有结果了我会及时和您反馈。谢谢。

cd ./lib/DCNv2

您好,换成1.8也还是不好用,还是上面的那个错误,提示TypeError: barrier() got an unexpected keyword argument 'device_ids' 还有就是如果在线评估的话,评估集的格式是什么样的呢,我看readme里面只有测试集的格式,如果在线评估的话,数据要以什么形式存放呢

在train_GGHL_dist.py的第104行,这里是多卡分布式训练DDP函数传入参数的位置,这里的参数是来自bash里面设置的值,错误应该是这里的devices_id传入的GPU id号或数量不对导致的 image

错误反馈的代码是在train_GGHL_dist.py的第129行 image

需要检查的是train_GGHL_dist.sh这里面的参数设置,我简单解释一下每个参数,麻烦您检查一下看看 image 1)节点数是 --nnodes=1,也就是有一台机子组网,如果是多机的情况这个是设备数量(这些设备的GPU需要一样) 2)每个节点的卡数是--nproc_per_node=2 ,也就表示我的设备一台里面有两个卡,然后CUDA_VISIBLE_DEVICES=0,1表示我这两个卡的ID是0和1,这里需要根据您的设备修改。 3)node_rank代表节点的rank 4)master_addr=localhost表示地址是本地(也可以改为远程设备的ip),端口号是master_port=1234

谢谢您,我是单机多卡训练的,用两张卡训练,CUDA_VISIBLE_DEVICES=1,2,只改了这一个参数,其他的参数没有变,还是报这个错,我怀疑是torch版本问题,因为我点进这个函数,没有device_ids这个参数,我再改回1.8.1试试
image

嗯嗯,torch1.7 torch1.8, torch1.10这几个版本的DDP函数都不一样,这里有坑,您再试试看看。然后train_GGHL_dist.py里面您看看local rank的设置有没有错,我检查一下这个。谢谢。

嗯嗯,torch1.7 torch1.8, torch1.10这几个版本的DDP函数都不一样,这里有坑,您再试试看看。然后train_GGHL_dist.py里面您看看local rank的设置有没有错,我检查一下这个。谢谢。

太感谢你啦,确实是torch版本的问题,改成1.8.1就可以了,之前1.8.0有问题,现在可以啦,还有个问题,就是模型保存的默认路径是在哪里呢,需要在哪修改呢

嗯嗯,torch1.7 torch1.8, torch1.10这几个版本的DDP函数都不一样,这里有坑,您再试试看看。然后train_GGHL_dist.py里面您看看local rank的设置有没有错,我检查一下这个。谢谢。

太感谢你啦,确实是torch版本的问题,改成1.8.1就可以了,之前1.8.0有问题,现在可以啦,还有个问题,就是模型保存的默认路径是在哪里呢,需要在哪修改呢

祝贺💖💖💖~~模型默认的保存路径是当前项目路径下的./weight文件夹,保存的代码是比如这里
image
self.weight_path就是传入的参数,也就是文件夹路径,这个在train_GGHL.py和train_GGHL_dist.py的parser.add_argument里面修改和设置,默认是和预训练在一个路径下,比如这样
image
也可以根据需要修改,或者和预训练改成不一样的(多传入一个参数就行),试试看吧。

好的,谢谢啦,后面有问题再和您请教

好的,谢谢啦,后面有问题再和您请教

OK~~互相交流学习😄