1.CBAM介绍
CBAM注意力机制是yolov8自带的注意力机制,它是通道注意模块和空间注意模块的结合。
2.查看CBAM在yolov8中的位置
路径:ultralytics/nn/modules/conv.py
3.添加CBAM
1.首先打开tasks.py文件:ultralytics/nn/modules/tasks.py
2.在导入里面添加CBAM
3.在tasks.py文件里面添加代码
复制以下代码添加到tasks.py的指定位置
elif m is CBAM:
c1,c2 = ch[f], args[0]
if c2 != nc:
c2 = make_divisible(min(c2,max_channels) * width, 8)
args = [c1,*args[1:]]
4.修改配置文件
1.首先找到yolov8.yaml文件的位置
ultralytics/cfg/models/v8/yolov8.yaml
2.然后复制yolov8.yaml到同级文件夹,并取名叫yolov8-cbam.yaml
然后在网络结构里面添加CBAM模块
5.测试修改之后的模型前向传播是否成功
1.找到test/test_python.py文件
复制下面这段代码
2.在根目录下新建一个py文件,取名叫cbam-test
然后将上面复制的代码粘贴进去,再删除不必要的部分,将CFG的值设置为刚刚修改过模型的yaml文件路径
# Ultralytics YOLO 🚀, AGPL-3.0 license
import contextlib
from copy import copy
from pathlib import Path
import cv2
import numpy as np
import pytest
import torch
from PIL import Image
from torchvision.transforms import ToTensor
from ultralytics import RTDETR, YOLO
from ultralytics.utils import ASSETS, DEFAULT_CFG, LINUX, MACOS, ONLINE, ROOT, SETTINGS, WINDOWS
CFG = 'ultralytics/cfg/models/v8/yolov8-cbam.yaml'
SOURCE = ASSETS / 'bus.jpg'
def test_model_forward():
model = YOLO(CFG)
model(SOURCE) # also test no source and augment
3.运行cbam-test.py文件,看前向传播是否通过
这就是修改通过的提示。
如果添加失败,最后面有报错原因
6.遇到的报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x98 in position 1158: illegal multibyte sequence
1.报错原因:
这应该是windows10特有的问题,因为win10的默认编码方式为utf-8
,而Python读入文本文件的默认编码方式为`gbk`