第P8周:YOLOv5-C3模块实现

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客**
>- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)**

首先用通俗的语言解释一下什么是C3模块,以及它在 YOLOv5算法中的作用(以下转自chatGPT)

C3模块的主要构建思路和组成部分:

  • Bottleneck(瓶颈)结构

    • 瓶颈结构是YOLOv5网络中的一个重要组件,它通常由1x1卷积和3x3卷积组成,目的是减少特征图的通道数,从而降低计算量。(下图中的Conv就是卷积,Conv包括Conv2d 代表二维卷积层、Batch Normalization 是一种用于加速神经网络训练并提高稳定性的方法、SiLU,也称为 Swish,是一种激活函数)
    • 瓶颈结构通过先使用1x1卷积层减少特征图的通道数,然后使用3x3卷积层进行特征提取,最后再通过1x1卷积层恢复特征图的通道数。
  • 残差连接(Residual Connection)

    • 残差连接是深度学习网络中的一种技术,用于解决深层网络训练中的梯度消失问题。
    • 残差连接通过跳过一些网络层,将输入直接加到输出上,从而形成一种快捷路径,这使得梯度可以直接反向传播到前面的层,促进网络的训练。
  • C3模块

    • C3模块在YOLOv5中结合了多个瓶颈结构和残差连接,形成一种高效的特征提取模块。
    • C3模块通常由一个初始的1x1卷积层、多个瓶颈结构、一个残差连接以及一个最终的1x1卷积层组成。
    • 在C3模块中,特征图会通过多个瓶颈结构进行特征提取,并通过残差连接将初始特征和提取的特征相加,从而形成最终的输出特征图。

结合上图,用通俗的语言解释就是,想象一下你在整理一个非常凌乱的房间。你有很多东西需要分类和整理,但你想要尽量少地移动它们,同时确保最终的整理结果是整齐和有条理的,Bottleneck结构就像是先把数据压缩成更少的类别,以便更容易处理, 如将所有东西分类,比如书籍、衣物、杂物等。卷积操作类似于对每一类进行详细整理,把书籍按大小、类别摆放整齐。在整理过程中,你可能发现一些东西不需要重新整理,可以直接放回原处。残差连接就是这样的一种机制,它直接保留了一些原始的信息,让处理过程更加高效。

是否可以尝试通过增加/调整C3模块与Conv模块来提高准确率?

答:调整Conv模块:

增加卷积层数量:添加更多的卷积层可以帮助网络提取更丰富的特征

调整卷积核大小:不同大小的卷积核可以捕捉不同尺度的特征。尝试使用混合大小的卷积核(例如3x3和5x5)来捕获更多样的特征

增加卷积核数量:增加每层卷积核的数量(通道数)可以提取更多特征,从而可能提高模型的表现

调整C3模块:

增加瓶颈结构数量:增加C3模块中瓶颈结构的数量,可以使网络学到更多的复杂特征

调整瓶颈结构内部的卷积核和层数:在瓶颈结构内部,可以尝试不同的卷积核大小和层数,以找到最佳的特征提取方案

增加或调整残差连接:通过增加或调整残差连接的位置和方式,可以进一步提高网络的学习能力和稳定性

增加C3模块的数量:在网络中增加更多的C3模块,可以更深入地提取特征

一、前期准备

import torch
import torch.nn as nn
import torchvision.transforms as transforms
import torchvision
from torchvision import transforms, datasets
import os,PIL,pathlib,warnings

warnings.filterwarnings("ignore")             #忽略警告信息

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

import os,PIL,random,pathlib

data_dir = 'autodl-tmp/weather_photos'
data_dir = pathlib.Path(data_dir)

data_paths = list(data_dir.glob('*'))
classeNames = [path.name for path in data_paths]
print(classeNames)

# 关于transforms.Compose的更多介绍可以参考:https://blog.csdn.net/qq_38251616/article/details/124878863
train_transforms = transforms.Compose([
    transforms.Resize([224, 224]),  # 将输入图片resize成统一尺寸
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值