bubbliiiing / yolov4-tiny-pytorch

这是一个YoloV4-tiny-pytorch的源码,可以用于训练自己的模型。
MIT License
787 stars 184 forks source link

在加入注意力机制后,训练出现问题 #71

Open Rywaii99 opened 2 years ago

Rywaii99 commented 2 years ago

泡泡哥您好,我在改变phi的值并选择SE模块后,把预训练模型改成对应的yolov4_tiny_weights_voc_SE.pth,但是在训练时报了如下错误: Traceback (most recent call last): File "D:/Code/train.py", line 162, in pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)} File "D:/Code/train.py", line 162, in pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)} KeyError: 'feat1_att.fc.0.weight'

请问为什么使用添加了注意力机制的预训练模型会出现找不到权重的问题呀?我最开始训练添加注意力机制的网络时都是用的yolov4_tiny_weights_voc.pth,那个时候并没有报错。

bubbliiiing commented 2 years ago

phi你等于多少啊,什么时候的代码

Rywaii99 commented 2 years ago

phi不为0的情况下都试了,分别使用对应的SE、CBAM和ECA的初始权重都会在初始化这报错。 使用的是您这次大更新之前的代码。

Rywaii99 commented 2 years ago

我这次使用了yolov4_tiny_weights_voc.pth在phi=1时进行训练,然后根目录下get_map.py调用的yolo.py中的phi我也改成1了,但是在使用训练完的权重调用get_map.py测试时,依旧在权重赋值这里发生了错误,感觉注意力机制这几层的权重没有保存,或者对应的key不对。报错如下: RuntimeError: Error(s) in loading state_dict for YoloBody: Missing key(s) in state_dict: "feat1_att.fc.0.weight", "feat1_att.fc.2.weight", "feat2_att.fc.0.weight", "feat2_att.fc.2.weight", "upsample_att.fc.0.weight", "upsample_att.fc.2.weight".

bubbliiiing commented 2 years ago

model path呢,或者你改了没保存?

Rywaii99 commented 2 years ago

model path都改了,训练时保存还是按照一个epoch保存一次的策略,但是就是无法在phi不为0时加载带有注意力机制的权重,不论是我设定phi不为0训练后得到的权重还是百度网盘里提供的带有注意力机制的权重。加载时都是显示找不到对应层权重的key...

bubbliiiing commented 2 years ago

…我看了一遍。确实train.py和yolo.py的phi都没有问题,你截个图

Ice-wave commented 2 years ago

确实加了attention以后权值的key找不到