写在前面
我真是服了这个网页的专栏精选,啥汤姆的都要米,看一个要米,再看一个也要米。我直接自己改,改完我分享一波。
先看运行成功的截图:
改动的文件
都可以去我的github上找到源文件。放一下地址GitHub - cfk4563/ultralytics: NEW - YOLOv8
改动的地方在one-band分支。
去我的github复制一下文件,但是要注意的是,我使用的是yolov8n.yaml文件。mobilenetv4里面的配置需要根据你选择模型的大小修改。然后我使用的是单通道的数据集,输入通道为1,如果是正常的RGB图像需要把mobilenetv4.py第13行的1改为3。
改动细节
看上面的图就知道,改动文件细节,git给标蓝了。
找到__init__文件(文件位置以标蓝),把下面这语句写进去。
from .mobilenetv4 import MobileNetV4ConvSmall
然后在代码最后去注册一下
然后去task.py找到这个导包的语句(实际不为空),在后面加上MobileNetV4ConvSmall。
from ultralytics.nn.modules import ()
然后找到parse_model这个模块,大概在900行,在这个模块中添加代码
注意看git改动的标记,代码放在下面
elif m in {MobileNetV4ConvSmall, }:
c2 = args[1]
c1 = args[2]
else:
c2 = ch[f]
if m in {MobileNetV4ConvSmall, }:
m_ = m(args[2]) # module
t = "ultralytics.nn.modules.mobilenetv4"
else:
m_ = nn.Sequential(*(m(*args) for _ in range(n))) if n > 1 else m(*args) # module
t = str(m)[8:-2].replace("__main__.", "") # module type
搞完之后,改一下yaml文件,代码放在下面
backbone:
# [from, repeats, module, args]
- [-1, 1, MobileNetV4ConvSmall, [1, 32, 0]] # 0-P1/2
- [-1, 1, MobileNetV4ConvSmall, [32, 32, 1]]
- [-1, 1, MobileNetV4ConvSmall, [32, 64, 2]]
- [-1, 1, MobileNetV4ConvSmall, [64, 128, 3]]
- [-1, 1, MobileNetV4ConvSmall, [128, 128, 4]]
- [-1, 1, MobileNetV4ConvSmall, [128, 256, 5]]
- [-1, 1, SPPF, [1024, 5]] # 6
# YOLOv8.0n head
head:
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 3], 1, Concat, [1]] # cat backbone P4
- [-1, 3, C2f, [512]] # 12
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
- [[-1, 2], 1, Concat, [1]] # cat backbone P3
- [-1, 3, C2f, [256]] # 12 (P3/8-small)
- [-1, 1, Conv, [256, 3, 2]]
- [[-1, 9], 1, Concat, [1]] # cat head P4
- [-1, 3, C2f, [512]] # 15 (P4/16-medium)
- [-1, 1, Conv, [512, 3, 2]]
- [[-1, 5], 1, Concat, [1]] # cat head P5
- [-1, 3, C2f, [1024]] # 18 (P5/32-large)
- [[12, 15, 18], 1, Detect, [nc]] # Detect(P3, P4, P5)
我解释一下MobileNetV4ConvSmall后面接的参数含义。后面接了列表里面三个参数:分别是,输入通道,输出通道,运行MobileNetV4第几层(这个我在原文基础上改动过,就只有MobileNetV4这一块可以这样解释。其他模块不具有参照意义)。还是一样,如果数据集是RGB影像,输入通道改成3。
改完应该可以训练了。这个我还不知道效果怎么样,自己看着来。我的数据集是单通道输入。不能直接拿来用,需要自己改两个数字,只能用yolov8n.yaml,其他大小就还需要改。有问题可以交流。