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

Python训练营打卡 Day54

Inception网络及其思考

知识点回顾:

  1. 传统计算机视觉发展史:LeNet-->AlexNet-->VGGNet-->nceptionNet-->ResNet,之所以说传统,是因为现在主要是针对backbone-neck-head这样的范式做文章
  2. inception模块和网络
  3. 特征融合方法阶段性总结:逐元素相加、逐元素相乘、concat通道数增加等
  4. 感受野与卷积核变体:深入理解不同模块和类的设计初衷

Inception 网络及其思考

知识点回顾
  1. 传统计算机视觉发展史

    • LeNet:像是早期的简单食谱,为后续复杂模型奠定基础。

    • AlexNet:引入了深度和ReLU激活函数,如同在厨房中引入了新的烹饪工具和方法。

    • VGGNet:通过增加网络深度来提升性能,如同增加菜谱的步骤以丰富菜品。

    • InceptionNet:引入多尺度特征提取,如同在烹饪中考虑不同食材的处理方式。

    • ResNet:引入残差连接解决梯度消失问题,如同在厨房中引入新的流程优化方法。

  2. Inception 模块和网络

    • Inception 模块通过多分支结构提取不同尺度的特征,类似在厨房中使用多种工具同时处理食材以提高效率。

    • 网络由多个 Inception 模块堆叠而成,类似于多个高效工作站的组合。

  3. 特征融合方法阶段性总结

    • 逐元素相加:如同将多种处理过的食材按特定方式混合,使味道相互补充。

    • 逐元素相乘:如同根据特定比例混合食材,使味道相互增强。

    • Concat 通道数增加:如同将多种食材的特性拼接在一起,形成丰富的菜品。

  4. 感受野与卷积核变体

    • 感受野决定了模型能“看到”的输入区域大小,类似于厨师的视野范围决定其对菜品的整体把控。

    • 不同大小的卷积核用于提取不同尺度的特征,如同使用不同尺寸的刀具切割食材以适应不同的烹饪需求。

作业:一次稍微有点学术感觉的作业:

  1. 对inception网络在cifar10上观察精度
  2. 消融实验:引入残差机制和cbam模块分别进行消融

作业

对 Inception 网络在 CIFAR-10 上观察精度,并进行消融实验:引入残差机制和 CBAM 模块分别进行消融。

  • 引入残差机制:如同在原有菜谱中增加一种新的调味方法,以提升菜品的口感层次。

  • 引入 CBAM 模块:如同在厨房中增加智能设备,动态调整每一步骤的火力和时间,以提升菜品质量。

  • 消融实验:通过比较不同配置下的模型性能,了解每个模块对整体效果的贡献,如同测试不同烹饪步骤对菜品质量的影响。

class CBAM(nn.Module):def __init__(self, in_channels, reduction_ratio=16):super(CBAM, self).__init__()# 通道注意力self.channel_attention = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(in_channels, in_channels // reduction_ratio, kernel_size=1),nn.ReLU(),nn.Conv2d(in_channels // reduction_ratio, in_channels, kernel_size=1),nn.Sigmoid())# 空间注意力self.spatial_attention = nn.Sequential(nn.Conv2d(2, 1, kernel_size=7, padding=3),nn.Sigmoid())def forward(self, x):channel_attention = self.channel_attention(x)x = x * channel_attentionspatial_attention = self.spatial_attention(torch.cat([torch.mean(x, dim=1, keepdim=True), torch.max(x, dim=1, keepdim=True)[0]], dim=1))x = x * spatial_attentionreturn xclass InceptionWithCBAM(nn.Module):def __init__(self, in_channels):super(InceptionWithCBAM, self).__init__()self.branch1x1 = nn.Sequential(nn.Conv2d(in_channels, 64, kernel_size=1),nn.ReLU())self.branch3x3 = nn.Sequential(nn.Conv2d(in_channels, 96, kernel_size=1),nn.ReLU(),nn.Conv2d(96, 128, kernel_size=3, padding=1),nn.ReLU())self.branch5x5 = nn.Sequential(nn.Conv2d(in_channels, 16, kernel_size=1),nn.ReLU(),nn.Conv2d(16, 32, kernel_size=5, padding=2),nn.ReLU())self.branch_pool = nn.Sequential(nn.MaxPool2d(kernel_size=3, stride=1, padding=1),nn.Conv2d(in_channels, 32, kernel_size=1),nn.ReLU())self.cbam = CBAM(256)def forward(self, x):branch1x1 = self.branch1x1(x)branch3x3 = self.branch3x3(x)branch5x5 = self.branch5x5(x)branch_pool = self.branch_pool(x)outputs = [branch1x1, branch3x3, branch5x5, branch_pool]x = torch.cat(outputs, dim=1)x = self.cbam(x)return xclass InceptionNetWithCBAM(nn.Module):def __init__(self, num_classes=10):super(InceptionNetWithCBAM, self).__init__()self.conv1 = nn.Sequential(nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3),nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2, padding=1))self.inception1 = InceptionWithCBAM(64)self.inception2 = InceptionWithCBAM(256)self.avgpool = nn.AdaptiveAvgPool2d((1, 1))self.fc = nn.Linear(256, num_classes)def forward(self, x):x = self.conv1(x)x = self.inception1(x)x = self.inception2(x)x = self.avgpool(x)x = torch.flatten(x, 1)x = self.fc(x)return x# 主函数
def main_cbam():device = torch.device("cuda" if torch.cuda.is_available() else "cpu")model = InceptionNetWithCBAM().to(device)criterion = nn.CrossEntropyLoss()optimizer = optim.Adam(model.parameters(), lr=0.001)for epoch in range(5):train(model, device, trainloader, criterion, optimizer, epoch)test(model, device, testloader)if __name__ == "__main__":main_cbam()

实验结果分析

通过比较基础 Inception 网络、引入残差机制的 Inception 网络,以及引入 CBAM 模块的 Inception 网络在 CIFAR-10 数据集上的准确率,可以得出以下结论:

  1. 基础 Inception 网络:提供了多尺度特征提取的能力,能够有效捕捉不同尺度的特征。

  2. 引入残差机制:通过残差连接,缓解了深层网络的梯度消失问题,提高了模型的训练效率和性能。

  3. 引入 CBAM 模块:通过通道和空间注意力机制,增强了模型对关键特征的关注能力,进一步提高了模型的性能。

@浙大疏锦行

相关文章:

  • 公司备案号查询网站关键词优化排名哪家好
  • 互联网推广怎么找渠道合肥网络公司seo建站
  • 个人网站备案 名称上海疫情最新消息
  • 网站维护公告模板微信广告
  • 白山网站建设关键词如何确定
  • 建立视频网站要多少钱百度指数网址是什么
  • 【LangChain】5 评估
  • WebAssembly 2.0:超越浏览器的全栈计算革命
  • 修改Rocky Linux文件夹颜色
  • LLM对话框项目 EventSource封装和MessageServiceClass流式展示封装
  • Spring Boot的Security安全控制——应用SpringSecurity!
  • 关于脉冲功率技术的认识
  • 子集筛选(Select by Data Index)组件研究
  • 贝塞尔曲线的切矢量
  • Java事务隔离问题详解:脏读、不可重复读与幻读(含解决方案)
  • 【算法 day03】LeetCode 203.移除链表元素 | 707.设计链表 | 206.反转链表
  • 【Elasticsearch】文档(一):新增 删除
  • db2主从同步 逻辑复制 APPLY_THROTTLE参数
  • 【CompletableFuture】基础Future (一)
  • 车载诊断框架 --- TCP window size设置
  • Kubernetes架构解析
  • Rviz2中,在rviz和launch文件中都需要配置urdf文件,二者作用上的区别?
  • 【工具教程】如何批量识别大量图片的文字并重命名图片,图片文件批量文件识别改名的详细操作步骤和注意事项
  • 水果商城管理系统笔记
  • [深度学习]目标检测YOLO v3
  • C语言状态机:从入门到精通