Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【AI 进阶笔记】 DetNet 知识点学习

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

原创
作者头像
繁依Fanyi
发布于 2025-03-30 13:25:29
发布于 2025-03-30 13:25:29
13100
代码可运行
举报
运行总次数: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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从梯度消失到百层网络:ResNet 是如何改变深度学习成为经典的?
自AlexNet赢得2012年ImageNet竞赛以来,每个新的获胜架构通常都会增加更多层数以降低错误率。一段时间内,增加层数确实有效,但随着网络深度的增加,深度学习中一个常见的问题——梯度消失或梯度爆炸开始出现。
CoovallyAIHub
2025/04/25
1050
空洞卷积(Dilated Convolution)网络架构与PAMAP2数据集实验分析
空洞卷积(Dilated Convolution) 是一种改进的卷积操作,通过在卷积核中引入“空洞”来扩大感受野。想象你通过一个3x3的窗口看图片,空洞卷积允许窗口跳过某些像素,比如跳过1个像素,实际覆盖5x5的区域,但参数量不变。
是Dream呀
2025/04/22
940
空洞卷积(Dilated Convolution)网络架构与PAMAP2数据集实验分析
​深度神经网络经典模型结构-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
2K0
​深度神经网络经典模型结构-shufflenet系列
​​​​【动手学深度学习】残差网络(ResNet)的研究详情
启动jupyter notebook,使用新增的pytorch环境新建ipynb文件,为了检查环境配置是否合理,输入import torch以及torch.cuda.is_available() ,若返回TRUE则说明研究环境配置正确,若返回False但可以正确导入torch则说明pytorch配置成功,但研究运行是在CPU进行的,结果如下:
SarPro
2024/06/14
2830
​​​​【动手学深度学习】残差网络(ResNet)的研究详情
基于Pytorch构建DenseNet网络对cifar-10进行分类
DenseNet是指Densely connected convolutional networks(密集卷积网络)。它的优点主要包括有效缓解梯度消失、特征传递更加有效、计算量更小、参数量更小、性能比ResNet更好。它的缺点主要是较大的内存占用。
python与大数据分析
2023/09/03
4820
基于Pytorch构建DenseNet网络对cifar-10进行分类
打通多个视觉任务的全能Backbone:HRNet
在人体姿态识别这类的任务中,需要生成一个高分辨率的heatmap来进行关键点检测。这就与一般的网络结构比如VGGNet的要求不同,因为VGGNet最终得到的feature map分辨率很低,损失了空间结构。
BBuf
2020/04/23
1.4K0
打通多个视觉任务的全能Backbone:HRNet
ResNet+FPN实现+白嫖代码「建议收藏」
===========================================================
全栈程序员站长
2022/08/20
1.2K0
ResNet+FPN实现+白嫖代码「建议收藏」
PyTorch建立resnet34和resnet101代码[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
7480
PyTorch实现的ResNet50、ResNet101和ResNet152
PyTorch实现的ResNet50、ResNet101和ResNet152 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks
全栈程序员站长
2022/11/10
9130
PyTorch实现的ResNet50、ResNet101和ResNet152
FPN(特征图金字塔网络)理论基础与具体实现
论文地址:Feature Pyramid Networks for Object Detection
全栈程序员站长
2022/09/06
1.1K0
FPN(特征图金字塔网络)理论基础与具体实现
如何提升小目标的检测效果
小目标检测在人脸检测领域还是目标检测领域都是难题,如何解决小目标问题成为研究者研究的热点。思路只要分为两方面:多尺度特征和超分
狼啸风云
2020/12/28
1.8K0
如何提升小目标的检测效果
从零开始搭建图像去雾神经网络
基于集成学习的双分支非均质去雾网络由两个子网络组成,即迁移学习子网和数据拟合子网。每个子网有着特定的目的:迁移学习子网利用预先训练的权重从输入图像中提取鲁棒全局表示;数据拟合子网对当前数据进行处理。融合层采用这两个子网络的级联特征图,并输出无雾图像。
Srlua
2024/12/08
1400
从零开始搭建图像去雾神经网络
【CV中的Attention机制】BiSeNet中的FFM模块与ARM模块
语义分割需要丰富的空间信息和相关大的感受野,目前很多语义分割方法为了达到实时推理的速度选择牺牲空间分辨率,这可能会导致比较差的模型表现。
BBuf
2020/02/21
2K0
【CV中的Attention机制】BiSeNet中的FFM模块与ARM模块
【AI系统】GhostNet 系列
本文主要会介绍 GhostNet 系列网络,在本文中会给大家带来卷积结构的改进方面的轻量化,以及与注意力(self-attention)模块的进行结合,部署更高效,更适合移动计算的 GhostNetV2。让读者更清楚的区别 V2 与 V1 之间的区别。
用户11307734
2024/12/05
1200
pytorch笔记:04)resnet网络&解决输入图像大小问题「建议收藏」
因为torchvision对resnet18-resnet152进行了封装实现,因而想跟踪下源码
全栈程序员站长
2022/09/01
4.8K0
pytorch笔记:04)resnet网络&解决输入图像大小问题「建议收藏」
CenterNet的骨干网络之DLASeg
CenterNet中使用的DLASeg是在DLA-34的基础上添加了Deformable Convolution后的分割网络。
BBuf
2020/08/10
7.1K0
Pytorch搭建ResNet18
本文主要搭建了ResNet18网络架构,每个block中包含两个Basicblock,每个Basicblock中包含两层,除去输入层和输出层外,一共有16层网络。而且每一个Basciblock之后进行一次跳跃连接。在此基础上,利用CIFAR10上的数据集大小举例,说明了ResNet网络中每层输出的大小变化。
全栈程序员站长
2022/09/01
6210
Pytorch搭建ResNet18
InsightFace力作:RetinaFace单阶段人脸检测器
RetinaFace是2019年5月来自InsightFace的又一力作,它是一个鲁棒性较强的人脸检测器。它在目标检测这一块的变动其实并不大,主要贡献是新增了一个人脸关键点回归分支(5个人脸关键点)和一个自监督学习分支(主要是和3D有关),加入的任务可以用下图来表示:
BBuf
2020/06/05
2.4K0
【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码
【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。值国庆佳节,专知特别推出独家特刊-来自中科院自动化所专知小组博士生huaiwen和Jin创作的-PyTorch教程学习系列, 今日
WZEARW
2018/04/09
8.3K0
【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码
rock数据集ResNet34实现「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
5060
rock数据集ResNet34实现「建议收藏」
相关推荐
从梯度消失到百层网络:ResNet 是如何改变深度学习成为经典的?
更多 >
加入讨论
的问答专区 >
1高级后端开发工程师擅长3个领域
    领券
    💥开发者 MCP广场重磅上线!
    精选全网热门MCP server,让你的AI更好用 🚀
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验