当前位置: 首页 > news >正文

《零基础入门AI:深度学习中的视觉处理(卷积神经网络(CNN)进阶)》

一、卷积知识扩展

1. 二维卷积

单通道版本

对于单通道输入图像 III (尺寸 H×WH \times WH×W) 和卷积核 KKK (尺寸 F×FF \times FF×F),输出特征图 OOO 的计算公式为:

O(i,j)=∑m=0F−1∑n=0F−1I(i+m,j+n)⋅K(m,n)O(i,j) = \sum_{m=0}^{F-1} \sum_{n=0}^{F-1} I(i+m, j+n) \cdot K(m, n)O(i,j)=m=0F1n=0F1I(i+m,j+n)K(m,n)

计算过程示例

在这里插入图片描述

多通道版本

对于多通道输入 III (尺寸 H×W×CinH \times W \times C_{in}H×W×Cin) 和卷积核 KKK (尺寸 F×F×CinF \times F \times C_{in}F×F×Cin),输出特征图的计算公式为:

O(i,j)=∑c=0Cin−1∑m=0F−1∑n=0F−1Ic(i+m,j+n)⋅Kc(m,n)+bO(i,j) = \sum_{c=0}^{C_{in}-1} \sum_{m=0}^{F-1} \sum_{n=0}^{F-1} I_c(i+m, j+n) \cdot K_c(m, n) + bO(i,j)=c=0Cin1m=0F1n=0F1Ic(i+m,j+n)Kc(m,n)+b

其中 bbb 是偏置项,每个输出通道有独立的偏置。

在这里插入图片描述

在这里插入图片描述

2. 三维卷积

三维卷积用于处理时空数据(如视频、3D医学影像):

  • 输入维度:深度 × 高度 × 宽度 × 通道 (D×H×W×C)
  • 卷积核维度:时间/深度 × 高度 × 宽度 × 输入通道 × 输出通道 (T×F×F×C_in×C_out)
  • 输出计算:
    O(d,i,j)=∑t=0T−1∑c=0Cin−1∑m=0F−1∑n=0F−1Ic(d+t,i+m,j+n)⋅Kc,t(m,n)O(d,i,j) = \sum_{t=0}^{T-1} \sum_{c=0}^{C_{in}-1} \sum_{m=0}^{F-1} \sum_{n=0}^{F-1} I_c(d+t, i+m, j+n) \cdot K_{c,t}(m, n)O(d,i,j)=t=0T1c=0Cin1m=0F1n=0F1Ic(d+t,i+m,j+n)Kc,t(m,n)

在这里插入图片描述

应用场景

  • 视频动作识别
  • 3D医学图像分割
  • 气象数据分析

3. 反卷积(转置卷积)

反卷积用于上采样操作,常见于图像分割和生成模型:

计算过程

  1. 在输入特征图元素间插入零填充
  2. 应用标准卷积操作

在这里插入图片描述

数学表示
输入 XXX (尺寸 Hin×WinH_{in} \times W_{in}Hin×Win),输出 YYY (尺寸 Hout×WoutH_{out} \times W_{out}Hout×Wout):
KaTeX parse error: Expected 'EOF', got '_' at position 57: … + \text{kernel_̲size} - 2 \time…

底层计算
通过矩阵转置实现:

  • 标准卷积:Y=WXY = WXY=WX
  • 反卷积:X=WTYX = W^TYX=WTY

在这里插入图片描述

4. 膨胀卷积(空洞卷积)

膨胀卷积通过间隔采样扩大感受野:

  • 膨胀率 rrr:采样间隔
  • 实际感受野:F′=F+(F−1)(r−1)F' = F + (F-1)(r-1)F=F+(F1)(r1)

在这里插入图片描述

计算公式
O(i,j)=∑m=0F−1∑n=0F−1I(i+r⋅m,j+r⋅n)⋅K(m,n)O(i,j) = \sum_{m=0}^{F-1} \sum_{n=0}^{F-1} I(i + r \cdot m, j + r \cdot n) \cdot K(m, n)O(i,j)=m=0F1n=0F1I(i+rm,j+rn)K(m,n)

优势

  • 不增加参数量的情况下扩大感受野
  • 保持特征图分辨率
  • 适用于语义分割(如DeepLab)

5. 可分离卷积

空间可分离卷积

将大卷积核分解为小核乘积:
K3x3=K3x1×K1x3K_{3x3} = K_{3x1} \times K_{1x3}K3x3=K3x1×K1x3

原始3x3核:     分解后:
[a,b,c]         [a]   [x,y,z]
[d,e,f]   =>    [d] × [x,y,z]
[g,h,i]         [g]

优势:参数量从9减少到6(3+3)

图示:

在这里插入图片描述

深度可分离卷积

分为两步:

  1. 深度卷积:单通道卷积
    • 输入:H×W×CinH \times W \times C_{in}H×W×Cin
    • 输出:H×W×CinH \times W \times C_{in}H×W×Cin
  2. 逐点卷积:1×1卷积
    • 输入:H×W×CinH \times W \times C_{in}H×W×Cin
    • 输出:H×W×CoutH \times W \times C_{out}H×W×Cout

参数量对比

  • 标准卷积:F×F×Cin×CoutF \times F \times C_{in} \times C_{out}F×F×Cin×Cout
  • 深度可分离:(F×F×Cin)+(1×1×Cin×Cout)(F \times F \times C_{in}) + (1 \times 1 \times C_{in} \times C_{out})(F×F×Cin)+(1×1×Cin×Cout)

效率提升:MobileNet中可减少8-9倍计算量

图1:输入图的每一个通道,我们都使用了对应的卷积核进行卷积。 通道数量 = 卷积核个数,每个卷积核只有一个通道

在这里插入图片描述

图2:完成卷积后,对输出内容进行1x1的卷积

在这里插入图片描述

6. 分组卷积

将输入通道分为 GGG 组,每组独立卷积:

  • 标准卷积:所有输入通道→所有输出通道
  • 分组卷积:组内输入通道→组内输出通道

在这里插入图片描述

数学表达
Og(i,j)=∑c∈groupg∑m∑nIc(i+m,j+n)⋅Kg,c(m,n)O_g(i,j) = \sum_{c \in \text{group}_g} \sum_{m} \sum_{n} I_c(i+m,j+n) \cdot K_{g,c}(m,n)Og(i,j)=cgroupgmnIc(i+m,j+n)Kg,c(m,n)

优势

  • 减少参数量和计算量
  • 促进特征多样性学习
  • ResNeXt、ShuffleNet基础

7. 混洗分组卷积

在分组卷积后添加通道混洗操作:

  1. 分组卷积
  2. 重组通道:将不同组的特征混合

在这里插入图片描述

实现步骤

输入
分组卷积
通道混洗
输出

作用:增强组间信息交流,提升特征融合能力

8. 扁平卷积

使用1×1卷积核进行通道变换:

  • 数学运算:O(i,j,c)=∑k=0Cin−1I(i,j,k)⋅W(c,k)O(i,j,c) = \sum_{k=0}^{C_{in}-1} I(i,j,k) \cdot W(c,k)O(i,j,c)=k=0Cin1I(i,j,k)W(c,k)
  • 作用:
    • 降维/升维
    • 跨通道信息融合
    • 保持空间分辨率

在这里插入图片描述

二、感受野

1. 感受野的概念

感受野指卷积网络中单个神经元对应输入图像的区域大小。它反映了神经元能"看到"的原始输入范围。

计算示例

层1: 3x3卷积 → 感受野=3x3
层2: 3x3卷积 → 感受野=5x5 (考虑重叠)
层3: 3x3卷积 → 感受野=7x7

在这里插入图片描述

2. 感受野的作用

特征抽象层次
网络深度感受野大小特征抽象级别
浅层小 (3-7像素)边缘、纹理
中层中 (15-40像素)形状、部件
深层大 (>100像素)物体、场景
设计注意点
  1. 输入尺寸匹配:最终层感受野应大于目标物体
  2. 架构优化:通过膨胀卷积高效扩大感受野
  3. 多尺度融合:组合不同感受野的特征(如FPN)

计算公式
RFl=RFl−1+(kl−1)×∏i=1l−1siRF_{l} = RF_{l-1} + (k_l - 1) \times \prod_{i=1}^{l-1} s_iRFl=RFl1+(kl1)×i=1l1si
其中:

  • RFlRF_lRFl:第 lll 层的感受野
  • klk_lkl:第 lll 层卷积核大小
  • sis_isi:第 iii 层步长

三、卷积神经网络案例:CIFAR-10分类

1. 模型结构设计

输入 32x32x3
卷积64, 3x3
ReLU
最大池化 2x2
卷积128, 3x3
ReLU
最大池化 2x2
卷积256, 3x3
ReLU
全局平均池化
全连接10
Softmax

2. 网络模型定义

import torch.nn as nnclass CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 = nn.Conv2d(3, 64, 3, padding=1)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(64, 128, 3, padding=1)self.conv3 = nn.Conv2d(128, 256, 3, padding=1)self.gap = nn.AdaptiveAvgPool2d(1)  # 全局平均池化self.fc = nn.Linear(256, 10)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = F.relu(self.conv3(x))x = self.gap(x)x = x.view(-1, 256)x = self.fc(x)return x

3. 核心模块解析

模块作用数学原理
卷积层特征提取y=W∗x+by = W \ast x + by=Wx+b
ReLU引入非线性f(x)=max⁡(0,x)f(x) = \max(0,x)f(x)=max(0,x)
最大池化降维y=max⁡(xi:i+k,j:j+k)y = \max(x_{i:i+k,j:j+k})y=max(xi:i+k,j:j+k)
全局平均池化空间信息聚合yc=1H×W∑i∑jxc,i,jy_c = \frac{1}{H \times W} \sum_i \sum_j x_{c,i,j}yc=H×W1ijxc,i,j
Softmax分类概率输出pc=ezc∑kezkp_c = \frac{e^{z_c}}{\sum_{k} e^{z_k}}pc=kezkezc

4. CIFAR-10数据集

  • 10类物体(飞机、汽车、鸟等)

  • 50,000训练图像 + 10,000测试图像

  • 分辨率32×32 RGB

  • 数据加载:

    transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    ])trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
    

5. 数据增强策略

train_transform = transforms.Compose([transforms.RandomHorizontalFlip(),  # 随机水平翻转transforms.RandomRotation(15),      # 随机旋转(-15°~15°)transforms.ColorJitter(             # 颜色调整brightness=0.2, contrast=0.2, saturation=0.2),transforms.RandomResizedCrop(32, scale=(0.8, 1.0)),  # 随机缩放裁剪transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

6. 模型训练与保存

model = CNN().cuda()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)for epoch in range(50):for inputs, labels in train_loader:inputs, labels = inputs.cuda(), labels.cuda()# 前向传播outputs = model(inputs)loss = criterion(outputs, labels)# 反向传播optimizer.zero_grad()loss.backward()optimizer.step()# 每10轮保存一次if epoch % 10 == 0:torch.save(model.state_dict(), f'model_epoch_{epoch}.pth')

7. 模型验证流程

model.load_state_dict(torch.load('best_model.pth'))
model.eval()  # 切换到评估模式correct = 0
total = 0with torch.no_grad():for images, labels in test_loader:images, labels = images.cuda(), labels.cuda()outputs = model(images)_, predicted = torch.max(outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f'准确率: {100 * correct / total}%')

8. 实时训练可视化

使用TensorBoard记录:

from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter()for epoch in range(epochs):# ...训练循环...writer.add_scalar('Loss/train', loss.item(), epoch)writer.add_scalar('Accuracy/train', acc, epoch)# 可视化卷积核if epoch % 5 == 0:for name, param in model.named_parameters():if 'conv' in name and 'weight' in name:writer.add_histogram(name, param, epoch)writer.add_images(f'{name}_kernels', param.data[:8].unsqueeze(1), epoch)

关键概念总结

卷积类型对比

卷积类型参数量计算量适用场景
标准卷积通用模型
深度可分离极低极低移动端模型
膨胀卷积不变不变语义分割
分组卷积减少减少高效模型
反卷积生成模型

感受野计算表

核大小步长感受野
Conv1313
Pool1224
Conv2318
Pool22212
Conv33120
http://www.dtcms.com/a/332016.html

相关文章:

  • 光猫 SK-D840N 获取管理员密码和登录Telnet简记
  • 如何永久修改开发板的时间(重启开发板也不会失效)
  • 深度学习-卷积神经网络CNN-膨胀卷积、可分离卷积(空间可分离、深度可分离)、分组卷积
  • 从红警中来学习工厂方法 vs. 抽象工厂
  • C# 异步编程:提高应用程序效率的关键
  • A股大盘数据-20250814 分析
  • mysql如何降级
  • IDEA 插件 Trae AI 全攻略
  • 20道前端性能优化面试题精华
  • 数仓分层架构设计全解析:从理论到实践的深度思考
  • 多模态大模型技术框架汇总
  • cursor中的设置C++无法跳转
  • CMake中add_definitions()的使用指南
  • geoserver sql视图调用Postgis自定义函数问题记录
  • 五种IO模型与非阻塞IO
  • 双椒派E2000D网络故障排查指南
  • T05_卷积神经网络
  • 许政南辅警---辅警面试等待2小时,面试十分钟
  • 什么是主成分分析(PCA)和数据降维
  • 【22-决策树】
  • 若依前后端分离版学习笔记(十)——数据权限
  • 机器人伴侣的智能升级:Deepoc具身智能模型如何重塑成人伴侣体验
  • Linux 内核参数:drop_caches
  • buildroot 简单介绍
  • 搭建局域网yum源仓库全流程
  • C/C++ 进阶:深入解析 GCC:从源码到可执行程序的魔法四步曲
  • QT中ARGB32转ARGB4444优化4K图像性能的实现方案(完整源码)
  • 从理论到落地:分布式事务全解析(原理 + 方案 + 避坑指南)
  • ACCESS多个时间段查询,只取整点,30分数据
  • 第1节:多模态大模型入门(多模态大模型基础教程)