Pytorch 实现DetNet

 如图所示,DetNet引入了一个新的Stage6,用于物体检测。Stage5与Stage6使用了DetNet提出的Bottleneck结构 。最大的特点就是使用了空洞数为2的3x3卷积取代了步长为2的3x3卷积。

Stage5与Stage6的每一个特征图尺寸都为原图的1/16,通道数都为256,而传统的Backbone通常是特征图尺寸递减,通道数递增。

在组成金字塔时,特征图大小完全相同,因此可以直接从右向左传递相加,避免了上一节的上采样操作。

 

代码:

from torch import nn
class DetBottleneck(nn.Module):
    #初始化时extra为False时为Bottleneck A,为True时,则为Bottleneck B
    def __init__(self,inplanes,planes,stride=1,extra=False):
        super(DetBottleneck,self).__init__()
        #构建连续3个卷积层的Bottleneck
        self.bottleneck=nn.Sequential(
            nn.Conv2d(inplanes,planes,1,bias=True),
            nn.BatchNorm2d(planes),
            nn.ReLU(inplace=True),
            nn.Conv2d(planes,planes,kernel_size=3,stride=1,padding=2,dilation=2,bias=False),
            nn.BatchNorm2d(planes),
            nn.ReLU(inplace=True),
            nn.BatchNorm2d(planes),
        )
        self.relu=nn.ReLU(inplace=True)
        self.extra=extra
        #Bottleneck B 的1x1卷积
        if self.extra:
            self.extra_conv=nn.Sequential(
                nn.Conv2d(inplanes,planes,1,bias=False),
                nn.BatchNorm2d(planes)
            )
    def forward(self,x):
        #对于Bottleneck B来讲,需要对恒等映射增加卷积处理,与ResNet类似
        if self.extra:
            identity=self.extra_conv(x)
        else:
            identity=x
        out=self.bottleneck(x)
        out+=identity
        out=self.relu(out)
        return out
        

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐亦亦乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值