2026/4/18 20:44:38
网站建设
项目流程
怎么做网站企业文化栏目,福州做网站哪家好,网站开发有什么职位,乙肝能治好吗文章目录Day 54 Inception 网络及其思考一、Inception 网络介绍1.1 背景与动机1.2 核心设计理念1.3 Inception 模块的组成二、Inception 网络架构2.1 定义 Inception 模块2.2 特征融合方法Concat 拼接的特点#xff1a;深度学习中常见的特征融合方式#xff1a;2.3 Inceptio…文章目录Day 54 · Inception 网络及其思考一、Inception 网络介绍1.1 背景与动机1.2 核心设计理念1.3 Inception 模块的组成二、Inception 网络架构2.1 定义 Inception 模块2.2 特征融合方法Concat 拼接的特点深度学习中常见的特征融合方式2.3 InceptionNet 网络定义2.4 Inception 网络的版本演进三、卷积核的变体3.1 感受野Receptive Field3.2 空洞卷积Dilated Convolution3.3 空洞卷积示例四、总结Day 54 · Inception 网络及其思考学习目标理解 Inception 网络的核心设计理念掌握多尺度特征融合的实现方法了解特征融合的常见方式学习卷积核变体与感受野的概念一、Inception 网络介绍1.1 背景与动机Inception 网络也称为 GoogLeNet是 Google 团队在 2014 年提出的经典卷积神经网络架构。参考资料传统计算机视觉的发展史从历史发展来看Inception 网络实际上出现在 ResNet 之前。之所以在学习 ResNet 后再介绍它是因为 Inception 引出了重要的特征融合和特征并行处理思想。1.2 核心设计理念Inception 网络的核心设计理念是“并行的多尺度融合”具体表现为在同一层网络中使用多个不同大小的卷积核如 1x1、3x3、5x5结合池化操作从不同尺度提取图像特征将这些特征进行融合在不增加过多计算量的情况下获得更丰富的特征表达1.3 Inception 模块的组成Inception 模块是 Inception 网络的基本组成单元。关键洞察在同样的步长下卷积核越小下采样率越低保留的图片像素越多卷积核越大越能捕捉像素周围的信息一个典型的 Inception 模块包含以下四个并行分支分支描述作用1x1 卷积分支用于降维减少后续卷积的计算量同时提取局部特征3x3 卷积分支中等尺度卷积捕捉中等尺度的特征5x5 卷积分支较大尺度卷积捕捉较大尺度的特征池化分支最大/平均池化保留图像的全局信息二、Inception 网络架构2.1 定义 Inception 模块importtorchimporttorch.nnasnnclassInception(nn.Module): Inception 模块实现多尺度特征并行提取与融合 该模块包含四个并行分支 - 1x1 卷积分支降维并提取通道间特征关系 - 3x3 卷积分支捕捉中等尺度特征 - 5x5 卷积分支捕捉大尺度特征 - 池化分支保留全局信息 参数: in_channels: 输入特征图的通道数 def__init__(self,in_channels):super(Inception,self).__init__()# 分支11x1 卷积 # 作用降维并提取通道间特征关系self.branch1x1nn.Sequential(nn.Conv2d(in_channels,64,kernel_size1),nn.ReLU())# 分支23x3 卷积 # 作用先降维再用 3x3 卷积捕捉中等尺度特征self.branch3x3nn.Sequential(nn.Conv2d(in_channels,96,kernel_size1),nn.ReLU(),nn.Conv2d(96,128,kernel_size3,padding1),nn.ReLU())# 分支35x5 卷积 # 作用较大的感受野用于提取更全局的结构信息self.branch5x5nn.Sequential(nn.Conv2d(in_channels,16,kernel_size1),nn.ReLU(),nn.Conv2d(16,32,kernel_size5,padding2),nn.ReLU())# 分支4池化分支 # 作用通过池化操作保留全局信息并降维self.branch_poolnn.Sequential(nn.MaxPool2d(kernel_size3,stride1,padding1),nn.Conv2d(in_channels,32,kernel_size1),nn.ReLU())defforward(self,x): 前向传播并行计算四个分支并在通道维度拼接 输出通道数 64 128 32 32 256 branch1x1self.branch1x1(x)# [batch, 64, H, W]branch3x3self.branch3x3(x)# [batch, 128, H, W]branch5x5self.branch5x5(x)# [batch, 32, H, W]branch_poolself.branch_pool(x)# [batch, 32, H, W]outputs[branch1x1,branch3x3,branch5x5,branch_pool]returntorch.cat(outputs,dim1)维度变化[B, C, H, W]到[B, 256, H, W]无论输入通道数是多少输出通道数固定为 256641283232。# 测试 Inception 模块modelInception(in_channels64)input_tensortorch.randn(32,64,28,28)# batch32, channels64, HW28outputmodel(input_tensor)print(f输入形状:{input_tensor.shape})print(f输出形状:{output.shape})# 预期: [32, 256, 28, 28]输入形状: torch.Size([32, 64, 28, 28]) 输出形状: torch.Size([32, 256, 28, 28])设计要点Inception 模块中不同的卷积核和步长最后输出同样尺寸的特征图这是经过精心设计的必须保证空间尺寸对齐才能在通道维度正确拼接concat2.2 特征融合方法Inception 模块采用Concat拼接的方式将不同尺度的特征融合在一起。Concat 拼接的特点通道数增加空间尺寸H, W保持不变每个通道的数值保持独立没有加法运算深度学习中常见的特征融合方式1. 逐元素相加残差连接outputxself.residual_block(x)2. 逐元素相乘注意力机制attentionself.ChannelAttention(features)weighted_featuresfeatures*attention3. 通道拼接outputtorch.cat([f1,f2],dim1)方法维度变化计算量典型场景concat通道数增加中Inception、U-Net逐元素相加维度不变低ResNet、DenseNet 过渡层逐元素相乘维度不变中需权重注意力机制、门控网络跳跃连接concat通道数增加中U-Net、FPN加权融合SE-Net维度不变低通道特征重标定空间金字塔池化SPP通道数增加中目标检测、尺寸自适应任务2.3 InceptionNet 网络定义classInceptionNet(nn.Module): 简化版 InceptionNet用于图像分类 网络结构 1. 卷积层初始特征提取 2. Inception 模块 x 2多尺度特征融合 3. 全局平均池化 全连接层分类输出 def__init__(self,num_classes10):super(InceptionNet,self).__init__()# 初始卷积层self.conv1nn.Sequential(nn.Conv2d(3,64,kernel_size7,stride2,padding3),nn.ReLU(),nn.MaxPool2d(kernel_size3,stride2,padding1))# Inception 模块self.inception1Inception(64)self.inception2Inception(256)# 分类头self.avgpoolnn.AdaptiveAvgPool2d((1,1))self.fcnn.Linear(256,num_classes)defforward(self,x):xself.conv1(x)xself.inception1(x)xself.inception2(x)xself.avgpool(x)xtorch.flatten(x,1)xself.fc(x)returnx# 测试 InceptionNetmodelInceptionNet(num_classes10)input_tensortorch.randn(1,3,224,224)outputmodel(input_tensor)print(f输入形状:{input_tensor.shape})print(f输出形状:{output.shape})输入形状: torch.Size([1, 3, 224, 224]) 输出形状: torch.Size([1, 10])2.4 Inception 网络的版本演进版本特点Inception v1 (GoogLeNet)最初版本引入 Inception 模块Inception v2使用 Batch NormalizationInception v3进一步分解卷积核Inception v4更深的网络结构Inception-ResNet引入残差连接三、卷积核的变体3.1 感受野Receptive Field感受野是指在 CNN 中神经元在原始输入图像上所对应的区域大小。感受野计算示例3x3 卷积步长 1第一层感受野 3x3第二层感受野 5x5计算公式33-15小卷积核的优势减少参数量引入更多非线性多次经过激活函数3.2 空洞卷积Dilated Convolution空洞卷积在卷积核元素间插入空洞用 dilation rate (d) 控制间隔大小。类型描述标准卷积d1卷积核元素紧密排列空洞卷积d1卷积核元素间插入 d-1 个空洞优点扩大感受野而不增加参数保持空间信息相比池化下采样3.3 空洞卷积示例使用空洞卷积只需添加dilation参数# 空洞卷积dilation2self.convnn.Conv2d(16,32,kernel_size3,padding2,dilation2)importtorchimporttorch.nnasnnimporttorchvisionimporttorchvision.transformsastransformsfromtorch.utils.dataimportDataLoader# 数据预处理transformtransforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])# 加载 CIFAR-10 数据集trainsettorchvision.datasets.CIFAR10(root./data,trainTrue,downloadTrue,transformtransform)trainloaderDataLoader(trainset,batch_size128,shuffleTrue)testsettorchvision.datasets.CIFAR10(root./data,trainFalse,downloadTrue,transformtransform)testloaderDataLoader(testset,batch_size128,shuffleFalse)classSimpleCNNWithDilation(nn.Module):包含空洞卷积的简单 CNN 模型def__init__(self):super(SimpleCNNWithDilation,self).__init__()self.conv1nn.Conv2d(3,16,kernel_size3,padding1)# 空洞卷积dilation2self.conv2nn.Conv2d(16,32,kernel_size3,padding2,dilation2)self.conv3nn.Conv2d(32,64,kernel_size3,padding1)self.poolnn.MaxPool2d(2,2)self.relunn.ReLU()self.fc1nn.Linear(64*8*8,256)self.fc2nn.Linear(256,10)defforward(self,x):xself.pool(self.relu(self.conv1(x)))xself.pool(self.relu(self.conv2(x)))xself.relu(self.conv3(x))xx.view(-1,64*8*8)xself.relu(self.fc1(x))xself.fc2(x)returnx# 训练配置devicetorch.device(cudaiftorch.cuda.is_available()elsecpu)modelSimpleCNNWithDilation().to(device)criterionnn.CrossEntropyLoss()optimizertorch.optim.Adam(model.parameters(),lr0.001)deftrain(epoch):model.train()running_loss0.0fori,(inputs,labels)inenumerate(trainloader):inputs,labelsinputs.to(device),labels.to(device)optimizer.zero_grad()outputsmodel(inputs)losscriterion(outputs,labels)loss.backward()optimizer.step()running_lossloss.item()if(i1)%1000:print(fEpoch:{epoch1}, Batch:{i1}, Loss:{running_loss/100:.3f})running_loss0.0deftest():model.eval()correct0total0withtorch.no_grad():forimages,labelsintestloader:images,labelsimages.to(device),labels.to(device)outputsmodel(images)_,predictedtorch.max(outputs.data,1)totallabels.size(0)correct(predictedlabels).sum().item()print(fAccuracy on test set:{100*correct/total:.2f}%)# 训练 5 个 epochforepochinrange(5):train(epoch)test()Epoch: 1, Batch: 100, Loss: 1.835 Epoch: 1, Batch: 200, Loss: 1.508 Epoch: 1, Batch: 300, Loss: 1.399 Accuracy on test set: 54.53% Epoch: 2, Batch: 100, Loss: 1.222 Epoch: 2, Batch: 200, Loss: 1.184 Epoch: 2, Batch: 300, Loss: 1.115 Accuracy on test set: 62.45% Epoch: 3, Batch: 100, Loss: 1.020 Epoch: 3, Batch: 200, Loss: 1.008 Epoch: 3, Batch: 300, Loss: 0.986 Accuracy on test set: 65.47% Epoch: 4, Batch: 100, Loss: 0.895 Epoch: 4, Batch: 200, Loss: 0.899 Epoch: 4, Batch: 300, Loss: 0.873 Accuracy on test set: 66.70% Epoch: 5, Batch: 100, Loss: 0.788 Epoch: 5, Batch: 200, Loss: 0.783 Epoch: 5, Batch: 300, Loss: 0.796 Accuracy on test set: 70.19%四、总结本节要点回顾Inception 网络核心思想并行的多尺度特征融合使用不同大小的卷积核1x1、3x3、5x5 池化通过 1x1 卷积降维减少计算量特征融合方式Concat通道拼接逐元素相加残差连接逐元素相乘注意力机制感受野与卷积变体感受野决定了网络能看到的范围空洞卷积可以在不增加参数的情况下扩大感受野浙大疏锦行