当前位置:网站首页 > R语言数据分析 > 正文

resnet18网络结构代码(resnet网络结构详解)



在上一篇博文中,我们对Detect-and-Track论文源码中模型构建部分进行了代码梳理,此篇博文我们对其采用的主干网络ResNet18进行详细分析。


目录

一、ResNet简单回顾

二、3D Mask R-CNN代码实现(/lib/modeling/ResNet3D.py)

三、一些疑问


直观来讲,ResNet实现了深层神经网络,就代码应用而言,我们首先要掌握两幅图。首先是ResNet的两种block:building block和“bottleneck” building block:

resnet代码开源 resnet18代码详解_Caffe2源代码

左侧的block:64通道的feature map经过3*3卷积后,通道依然是64,再通过Relu函数。再进行一次64—>64的3*3卷积。此时加上64个通道的“Shortcut”,再过Relu函数。

右侧的bottleneck:256通道的feature map经过1*1卷积后,通道数变为64(不明白具体操作步骤的建议看此篇博文:【彻底掌握卷积计算】),再过Relu函数。进行64—>64的3*3卷积,过Relu函数。再通过1*1卷积由64通道变为256通道。与Shortcut求和后通过Relu函数。

可以看到,bottleneck的通道数发生了:256—64—64—256的变化,其目的是降低网络的参数。掌握了这两个block,我们可以观察ResNet论文中搭出来的几个ImageNet框架:

resnet代码开源 resnet18代码详解_resnet代码开源_02

以18-layer为例:

Conv1:用(7*7,64通道,2步长)对图片进行卷积,得到112*112*64的输出。

Conv2_x:先进行3*3最大池化。其中的x指的是block过程,在这里是2,意思是有两个block过程:Conv2_1和Conv2_2。这两个过程内容相同,进行3*3的64通道卷积。

Conv3_x、Conv4_x、Conv5_x:与第二阶段相同,用简单的buliding bock搭建两阶段网络。可以观察到feature map越来越小,通道数越来越多(特征图越来越厚)。

Fc:经过平均池化后,由全连接层映射到1000维,再由softmax转化为概率,进行分类。

而后三列与前三列相似,不过是将block换为了bottleneck,还增加了bottleneck数量。以50-layer中的Conv2_x为例,其中包含3个bottleneck,每个bottleneck内部都进行了256—64—64—256的通道变化。

最后一行展现了FLOPs(每秒浮点运算次数)。可以发现由于bottleneck的存在,50层和34层的参数相差无几。


代码中,ResNet18里所有的buliding bock被替换为了bottleneck bock,这点与ResNet论文中原结构不同。同时扩展为了3D版本:ResNet3D。

在 1.模型构建梳理 中的build_generic_fast_rcnn_model()第28行,调用了ResNet函数:

现在开始分析ResNet构建过程,首先看ResNet18主体函数:

定位到add_ResNet_convX_body函数,其实这个conv后面的X可以选为4和5,即最后一个阶段conv5可以省去。这里用的conv4。

在第二个阶段停止了梯度传播,至今不知道为什么……。此函数中最重要的就是add_stage函数了,这个函数直接为网络添加bottleneck block。再定位到add_stage函数,此函数用了一个循环来创建block,循环次数是用n来决定的,n都是2。

add_stage 函数创建了每一个Stage,每个Stage里包含了两个block。具体的block是通过add_bottleneck_block()构建的。

此函数使用globals()的方法调用了bottleneck_transformation()函数来构建一个block,然后将block的卷积路径结果与shortcut结果求和。定位到bottleneck_transformation():

哈哈哈,我们终于找到了最最核心、最最基本的bottleneck核心。通过它自己的注释我们就可以发现:conv 1x1、conv 3x3、conv 1x1这样的基本操作。

当然还有一个shortcut的函数:

至此,3D版本的ResNet18顺藤摸瓜完毕,整个构建过程一环套一环,思路总算清晰了。


1. 为什么要将第二阶段的梯度停掉?

2. 3D卷积部分的张量是怎么样变换的?

欢迎讨论!

到此这篇resnet18网络结构代码(resnet网络结构详解)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • Rknn3588开机自动启动qt(Rknn3588开机自动启动qt)2025-03-16 08:09:08
  • hrnet group招聘(hr head 招聘)2025-03-16 08:09:08
  • treeagepro破解版(treeagepro2019破解版)2025-03-16 08:09:08
  • mha-al00是华为手机的什么型号(art-al00m华为什么型号手机)2025-03-16 08:09:08
  • chronyc -a makestep不生效(chronyc -a makestep不生效 etc权限)2025-03-16 08:09:08
  • nowcoder什么意思(nowar什么意思)2025-03-16 08:09:08
  • 485报文分析软件(rs485报文)2025-03-16 08:09:08
  • rasie和rise的区别(rise和raise的差别)2025-03-16 08:09:08
  • you raseme up什么意思(you raise me up的中文是什么)2025-03-16 08:09:08
  • romp怎么读(rom怎么读音发音)2025-03-16 08:09:08
  • 全屏图片