1. 先定义残差18模块的网络
class Resnet18(nn.Module):
def __init__(self):
super().__init__()
model = models.resnet18(pretrained=True)
self.layer=nn.Sequential(
model.conv1,
model.bn1,
model.relu,
model.maxpool,
model.layer1,
model.layer2,
model.layer3,
model.layer4,
model.avgpool
)
def forward(self, x):
x=self.layer(x)
return x
添加到conv.py末尾
注册模块
2.task.py更改
3.更改Yaml文件
# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8-cls image classification model. For Usage examples see https://docs.ultralytics.com/tasks/classify
# Parameters
nc: 1000 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
# [depth, width, max_channels]
n: [0.33, 0.25, 1024]
s: [0.33, 0.50, 1024]
m: [0.67, 0.75, 1024]
l: [1.00, 1.00, 1024]
x: [1.00, 1.25, 1024]
# YOLOv8.0n backbone
backbone:
# [from, repeats, module, args]
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
- [-1, 3, C2f, [128, True]]
- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
- [-1, 6, C2f, [256, True]]
- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
- [-1, 6, C2f, [512, True]]
- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
- [-1, 3, C2f, [1024, True]]
# YOLOv8.0n head
head:
- [-1, 1, Classify, [nc]] # Classify
4.最后训练测试一下
from ultralytics import YOLO def main(): # 不加这句有时候就会报错 model = YOLO(r"yolov8-cls-resnet18.yaml").load('yolov8n-cls.pt') model.train(data=R'E:\python_code\ultralytics-8.2.74\datasets\DIP', imgsz=128,epochs=10) if __name__ == '__main__': # 不加这句就会报错 main() # 不加这句有时候就会报错