前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【AI 进阶笔记】 DetNet 知识点学习

【AI 进阶笔记】 DetNet 知识点学习

原创
作者头像
繁依Fanyi
发布于 2025-03-30 13:25:29
发布于 2025-03-30 13:25:29
9100
代码可运行
举报
运行总次数:0
代码可运行

1. DetNet 是啥?

在目标检测领域,主流的方法一般都是基于 CNN(卷积神经网络)的,比如 Faster R-CNN、YOLO、SSD 这些大佬。但这些传统方法有个痛点:网络越深,感受野越大,但特征图越来越小,导致目标检测特别是小目标检测的效果不太行。

DetNet 论文的核心目的,就是解决深层网络导致的分辨率下降问题,让目标检测能在不牺牲高层语义信息的情况下,保留较高的分辨率,从而提升检测效果,特别是小目标的检测能力。

简单来说,DetNet 就是个 更适合目标检测的 CNN 结构,它的主要思路是:

  • 保持特征图的较高分辨率(不让它变得太小)
  • 扩大感受野(让网络能“看”得更远)
  • 增强检测能力(小目标也能发现)

2. DetNet 的核心思想?

DetNet 论文的核心贡献在于设计了一种新型的 Backbone(骨干网络)结构,让检测任务的特征图在深层网络里依然能保持较大尺寸。

传统的 CNN,比如 ResNet,层数越深,特征图缩小得越厉害。比如,一张 512x512 的图片经过 ResNet 的卷积后,到了深层可能只剩下 16x16 的特征图,这对于目标检测尤其是小目标检测是个噩梦!

在这里插入图片描述
在这里插入图片描述

DetNet 通过以下几个设计巧妙地避免了这个问题:

  • 引入扩张卷积(Dilated Convolution) 来扩大感受野,同时保持特征图的分辨率。
  • 去掉 ResNet 里最后的降采样(Stride=2 的池化/卷积),让特征图不变小。
  • 重新设计 Bottleneck 结构,适配检测任务。

简单来说,DetNet 就是 ResNet 的改进版,专门为目标检测优化,让检测头能获取更多有用的信息。


3. DetNet 关键技术解析

在 PyTorch 代码实现之前,我们先搞清楚 DetNet 的几个核心设计点:

3.1 扩张卷积(Dilated Convolution)

DetNet 里最关键的技术之一就是 扩张卷积(又叫空洞卷积),这个东西的作用是 增大感受野,同时不降低分辨率

传统卷积 VS 扩张卷积:

  • 传统卷积:3×3 的卷积核,只能看 3×3 的局部区域。
  • 扩张卷积:3×3 的卷积核,但可以通过 跳跃 采样,比如膨胀系数=2 时,它其实是 5×5 的感受野,但计算量仍然是 3×3 的水平。

这样一来,我们就可以用小小的计算量,获得更大的感受野,而不会让特征图变得太小。

3.2 不降采样(保持高分辨率)

在传统的 ResNet 里,到达 Stage 5(最后几个残差块)时,特征图已经变得很小(1/32 原图尺寸)。而 DetNet 直接干掉了最后的降采样,让特征图保持在 1/16 甚至 1/8 原图尺寸,这样目标检测头就能用到更清晰的特征图。

3.3 重新设计的 Bottleneck 结构

DetNet 里用了一种特殊的 残差块(Bottleneck),这个块里面的 3x3 卷积被替换成了 扩张卷积,这样可以同时 保留特征图的大小,又能获取更大感受野


4. PyTorch 实现 DetNet

理解了 DetNet 的核心思想后,我们来用 PyTorch 实现一个 DetNet 的 Backbone(骨干网络),然后让它跑起来!

4.1 先定义 DetNet 的 Bottleneck 结构

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import torch
import torch.nn as nn

class DetBottleneck(nn.Module):
    def __init__(self, in_channels, out_channels, dilation):
        super(DetBottleneck, self).__init__()
        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False)
        self.bn1 = nn.BatchNorm2d(out_channels)
        
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, 
                               padding=dilation, dilation=dilation, bias=False)
        self.bn2 = nn.BatchNorm2d(out_channels)
        
        self.conv3 = nn.Conv2d(out_channels, out_channels, kernel_size=1, bias=False)
        self.bn3 = nn.BatchNorm2d(out_channels)
        
        self.relu = nn.ReLU(inplace=True)

    def forward(self, x):
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        
        out = self.conv2(out)
        out = self.bn2(out)
        out = self.relu(out)
        
        out = self.conv3(out)
        out = self.bn3(out)
        return self.relu(out)

这个结构就是 DetNet 里用的特制残差块,里面的 conv2 是扩张卷积。

4.2 组装 DetNet Backbone

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
class DetNet(nn.Module):
    def __init__(self, num_classes=20):
        super(DetNet, self).__init__()
        self.layer1 = DetBottleneck(64, 128, dilation=1)
        self.layer2 = DetBottleneck(128, 256, dilation=2)
        self.layer3 = DetBottleneck(256, 512, dilation=4)

        self.classifier = nn.Conv2d(512, num_classes, kernel_size=1)

    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.classifier(x)
        return x

这个 DetNet 类就是一个完整的骨干网络结构,最后接了个 1x1 的卷积层,用于分类。

4.3 试运行

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
model = DetNet(num_classes=20)
x = torch.randn(1, 64, 128, 128)  # 假设输入是一张 128x128 的图片
output = model(x)
print(output.shape)

输出的 shape 应该是 (1, 20, 128, 128),证明 DetNet 确实保留了高分辨率的特征图!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你知道Deeplab那些事儿吗?
DeepLab系列论文一共有四篇,分别对应DeepLab V1,DeepLab V2,DeepLab V3,DeepLab V3+。
灿视学长
2021/05/28
7950
【CV中的Attention机制】BiSeNet中的FFM模块与ARM模块
语义分割需要丰富的空间信息和相关大的感受野,目前很多语义分割方法为了达到实时推理的速度选择牺牲空间分辨率,这可能会导致比较差的模型表现。
BBuf
2020/02/21
2K0
【CV中的Attention机制】BiSeNet中的FFM模块与ARM模块
【卷积神经网络结构专题】ResNet及其变体的结构梳理、有效性分析
【导读】2020年,在各大CV顶会上又出现了许多基于ResNet改进的工作,比如:Res2Net,ResNeSt,IResNet,SCNet等等。为了更好的了解ResNet整个体系脉络的发展,我们特此对ResNet系列重新梳理,并制作了一个ResNet专题,希望能帮助大家对ResNet体系有一个更深的理解。本篇文章我们将主要讲解ResNet、preResNet、ResNext以及它们的代码实现。
深度学习技术前沿公众号博主
2020/08/11
5.7K0
ResNet详解:网络结构解读与PyTorch实现教程
深度残差网络(Deep Residual Networks,简称ResNet)自从2015年首次提出以来,就在深度学习领域产生了深远影响。通过一种创新的“残差学习”机制,ResNet成功地训练了比以往模型更深的神经网络,从而显著提高了多个任务的性能。深度残差网络通过引入残差学习和特殊的网络结构,解决了传统深度神经网络中的梯度消失问题,并实现了高效、可扩展的深层模型。
TechLead
2023/10/21
5.6K0
ResNet详解:网络结构解读与PyTorch实现教程
CenterNet的骨干网络之DLASeg
CenterNet中使用的DLASeg是在DLA-34的基础上添加了Deformable Convolution后的分割网络。
BBuf
2020/08/10
7.1K0
PyTorch建立resnet34和resnet101代码[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
7400
ResNet+FPN实现+白嫖代码「建议收藏」
===========================================================
全栈程序员站长
2022/08/20
1.2K0
ResNet+FPN实现+白嫖代码「建议收藏」
涨分利器!攻克目标检测难点秘籍之多尺度检测
在前面的秘籍一:模型加速之轻量化网络和秘籍二:非极大抑制算法和回归损失优化之路中,我们主要关注了轻量化网络,非极大值抑制算法、回归损失优化。但是要想获得较好的检测性能,检测算法的多尺度检测也极为重要。
BBuf
2020/02/21
1.3K0
涨分利器!攻克目标检测难点秘籍之多尺度检测
解释 ResNet 网络的基本思想和创新点。
ResNet(残差网络)是由微软研究院的 Kaiming He 等人在 2015 年提出的,旨在解决深度神经网络中的梯度消失和梯度爆炸问题,从而使得网络可以更深层次地进行训练。ResNet 在 ImageNet 挑战赛中取得了显著的成绩,并迅速成为计算机视觉领域的标准架构之一。
代码小李
2025/01/23
1260
明月深度学习实践004:ResNet网络结构学习
ResNet可谓大名鼎鼎了,一直遵循拿来主义,没有好好去学习它,当然,作为一个提出来快五年的网络结构,已经有太多人写过它了,不好下笔。
明月AI
2021/10/28
1.1K0
明月深度学习实践004:ResNet网络结构学习
​深度神经网络经典模型结构-shufflenet系列
卷积神经网络在计算机视觉任务中表现优异,但由于嵌入式设备内存空间小,能耗要求低,因此需要使用更加高效的模型。例如,与单纯的堆叠卷积层相比GoogLeNet增加了网络的宽度但降低了复杂度,SqueezeNet在保持精度的同时大大减少参数和计算量,ResNet利用高效的bottleneck结构实现惊人的效果,Xception中提出深度可分卷积概括了Inception序列,MobileNet利用深度可分卷积构建的轻量级模型获得了不错的效果,Senet(取得了 ImageNet 2017 的冠军)引入了一个架构单元对 Channel 之间的信息进行显式建模,它以很小的计算成本提高了性能。而ShuffleNet主要使用了pointwise group convolution(分组的1×1卷积核)代替密集的1×1卷积来减小计算复杂度(因为作者发现,对于resnext中的每个residual unit,1×1卷积(逐点卷积)占据93.4%的运算)。同时为了消除pointwise group convolution带来的副作用,提出了一个新的channel shuffle操作来使得信息能够在特征通道上进行交叉流动,因此shuffleNet在保持原有准确率的条件下大大降低计算量。
小草AI
2019/11/01
1.9K0
​深度神经网络经典模型结构-shufflenet系列
打通多个视觉任务的全能Backbone:HRNet
在人体姿态识别这类的任务中,需要生成一个高分辨率的heatmap来进行关键点检测。这就与一般的网络结构比如VGGNet的要求不同,因为VGGNet最终得到的feature map分辨率很低,损失了空间结构。
BBuf
2020/04/23
1.4K0
打通多个视觉任务的全能Backbone:HRNet
​​​​【动手学深度学习】残差网络(ResNet)的研究详情
启动jupyter notebook,使用新增的pytorch环境新建ipynb文件,为了检查环境配置是否合理,输入import torch以及torch.cuda.is_available() ,若返回TRUE则说明研究环境配置正确,若返回False但可以正确导入torch则说明pytorch配置成功,但研究运行是在CPU进行的,结果如下:
SarPro
2024/06/14
2620
​​​​【动手学深度学习】残差网络(ResNet)的研究详情
InsightFace力作:RetinaFace单阶段人脸检测器
RetinaFace是2019年5月来自InsightFace的又一力作,它是一个鲁棒性较强的人脸检测器。它在目标检测这一块的变动其实并不大,主要贡献是新增了一个人脸关键点回归分支(5个人脸关键点)和一个自监督学习分支(主要是和3D有关),加入的任务可以用下图来表示:
BBuf
2020/06/05
2.4K0
FPN(特征图金字塔网络)理论基础与具体实现
论文地址:Feature Pyramid Networks for Object Detection
全栈程序员站长
2022/09/06
1.1K0
FPN(特征图金字塔网络)理论基础与具体实现
PyTorch中的模型创建
可以用 torchsummary 查看网络结构,如果没有的话,使用pip命令进行安装
@小森
2024/05/27
720
PyTorch中的模型创建
pytorch笔记:04)resnet网络&解决输入图像大小问题「建议收藏」
因为torchvision对resnet18-resnet152进行了封装实现,因而想跟踪下源码
全栈程序员站长
2022/09/01
4.8K0
pytorch笔记:04)resnet网络&解决输入图像大小问题「建议收藏」
如何提升小目标的检测效果
小目标检测在人脸检测领域还是目标检测领域都是难题,如何解决小目标问题成为研究者研究的热点。思路只要分为两方面:多尺度特征和超分
狼啸风云
2020/12/28
1.7K0
如何提升小目标的检测效果
项目实战 DeepLabV1,V2,V3 Google三大语义分割算法源码解析
算法和工程是算法工程师不可缺少的两种能力,之前我介绍了DeepLab V1,V2, V3,但总是感觉少了点什么?只有Paper,没有源码那不相当于是纸上谈兵了,所以今天尝试结合论文的源码来进行仔细的分析这三个算法。等我们分析清楚这三个算法之后,有机会再解析一下DeepLabV3。由于最近正在看Pytorch版本的《动手学深度学习》,不妨用Pytorch的源码来进行分析。我分析的源码均来自这个Pytorch工程:https://github.com/kazuto1011/deeplab-pytorch/tree/master/libs/models
BBuf
2019/12/09
2.1K0
项目实战 DeepLabV1,V2,V3 Google三大语义分割算法源码解析
rock数据集ResNet34实现「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
4890
rock数据集ResNet34实现「建议收藏」
推荐阅读
相关推荐
你知道Deeplab那些事儿吗?
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文