本专栏会手把手带你从源码了解YOLOv10(后续会陆续介绍YOLOv8、RTDETR等模型),尽可能地完整介绍整个算法,这个专栏会持续创作与更新,大家如果想要本文PDF和思维导图,后台私信我即可(创作不易,不喜勿喷),大家如果发现任何错误和需要修改的地方都可以私信我,我会统一修改。
YOLOv10DetectionModel继承自DetectionModel(ultralytics/nn/task.py第644行),在继续调用ultralytics/nn/task.py的第285行__init__函数,初始化模型信息,第295行根据yaml配置文件构建模型
首先看下YOLOv10s模型配置文件(ultralytics/cfg/models/v10/yolov10s.yaml):yolov10s模型配置(每行分别表示之前的层-1为上一层、模块数量(需要*尺度[0])、模块、模块的参数)
在ultralytics/nn/tasks.py的parse_model函数解析yaml到pytorch模型,yolov10的模块数量尺度因子为0.33,通道数深度尺度因子为0.5,最大通道数为1024
如下每层解析yaml配置文件,以第一层为例(m:conv;f:-1;n:1;args:[64, 3, 2])
在缩放通道宽度,添加模块个数(args:[3, 32, 3, 2])
最后m_:保存每个模块的信息;layers:列表保存所有模块的信息;save:保存模块先前层不为-1的
最后打印每一层的参数信息(下列这些模块都类似的过程:Classify, Conv, ConvTranspose, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, Focus, BottleneckCSP, C1, C2, C2f, RepNCSPELAN4, ADown, SPPELAN, C2fAttn, C3, C3TR, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x, RepC3, PSA, SCDown, C2fCIB)
对于nn.Upsample,只需上一层特征层通道数即可(对应于第933行)
对于Concat层:[[-1, 6], 1, Concat, [1]] ch列表:[32, 64, 64, 128, 128, 256, 256, 512, 512, 512, 512, 512]对应于先前模块的输出通道数(Conv、Conv、C2f、Conv、C2f、SCDown、C2f、SCDown、C2fCIB、SPPF、PSA。Upsample) Concat层维度相加:上一层特征以及第六层特征
对于v10Detect:[[16, 19, 22], 1, v10Detect, [nc]](获取检测特征图通道数)
最后打印的YOLOv10s模型的整体结构信息:
在第二幅图构建好模型之后,继续初始化一些信息,打印模型整体参数信息(YOLOv10s summary: 402 layers, 8128272 parameters, 8128256 gradients, 25.1 GFLOP)
之后跳转到ultralytics/models/yolov10/train.py,加载模型权重(调用BaseModel类的load方法(ultralytics/nn/tasks.py))
这部分关于模型构建的整体流程如下图所示,需要原图和思维导图的朋友关注我私信获取。
本文暂时没有评论,来添加一个吧(●'◡'●)