目录
- 前言:
- 一、YOLO11的优势
- 二、YOLO11网络结构图
- 三、C3k2作用分析
- 四、总结
前言:
对于一个科研人来说,发表论文水平的高低和你所掌握的信息差有着极大的关系,所以趁着YOLO11刚刚发布,趁热了解,先人一步对我们来说是十分有利的那么接下来就让我们一起了解一下YOLO11
一、YOLO11的优势
它建立在以前 YOLO 版本的成功基础上,并引入了新功能和改进,以进一步提高性能和灵活性。YOLO11 旨在快速、准确且易于使用,使其成为各种对象检测和跟踪、实例分割、图像分类和姿态估计任务的绝佳选择。
二、YOLO11网络结构图
下面是YOLO11的网络结构图,细心的可以发现,相比于YOLOv8,只是将C2f注意力模块换成了C3k2随后在SPPF层后添加了YOLOv10的C2PSA模块,同样的相比于YOLOv10只是将C2f模块替换成了C3k2模块,所以不需要感到陌生
三、C3k2作用分析
经过上述结构图的主要改进分析可以知道其实YOLO11最核心的改进点就是这个新建立的C3k2注意力机制了,那么我们大体分析一下,这个模块到底能起到什么作用,C3k2的代码如下所示:
class C3k2(C2f):
"""Faster Implementation of CSP Bottleneck with 2 convolutions."""
def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):
"""Initializes the C3k2 module, a faster CSP Bottleneck with 2 convolutions and optional C3k blocks."""
super().__init__(c1, c2, n, shortcut, g, e)
self.m = nn.ModuleList(
C3k(self.c, self.c, 2, shortcut, g) if c3k else Bottleneck(self.c, self.c, shortcut, g) for _ in range(n)
)
由上面代码可以看出C3k2这个模块主要继承自 C2f,并且包含了两种不同的结构:C3k 和 Bottleneck。这个模块的主要特点是在标准的 CSP Bottleneck(Cross Stage Partial Bottleneck)上进行了优化,目标是提高计算效率和推理速度。
创新型分析
-
C3k2 引入了一个可选参数 c3k,可以在 C3k 和 Bottleneck 之间切换。他通过增加两次卷积操作,可能会对局部特征的提取进行加强,尤其是在复杂场景下提高特征的分辨率和表达能力,同时保持模块的计算效率。如果 c3k 为 False,则选择标准的 Bottleneck,这种灵活性允许在不同任务需求下使用不同的计算结构。
-
控制参数:n 和 g
n: 表示网络中使用多少个 C3k 或 Bottleneck 模块。可以根据模型需求灵活调整模块深度,从而平衡计算量和性能。
g: 分组卷积的参数,控制模型中的通道分组,进一步减少计算量和参数量。这与常见的深度可分离卷积类似,能够有效降低复杂度。
通过 e 参数控制扩展比率 -
e: 控制特征图在模块中的通道扩展比率,通常用于调整网络的瓶颈层宽度。适当的扩展可以帮助网络学习到更丰富的特征,而不会引入过多计算开销。
-
C3k 的引入相对于标准 Bottleneck 可能在保持模型准确度的同时进一步提高计算速度,特别是在使用更多分组卷积的情况下。这种优化适合在资源受限的环境(如移动设备或嵌入式设备)中使用。
四、总结
尽管YOLO的迭代来势汹汹但是每一代都是有迹可循,分析完了上述的网络结构以及主要创新点,接下来就开始尝试如何使用YOLO11来训练自己的数据集吧