模型"炼丹"过程
步骤 1:数据集结构
(1)部署好YOLO11/13的运行环境,把数据集配置成以下结构
datasets
|
-----images
|
----labels
|
data.yaml
train.txt
val.txt
test.txt
data.yaml 需放在 datasets/ 根目录,内容示例:
train: .../train.txt # 相对路径(相对于data.yaml)
python
val: ../val.txt
test: ../test.txt
nc: 3 # 类别数
names: ["WBC", "RBC", "Platelets"]
train.txt/val.txt/test.txt 中每行是 images/xxx.jpg 的绝对路径或相对于项目根目录的相对路径。
步骤 2:自定义模块的存放位置
YOLO 的基础模块统一放在 nn/modules/ 下
步骤 3:模块注册
在 nn/tasks.py 的 parse_model 函数中注册
(1)在 tasks.py 顶部导入你的模块:
from ultralytics.nn.modules.MyAttention import MyAttention # 对应步骤2的存放路径
(2)在 parse_model 函数的 m in (...) 列表中添加你的模块:
if m in (..., MyAttention): # 把MyAttention加入现有模块列表
步骤 4:yaml 配置文件
在 ultralytics/cfg/models/v11/ 下新建 yolov11-MyAttention.yaml,示例(在检测头中添加你的模块):
python
# YOLOv11 + MyAttention 配置
nc: 80
scales:
n: [0.33, 0.25, 1024]
# ...(保留原scale配置)
backbone:
# ...(保留原backbone配置)
head:
# ...(保留原head前序配置)
- [-1, 3, C2f, [512]] # P4层特征
- [-1, 1, MyAttention, [512]] # 插入你的模块(输入通道512)
# ...(保留原head后续配置)
- [[16, 19, 22], 1, Detect, [nc]]
关键注意事项
(1)模块输入 / 输出通道匹配
你的模块在 yaml 中插入的位置,需保证输入通道与前一层输出通道一致(如上述示例中前一层是 C2f 输出 512,你的模块输入也需是 512)。
(2) 模块初始化参数:
你的模块 init 函数需支持接收通道数等参数(如 def init(self, c1, c2=None):),与 YOLO 模块的参数规范对齐。
(3)验证模块加载:
运行 model = YOLO("yolov11-MyAttention.yaml") 并打印 model.info(),确认你的模块出现在网络结构中,无报错。