【论文】YOLOv2

这里只简要介绍一下YOLOv2,谈谈想法。

关于YOLOv2,下面的这篇介绍的已经很详尽了:

https://www.jianshu.com/p/032b1eecb335

首先罗列一些它做了什么:

 从上往下数:

1.BN,在所有的卷积层后面添加BN层,移除dropout

2.high resolution classifier,在高分辨图像上对分类网络finetune

3.convolutional、anchor boxes和dimension priors:

使用anchor box,所以输出的和faster rcnn或者是和SSD一样,对于每一个anchor都有一组输出。通过使用average pooling可以实现全卷积网络,最后的anchor box输出用卷积来实现,在20个类别上,最后的输出有125层,是5(Anchor数量)*25(5(b-box)+20(类别))。最后附加一个NMS。但因为效果不好,文中使用了k-means对GT-box聚类,得到了几个中心的大小,然后最终选取了5个Anchor,这个就是dimension priors。

4.location prediction

对于Anchor,还做了一点修正,采用的是YOLOv1中的方法,也就是划分grid,b-box中心在grid里头这么一个限制,而不是一般的无约束Anchor方法,同时,也对需要预测的值进行了一些变换,如下:

其中,cx,cy指的是anchor的中心,pw,ph是anchor的宽高,预测的值是tx,ty这些带t的,等式左边是从预测值得到的反映在图像上的b-box形状和位置。

5.pass through,指的就是其中的一个跨层连接

6.multi-scale,由于是全卷积,所以使用了和SPP-Net中一样的多尺度训练。

7.hi-res dector和new-network,指的是去除掉分类网络的最后一层,添加上1024的3*3卷积,最后使用1*1卷积得到指定的输出。

另外还有:

8.层次结构的分类器,也就是有大类(狗)和小类(哈士奇)标签,利用了ImageNet的结构,方法还是统一输出,但是对于每一个阶段都有一个预测,如下图演示:

然后我们先找到对于大类中最大的概率,再在其子类中递归寻找,最终得到预测结果。由于是同一输出,网络的结构也不用改变

9.joint classification and detection。说的就是如果是单纯的分类任务,我们就只计算分类的损失,而定位部分只用来给出IOU的预测。

损失函数以及训练方法:

损失函数的设计与之前相似,但是训练方法与YOLOv1不一样。由于是采用了Anchor的方法,训练方法采用了SSD的方式,这一点在文中竟然没有说,看了上面的那篇博文才知道。

总结:

感觉没有特别大的亮点吧,总体结构上差不多,使用了很多种技巧,每一种技巧都有改善,这一点是很不错的。

### 关于YOLOv8 C2f模块改进的研究 #### 结合EMA机制的C2f模块优化 一种创新的方法是将YOLOv8中的C2f模块与指数移动平均(EMA)注意力机制相结合,形成名为C2f_EMA的新模块[^1]。这种组合不仅增强了模型的学习能力,还提高了对复杂场景下目标检测的准确性。 ```python class C2f_EMA(nn.Module): def __init__(self, channels_in, channels_out, kernel_size=3, stride=1, padding=1): super(C2f_EMA, self).__init__() self.conv = nn.Conv2d(channels_in, channels_out, kernel_size, stride, padding) self.ema = ExponentialMovingAverage() def forward(self, x): out = F.relu(self.conv(x)) out = self.ema(out) return out ``` #### Context Guided增强的C2f模块 另一种有效的改进方案是在YOLOv8框架中引入Context Guided Network (CGNet),通过加强上下文信息提取来提升分割效果[^2]。此方法特别适用于需要高精度识别的任务环境。 ```python def add_C2f_ContextGuided(model): # 假设model是一个已经定义好的YOLOv8实例 model.backbone.add_module('context_guided', CGBlock()) class CGBlock(nn.Module): def __init__(self): super(CGBlock, self).__init__() # 实现具体的上下文引导逻辑 def forward(self, x): # 处理输入特征图并返回增强后的输出 pass ``` #### Shift-Wise Convolution应用于C2f 为了进一步探索卷积操作的空间变换特性,有研究提出了基于位移策略的卷积层(shift-wise conv)[^3]。这种方法能够有效减少计算量的同时保持甚至超越原有性能水平,在资源受限环境中尤为适用。 ```python import torch.nn.functional as F class ShiftWiseConv(nn.Module): def __init__(self, in_channels, out_channels, shift_ratio=0.5): super().__init__() self.shift_ratio = shift_ratio self.conv = nn.Conv2d(in_channels, out_channels, 3) def forward(self, x): shifted_x = spatial_shift(x, ratio=self.shift_ratio) output = self.conv(F.pad(shifted_x, pad=(1, 1, 1, 1))) return output def spatial_shift(tensor, ratio): b, c, h, w = tensor.size() num_pixels_to_move = int(h * w * ratio) moved_tensor = roll(tensor.view(b*c, -1), shifts=num_pixels_to_move).view_as(tensor) return moved_tensor ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值