Resnet代码实现+为什么使用全局平均池化​​​​​​​

1.ResNet直接使用stride=2的卷积做下采样,并且用global average pool层替换了全连接层。

GAP的真正意义是:对整个网路在结构上做正则化防止过拟合。但是值得我们注意的是,使用gap可能会造成收敛速度减慢。用一个GAP将N个feature map降维成1*N大小的feature map,再用class个1*1卷积核将1*N的feature map卷成1*class的向量。

①摘取重点于:为什么使用全局平均池化

在卷积神经网络的初期,卷积层通过池化层(一般是MaxPooling)后总是要一个或n个全连接层,全连接网络可以使feature map的维度减少,进而输入到softmax分类。其特征就是全连接层的参数超多,模型本身非常臃肿,又会造成过拟合。(现在已经很少大量使用fc层),用pooling来代替全连接。就解决了之前的问题:要不要在fc层使用dropout。使用AVP就不要了。

(作者自己思考的部分,不知对错)全局平均池化层代替全连接层虽然有好处,但是不利于迁移学习。因为参数较为“固化”在卷积的诸层网络中。增加新的分类,那就意味着相当数量的卷积特征要做调整。而全连接层模型则可以更好的迁移学习,因为它的参数很大一部分调整在全连接层,迁移的时候卷积层可能也会调整,但是相对来讲要小的多了。

再对比:论文R-FCN(全卷积+位置敏感型“S

知识积累同时被 2 个专栏收录54 篇文章订阅专栏YOLO模型相关33 篇文章订阅专栏系列文章地址YOLO系列基础合集——小白也看得懂的论文精解-CSDN博客YOLO系列基础(一)卷积神经网络原理详解与基础层级结构说明-CSDN博客YOLO系列基础(二)Bottleneck瓶颈层原理详解-CSDN博客YOLO系列基础(三)从ResNet残差网络到C3层-CSDN博客YOLO系列基础(四)归一化层(BN层)的前世今生!-CSDN博客YOLO系列基础(五)从神经元共适应性到模型Dropout层-CSDN博客YOLO系列基础(六)YOLOv1原理详解原理如此清晰-CSDN博客YOLO系列基础(七)从数据增强到图像线性变换-CSDN博客YOLO系列基础(八)从坐标直预测到锚框偏移量-CSDN博客YOLO系列基础(九)YOLOv2论文及原理详解(上)-CSDN博客YOLO系列基础(十)YOLOv2论文及原理详解(下)Darknet-19网络结构-CSDN博客目录系列文章地址卷积神经网络的原理及卷积核详解一、卷积神经网络的原理二、卷积层与卷积核详解卷积核的作用卷积核的设计卷积样例与代码说明:卷积核的实际应用三、池化层(Pooling Layer)池化层的作用池化层的设计池化层的代码示例 四、全连层(Fully Connected Layer)全连层的作用全连层的设计代码示例 一个简单的卷积神经网络构建示例卷积神经网络的原理及卷积核详解卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一,在自然语言处理和图像领域中有广泛的应用。本文将详细讲解卷积神经网络的原理,并重点探讨卷积层、池化层、全连层的基础层级结构的说明。一、卷积神经网络的原理卷积神经网络的核心操作是卷积操作,它通过对输入数据进行局部感知和特征提取,实现高效的特征表示。卷积操作可以看作是一种类似于加权运算的操作,在图像处理中,针对图像的像素矩阵,卷积操作就是用一个卷积核来逐行逐列地扫描像素矩阵,并与像素矩阵做元素相乘,以此得到新的像素矩阵。卷积神经网络通常由多个卷积层、池化层、全连层等组成。卷积层用于提取输入数据的局部特征池化层用于降低特征图的维度和减少计算量全连层用于将特征图映射到输出类别二、卷积层与卷积核详解卷积核(convolutional kernel)是卷积神经网络中的核心组件,它是一种可学习的参数,用于从输入数据中提取特征。卷积核可以从输入数据中提取出特定的特征,例如边缘、角点、纹理等。它通过卷积操作对输入数据进行局部感知和特征提取。卷积操作可以看作是一种类似于加权运算的操作,使用一个卷积核(也称为滤波器)在输入数据上进行滑动窗口式的局部加权求和,以此得到新的特征图。卷积核的作用特征提取:卷积核通过滑动窗口的方式在输入数据上进行局部感知,提取出输入数据的局部特征。这些特征可以是边缘、角点、纹理等。参数共享:卷积神经网络中的卷积核是共享的,即在整个网络中使用同一个卷积核。这种参数共享可以大大减少网络的参数数量,降低过拟合的风险。稀疏连:每个卷积核只与输入数据的一小部分相连,这种稀疏连可以减少网络的计算量,提高网络的计算效率。局部感知:卷积核通过局部感知的方式提取输入数据的特征,这种方式符合人类观察物体的习惯。人类观察物体时,也是从局部开始认识,然后逐渐扩展到整体。卷积核的设计大小:卷积核的大小决定了卷积的感受野大小。常用的卷积核大小有1x1、3x3、5x5等。较小的卷积核可以提取出更加局部的特征,而较大的卷积核可以提取出更加全局的特征。数量:卷积核的数量决定了输出特征图的通道数。多个卷积核可以提取出输入数据中的不同特征。初始化:卷积核的初始化可以影响网络的训练效果。常用的初始化方法有随机初始化、Xavier初始化、He初始化等。步幅(Stride):卷积核在输入数据上滑动时每次移动的像素数,决定了输出特征图的尺寸。填充(Padding):在输入数据的边界上填充额外的像素值,以控制输出特征图的尺寸。卷积样例与代码说明:​import torchimport torch.nn as nn # 定义一个简单的卷积层,输入通道数为3、输出通道数为16、卷积核大小为3*3、步长为2、填充数为1# 填充是为了保持输入和输出数据的空间维度一致(在stride=1且kernel_size为奇数时)。conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1) # 创建一个随机输入张量(假设输入图像大小为32x32,通道数为3)input_tensor = torch.randn(1, 3, 32, 32) # 应用卷积层output_tensor = conv_layer(input_tensor)print(output_tensor.shape) # 输出形状应为[1, 16, 32, 32](假设stride=1, padding=1)卷积核的实际应用卷积核在图像处理、计算机视觉、自然语言处理等领域都有广泛的应用。图像处理:卷积核可以用于图像的边缘检测、模糊与平滑、锐化等操作。例如,Sobel算子是一种常用的边缘检测卷积核,它可以通过计算亮度梯度来识别图像中的边缘信息。计算机视觉:卷积神经网络在目标检测、图像分类、图像分割等任务中取得了显著的效果。卷积核通过提取图像的特征,实现了对图像的高效表示和分类。自然语言处理:卷积核也可以用于自然语言处理中的文本分类、情感分析、命名实体识别等任务。通过提取文本中的n-gram特征,卷积核可以实现对文本的高效表示和分类。三、池化层(Pooling Layer)池化层(Pooling Layer)是卷积神经网络(CNN)中的关键组件之一,它紧随卷积层之后,用于进一步处理特征图,以降低数据的维度、减少计算量,并增强网络的鲁棒性。以下是对池化层的作用、设计以及有效性的详细说明。常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。通过一个滑动窗口来获取滑动窗口内的值,并选取最大值 or 求平均池化层的作用降维:通过下采样操作减少特征图的尺寸。用以增加计算效率特征不变性:池化操作保留了输入数据中最显著的特征,增强了网络对输入数据局部变化的鲁棒性。减少过拟合:通过减少特征图的维度和参数数量,池化层有助于降低模型对训练数据的过拟合风险。这提高了模型在未见过的数据上的表现能力。池化层的设计池化类型:常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。最大池化选取池化窗口中的最大值作为输出,而平均池化则计算池化窗口中的平均值作为输出。此外,还有一些其他类型的池化操作,如随机池化(Stochastic Pooling)等,但它们在实际应用中相对较少。池化窗口:池化窗口的大小决定了每次下采样操作覆盖的输入特征区域。常见的池化窗口大小有2x2、3x3等。较小的池化窗口可以保留更多的细节信息,而较大的池化窗口则可以进一步降低特征图的维度。步幅:步幅决定了池化窗口在输入特征图上滑动的距离。当步幅等于池化窗口的大小时,池化操作将不重叠地应用于输入特征图。较大的步幅可以更快地降低特征图的尺寸。池化层的代码示例 # 定义一个最大池化层,卷积核大小为2*2,步长为2,最大池化层选取2*2大小中最大的数值作为代表max_pool_layer = nn.MaxPool2d(kernel_size=2, stride=2) # 应用池化层到卷积层的输出pooled_output = max_pool_layer(output_tensor)print(pooled_output.shape) # 输出形状应为[1, 16, 16, 16](假设输入形状为[1, 16, 32, 32],kernel_size=2, stride=2)四、全连层(Fully Connected Layer)原理:全连层位于CNN的末端,用于将卷积层和池化层提取的特征映射到输出类别或回归值。每个神经元都与前一层的所有神经元相连,因此参数数量通常较大。全连层的作用特征整合:全连层的主要作用是对前面卷积层或池化层提取到的特征进行整合。它通过将每个神经元与前一层的所有神经元相连,实现了对全局特征的全面利用。这种整合有助于网络学习到更加复杂和抽象的特征表示。分类与回归:在神经网络的末端,全连层通常用于输出分类结果或回归值。通过引入非线性激活函数(如Softmax或Sigmoid),全连层可以将特征向量映射到类别标签或回归值上,从而实现最终的预测任务。
04-07
### YOLO模型及其相关的卷积神经网络基础知识 #### 什么是YOLO模型? YOLO(You Only Look Once)是一种实时目标检测算法,它将目标检测视为单一的回归问题[^1]。与其他两阶段的目标检测方法不同,YOLO只需要一次前向传播即可完成整个图像的预测。 #### 卷积神经网络(CNN)的基础知识 卷积神经网络是一类专门用于处理二维数据的多层神经网络[^2]。其核心思想在于利用局部感受野提取特征并逐步组合这些特征以形成高层次的理解。以下是CNN的关键组成部分: - **卷积层** 卷积层通过一系列滤波器扫描输入图像的小块区域(即局部感受域),从而捕捉到诸如边缘、纹理等低级特征。这一过程减少了网络中可训练参数的数量,提高了计算效率。 - **池化层** 池化操作通常紧随卷积之后执行,目的是降低特征图的空间尺寸,同时保留最重要的信息。常见的池化方式有最大池化和平均池化。 - **全连层** 在经过多个卷积和池化层后,最终的特征会被展平并通过全连层映射至输出类别或位置坐标。 - **激活函数** 非线性变换对于打破线性关系至关重要。ReLU(Rectified Linear Unit)是最常用的激活函数之一,因为它能有效缓解梯度消失问题。 #### YOLO模型的具体结构与层级详解 YOLO架构主要分为以下几个部分: 1. **网格划分** 输入图片被划分为S×S个单元格,每个单元格负责预测B个边框以及对应的置信分数和C种类别的概率分布。 2. **卷积运算** 利用堆叠的卷积核逐层提取越来越抽象的特征表示。例如,在原始版本中采用了GoogLeNet作为骨干网的一部分。 3. **损失函数定义** 总体损失由定位误差、对象分类错误及无对象惩罚共同组成。具体表达式如下所示: ```python loss = λ_coord * ∑_i (x_i - ŷ_x)^2 + ... + λ_noobj * ∑_j C_j^no_obj * I(Obj)_ij ``` 4. **快速推理机制** 整张图片仅需送入网络一次便可得出所有可能的对象候选框及相关属性值,极大地提升了运行速度。 ```python import torch.nn as nn class YoloLayer(nn.Module): def __init__(self, S=7, B=2, num_classes=20): super(YoloLayer, self).__init__() self.S = S self.B = B self.num_classes = num_classes def forward(self, x): N = x.size()[0] pred = x.view(N, self.S, self.S, self.B*5+self.num_classes) return pred ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值