典型图像分类卷积神经网络(CNN)的基本流程
一、卷积核
- 卷积核就是图像处理时,给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核。又称滤波器(Filter)。
- 卷积操作就是将卷积核在输入数据上滑动(也叫“扫描”),在每个位置计算点乘 + 求和,生成一个输出值,最终形成一个新的特征图
- 卷积核的作用
1.特征提取:不同卷积核可以检测不同类型的特征,比如边缘、角点、纹理等。
2.参数共享:同一个卷积核在整个输入上共享参数,大大减少了模型参数数量,提高效率。
3.平移不变性:无论目标出现在图像哪个位置,卷积核都能识别出相同特征。
二、卷积的输入与输出
1.卷积的输入
四个参数:batch(多少张图象),C(通道数,即深度,比如RGB三通道),H(高度),W(宽度)
eg:img=torch.ones((4,3,224,224)) , img=torch.zeros((4,3,224,224))
2.卷积的输出
每个卷积核(Filter)会生成一个特征图(Feature Map)。
如果使用 K个卷积核,则输出有 K 个通道
输出通道数 = 卷积核的数量
每个卷积核必须与输入通道数匹配
eg:输入3 * 224 * 224,则卷积核的深度也必须是3.
3.卷积的维度(关键)
-
现有特征图4 * 4. 卷积核大小为2, 卷出来的特征图多大。卷积核的参数量多少?
不考虑深度(通道数为1),4-2+1=3,故特征图3 * 3
参数量从卷积核 中算:2 * 2=4
不难发现:特征图会变小,如何让特征图不变大小?——padding -
填充(padding)
在输入图像的边界周围添加额外像素(0/1)的过程,通过填充后的图片再做卷积,输出的大小会相对于原输出增大,注意是加一圈
比如,padding=1,则可以使3 * 3的图填充成5 * 5的 -
现有特征图100 * 100.,卷积核大小为3,padding1, 卷出来的特征图多大?
102-3+1=100,所以特征图大小为100 * 100 -
特征图64 * 224 * 224. 卷积核X * 3 * 3, padding=1,卷积核数量128
卷出来特征图多大。X是多少?这套卷积核的参数量多少?
226-3+1=224,故特征图大小为128 *224 *224(通道数等于卷积核深度)
X一定是64,参数量:3 * 3 * 64 * 128
三、让特征图变小的方法
①步长 ②池化
1.步长

- 特征图64 * 224 * 224. 卷积核64 * 3 * 3, padding=1,步长1,卷积核数量128
卷出来特征图多大。这套卷积核的参数量多少?
(226-3)/1+1=224,故特征图大小为 128 * 224 * 224
参数量:64 * 3 * 3 * 128 - 输入 3 * 224 * 224, 卷积核11, padding = 2 Stride = 4 , 卷积核数量64,
问输出多少
(228-11)/4 +1=55(向下取整)
输出:64 * 55 *55
2.池化(pooling)
池化层是卷积神经网络中常用的一个层,用于降低特征图的空间尺寸,从而减少计算量,控制过拟合,并提取特征的高层次抽象,其本质就是对输入的片区域做平均或取最大处理
两种池化:最大池化(更常用,计算少);平均池化
池化不会改变通道数
四、图像分类卷积神经网络(CNN)的基本流程
通过卷积得到了最后一个特征图,将其扁平化,压成一维向量,之后加以全连接(可以一个可以多个)
最后一层全连接(得到输出),又称为分类头
假设有三个类别的分类结果(猫,狗,鸟)
则对于每一张图,经过全连接最后输出的就是logits,代表权重,通过softmax可以进一步转化为概率。
比如有两幅图(batch=2),最后的logits = tensor([[ 2.1, -0.5, 1.0],[-1.0, 3.2, 0.8]])
一般的,在 PyTorch中使用 nn.CrossEntropyLoss() 时,它内部自动完成了两件事:
输入 logits → 自动 Softmax → 计算交叉熵损失(Cross-Entropy Loss)
此后,这个loss可以梯度回传,更新模型了
五、经典模型
1.AlexNet模型

参数规定
torch.nn.Conv2d(
in_channels, # 输入通道数
out_channels, # 输出通道数(即卷积核数量)
kernel_size, # 卷积核大小
stride=1, # 步长
padding=0, # 填充
)
2.VGG13模型

3.resNet

更多推荐
所有评论(0)