yolov4

1.网络结构图

在这里插入图片描述

2.FPN 特征金字塔

https://mp.weixin.qq.com/s?__biz=MzA4MjY4NTk0NQ==&mid=2247485130&idx=2&sn=c69c07b5f8c268be52145b030a96b605&scene=21#wechat_redirect

多层次特征融合

3.PAN

PAN 是FPN 升级版 ,红色的线表示通过FPN获取的特征 ,绿色的线只通过几层就可以获取浅层信息,确保浅层信息的完整
在这里插入图片描述

https://mp.weixin.qq.com/s?__biz=MzA4MjY4NTk0NQ==&mid=2247485145&idx=2&sn=dbd970411f3ec2da25bf432af8400a74&chksm=9f80bc4fa8f7355924af4aec888671a31a499684aa5e4e86b4c502b7f28f2521040d7507b980&scene=21#wechat_redirect

4.SPP

SPP(空间金字塔池化)的思想来扩大感受野

class SPP(nn.Module):
    # Spatial pyramid pooling layer used in YOLOv3-SPP
    def __init__(self, c1, c2, k=(5, 9, 13)):
        super(SPP, self).__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1)
        self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])

    def forward(self, x):
        x = self.cv1(x)
        return self.cv2(torch.cat([x] + [m(x) for m in self.m], 1))

代码就是数据通道扩展4倍,把原始的x 、x 使用kernel_size=5下采样、x 使用kernel_size=9下采样、x 使用kernel_size=14下采样.把这些数据结合一起。

5.SAM

Attention机制中的CBAM, CBAM含有空间注意力机制和通道注意力机制,

SAM就是其中的空间注意力机制.
在这里插入图片描述在这里插入图片描述

class ChannelAttention(nn.Module):
    def __init__(self, in_planes, ratio=16):
        super(ChannelAttention, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.max_pool = nn.AdaptiveMaxPool2d(1)
        
        self.fc1 = nn.Conv2d(in_planes, in_planes//16, 1, bias=False)
        self.relu1 = nn.ReLU()
        self.fc2 = nn.Conv2d(in_planes//16, in_planes, 1, bias=False)
        self.sigmoid = nn.Sigmoid()
    def forward(self,x):
        avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x))))
        max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x))))
        out = avg_out + max_out
        return self.sigmoid(out)

求特征图whc中每个 wh的均值和最大值,相当于获取每个wh的权重,这样计算每个通道的权重,然后再和原始数据相乘,就是增加了注意力

class SpatialAttention(nn.Module):
    def __init__(self, kernel_size=7):
        super(SpatialAttention,self).__init__()
        self.conv1 = nn.Conv2d(2,1,kernel_size,padding=padding,bias=False)#concat完channel维度为2
        self.sigmoid = nn.Sigmoid()
    def forward(self,x):
        avg_out = torch.mean(x, dim=1, keepdim=True)# 沿着channel 维度计算均值和最大值
        max_out, _ = torch.max(x, dim=1, keepdim=True)
        x = torch.cat([avg_out, max_out], dim=1)#沿着channel维度concat一块
        x = self.conv1(x)
        return self.sigmoid(x)

求特征图whc中每个1*c个点的均值和最大值,相当于获取每个点的权重,这样计算每个点的权重,然后再和原始数据相乘,就是增加了注意力

6.CmBN

https://zhuanlan.zhihu.com/p/115949091
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值