YOLOv5添加注意力机制SE后,训练时显示的网络结构并没有SE这一层
按照网络上的教程:1 将SE的代码放入common.py
2 修改yolo.py中的parsel_model函数,添加SE类名
3 修改yolov5m.yaml和yolov5s.yaml文件中的一些数据(我用的是yolov5m.pt)
4 运行yolo.py就可以显示出SE层
运行出来确实能显出SE层
我以为是yolo.py中的参数"Yolov5s.yaml"没修改,因为我用的是Yolov5m.pt,之后修改为yolovm.yaml:
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--cfg', type=str, default='yolov5s.yaml', help='model.yaml')
parser.add_argument('--batch-size', type=int, default=1, help='total batch size for all GPUs')
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--profile', action='store_true', help='profile model speed')
parser.add_argument('--line-profile', action='store_true', help='profile model speed layer by layer')
parser.add_argument('--test', action='store_true', help='test all yolo*.yaml')
opt = parser.parse_args()
opt.cfg = check_yaml(opt.cfg) # check YAML
print_args(vars(opt))
device = select_device(opt.device)
还是不行,训练的时候依然不会显示出SE层
我想问一下,添加SE层成功,运行train.py训练的时候不会显示SE吗?
还是说我并没有添加成功(尽管运行yolo.py显示了SE层)
在 YOLOv5 中添加注意力机制 SE 后,如果在训练时 SE 层没有显示,可能是因为在训练时 SE 层并没有真正被调用。
在训练时,SE 层会被调用的条件是:
在代码中应该有一个对应的函数调用,这个函数会接收输入并返回输出。
调用的参数应当正确,包括输入维度、输出维度以及其他参数。
如果这些条件都满足,那么在训练时就应该能看到 SE 层的输出。
为了解决这个问题,我们需要检查上述条件是否都满足,并检查代码中是否有任何问题。可以尝试把 SE 层的函数单独提出来测试,或者查看报错信息,以便了解具体的错误原因。
此外,还可以尝试使用已经训练好的模型进行测试,看看是否能看到 SE 层的输出。如果能看到,那么可能是训练过程中出了问题,如果不能看到,可能是模型本身的问题。
提供参考实例【YOLOv3 pytorch版本 训练自己的数据集+加se/cbam注意力】,链接:https://blog.csdn.net/qq_39346945/article/details/125374021