深度学习基础模型之AlexNet

这个只是了解图像相关知识的时候码一下,方便自己查看。并不是论文翻译。

论文ImageNet Classification with Deep Convolutional Neural Networks

卷积和池化的计算

图像为L×L×C,有K个大小为A×A×C的卷积核,pad:B,stride:S。那么得到的特征图为
[(L-A + 2 × B)/S + 1,(L-A + 2 × B)/S + 1,K]
图像为L×L×C,有大小为A×A的池化层,pad:B,stride:C,那么得到的特征图为
[(L-A + 2 × B)/S + 1,(L-A + 2 × B)/S + 1,C]
也就是说,卷积核的厚度C要和输入的厚度C对应(卷积的计算)。特征图的厚度就是有多少个卷积核。
池化层改变特征图大小但是不改变厚度。

前言

第一个典型的CNN是LeNet5结构,例如GoogLeNet之所以L大写似乎就是为了致敬。但是大家最熟知的,或者说魔改最多的还是AlexNet,当时在2012年的ImageNet竞赛中的冠军模型,后来发表了论文ImageNet Classification with Deep Convolutional Neural Networks。论文一作是Alex,是大神Hinton的学生。
事实上AlexNet的结构和LeNet非常相似,也就是目前通用的卷积神经网络的结构,就是通过前面的卷积层进行特征提取,最后通过全连接建立映射作为输出。但是AlexNet更为复杂。

数据集介绍

ImageNet数据集包含1,500万标注好的高像素照片,分为大约22,000个组别。使用Amazon’s
Mechanical Turk crowd-sourcing tool在互联网上收集图片并进行人工标注。ILSVRC比赛自2010年开始,使用的数据集是ImageNet的子集,大约包含120万张训练集和50,000张验证集,150,000张测试集图片共1000个类别。
因为ImageNet包含的是多种尺寸的高像素的图片,但是AlexNet需要一个固定尺寸的输入,所以通过降采样的方式得到256×256大小的图片。首先对输入的图片进行放缩使短边变为256,然后再对得到的图像裁剪最中间的256×256的像素。(其实蛮粗暴的,但是事实证明也比较有效了,这是对特定数据集的做法。)

结构

AlexNet包括八个可学习的层——五个卷积层和三个全连接层。下面介绍一些相对之前模型来说比较新颖的点。
一、ReLU激活函数
之前常用的激活函数使tanh或者sigmoid,但是都有这样那样的问题(为什么?)所以这里应用了ReLU激活函数来避免梯度爆炸/消失等问题。(现在更多还有leaky-ReLU等)
二、多CPU训练
文章显示这里使用了两个CPU进行并行训练,现在来说其实蛮普遍了。其实不了解的人可以了解一下并行训练到底是怎么实现并行和参数更新的。
三、局部响应归一化(Local Response Normalization)
就是一个归一化的方法,ReLU不需要输入的归一化来防止激活函数饱和,但是应用LRN能更使模型更有效。

局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),然后根据论文有公式如下
在这里插入图片描述

可以参考这篇博客深度学习的局部响应归一化LRN(Local Response Normalization)理解
四、重叠最大池化
池化在CNN中早就是有应用的。池化一般跟在卷积层之后,用于减少卷积得到的特征,有防止过拟合的效果,有时候也被叫做降采样层
。一般来说,一个窗口大小为z×z的池化窗口,每次的步长s也为z,也就是说窗口没有重叠。AlexNet设置z=3,s=2。这就有了重叠的池化。没有理论的基础,但是效果确实有提升。(可能降采样损失了很多信息,但是重叠后能减少信息损失。)
五、Dropout层
Dropout层在AlexNet中设置在最初的两层全连接之间。可以简单的认为Dropout就是通过按照一定比例随机抑制神经元输出来得到稀疏特征,来应对过拟合问题。
Dropout层在训练的时候是直接抑制了一部分输出,但是预测的时候并没有,所以在预测输出的时候会按照比例对权重矩阵进行缩小。细节可以参考论文Dropout: a simple way to prevent neural networks from overfitting.
六、结构总览
在这里插入图片描述
论文里的图就是一半的不好看的样子,但是因为是双GPU并行,所以看一半就可以了。很容易可以看到这个主要是将图片分成两部分进行处理,最后再合为一个1000维的向量。
第一层卷积:224×224×3经过96个卷积核11×11×3得到55×55×96特征图(224会被预处理为227,步长为4,而且是双GPU所以是55×55×48)
第一层池化:55×55×96经过大小为3步长为2的最大池化,变为27×27×96(双GPU)
第二层卷积:再经过256个5×5×48的卷积核得到27×27×256特征图(步长为1,pad为2)
第二层池化:27×27×256经过大小为3步长为2的最大池化,变为13×13×256
第三层卷积:再通过384个3×3×256的卷积核(这里两个GPU的联系起来了),经过归一化和池化得到13×13×384特征图(pad:1,步长为1)
第四层卷积:再通过384个3×3×192的卷积核,得到13×13×384特征图
第五层卷积:再通过256个3×3×192的卷积核,得到13×13×256特征图
第五层池化:再通过大小为3,步长为2的池化得到6×6×256
第六层全连接:通过4096个6×6×256滤波器(卷积核)得到4096维特征向量
第七层全连接:通过全连接得到4096维特征向量
第八层全连接:全连接得到1000维输出,计算概率得到分类结果。

AlexNet 中60M参数

AlexNet只有8层,但是它需要学习的参数有60000000个,相比如他的层数,这是一个很可怕的数字了,我们来计算下这些参数都是怎么来的:
C1:96×11×11×3(卷积核个数/宽/高/厚度) 34848个
C2:256×5×5×48(卷积核个数/宽/高/厚度) 307200个
C3:384×3×3×256(卷积核个数/宽/高/厚度) 884736个
C4:384×3×3×192(卷积核个数/宽/高/厚度) 663552个
C5:256×3×3×192(卷积核个数/宽/高/厚度) 442368个
R1:4096×6×6×256(卷积核个数/宽/高/厚度) 37748736个
R2:4096×4096 16777216个
R3:4096×1000 4096000个

在R1中卷积核尺寸是6×6×2566\times6\times2566×6×256而不是13×13×25613\times13\times25613×13×256是因为经过了最大池化。可以看到,全连接层(尤其是第一层)参数数量占了绝大部分。

减少过拟合

一、数据扩增
1、生成图像:通过随机抽取的方式从256×256的图像抽取出来224×224
2、改变训练集中图片RGB三个通道的权重。对图片应用PCA。每个像素点都有三个通道,我们通过引入随机量对像素点进行重建。通过这样的方式引入了均值为0方差为0.1的高斯随机噪声
在这里插入图片描述
二、Dropout
这个前面讲过了。

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值