目标检测 | Ladder-style DenseNet 算法笔记

本文提出一种基于DenseNet的梯形结构用于大图像语义分割。该结构建模能力高、上行采样数据通路精简,能减少特征映射缓存范围。文中分析了DenseNet优点、架构等,比较了ResNets和DenseNets,介绍了网络架构及梯度检查点方法,实验结果显示算法精度高、速度快、参数少。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Efficient Ladder-style DenseNets for Semantic Segmentation of Large Images

会议: CVPR 2019

标题:《Efficient Ladder-style DenseNets for Semantic Segmentation of Large Images》

论文链接: https://arxiv.org/abs/1905.05661v1

本文仅作为个人学习笔记分享,图片来自于论文,如有侵权,请联系删除。

摘要

深度图像分类模型的最新进展为提高计算机视觉相关任务的性能提供了巨大的潜力。然而,当代GPU的内存严格限制阻碍了向语义分割的过渡。即使对于中等大小的Pascal VOC图像,卷积后向图所需的功能图缓存的范围也带来了重大挑战,同时当源分辨率在百万像素范围内时,需要仔细考虑体系结构。为了解决这些问题,我们提出了一种新的基于DenseNet的梯形结构,它具有高建模能力和非常精简的上行采样数据通路。我们还建议通过利用DenseNet特征抽取器固有的空间效率,大幅度减少特征映射缓存的范围。与竞争性方法相比,由此产生的模型提供的高性能和更少的参数,并允许在硬件上以百万像素分辨率进行训练。在城市景观、Pascal VOC 2012、Camvid和Rob 2018数据集的预测精度和执行速度方面,所呈现的实验结果优于最先进水平。源代码将在文章发布时公布。

Ladder-style DenseNet 特点

  1. 提出了一种新的基于DenseNet的梯形结构,它具有高建模能力和非常精简的上行采样数据通路
  2. 训练时需要硬件内存小,通过利用DenseNet特征抽取器固有的空间效率,大幅度减少特征映射缓存的范围,由此产生的模型性能高且参数少,可以在硬件上进行百万像素分辨率图像的训练。

DenseNet

Densenet的四大优点:

• 缓解梯度消失问题
• 增强特征传播
• 促进特征再用
• 大大减少了参数的数量

Densenet 网络架构分析

为了确保网络中各层之间的最大信息流,在Dense block中,作者直接将所有层(具有匹配的特征映射大小)连接起来。为了保留前向传播的特性,每个层从前面的所有层获得附加输入,并将其自身的特征映射传递到所有后续层。Dense Block结构示意图如下:
在这里插入图片描述
以上介绍的是densenet结构中的一个DenseBlock例子. dnesenet的总体结构图如下:

在这里插入图片描述

上图中的dense block 结构即是[5层的DenseBlock结构示意图]对应的内容. 由上图可知,此图结构中包含三个DenseBlock。

DenseBlock细节

DenseBlock 输出: xl=Hl([x0,x1, …, xl-1]).
其中,xl代表DenseBlock中第l层输出,x0 ~x l-1代表前面所有层的输出.因此,第l层的输入主要由x0 ~x l-1层的输出组成.其中,第l层的输入特征通道数量为:k0+k*(l-1),k代表growth rate,其代表前l-1层引出k个特征通道进入l层.

Hl()函数主要由以下层级组成:BN+ReLU+Conv(11)+BN+ReLU+Conv(33).其中,Conv(11)层级的引入作者称之为Bottleneck Layers, 其作用是为了减少输入的通道数量.一般Conv(11)卷积后的大小为4k(k为growth rate).

所以,DenseBlock结构中主要有两个超参数,growth rate和Bottleneck,将这两个参数理解清楚基本掌握了DenseBlock结构.

Transition Layers

作者在每两个DenseBlock结构之间引入了Transition Layers概念.为了进一步减少参数量,作者引入了一个Compression概念,用参数theta表示.Transition Layers主要由11卷积和33pooling层组成.Compression主要用1*1卷积降低DenseBlock的输出通道.因此,Compression可以进一步减少参数总量,达到密集网络的效果.

比较ResNets 和 DenseNets

作者详细比较了ResNets与DenseNets(此部分可参考论文原文),认为在拥有相近的网络表达能力的ResNets与DenseNets网络架构中,DenseNets所需要的参数和计算量都相对较小。对于语义分割任务,应以其为基础模块。
在图1中,通过比较各个处理块来说明ResNets和DenseNet体系结构之间的相似性和差异性。我们考虑最广泛应用的变体:DenseNet-BC(瓶颈压缩)和预激活的ResNets瓶颈。
在这里插入图片描述
图1,具有n个单元的预激活的残差模块(a)和相对应的密集连接块(b)。标记的圆对应于卷积单位(f1-fk)、求和(+)和n路连接-concat(n)。所有连接均为三维张量D×H×W,其中D在连接线上方指定(为简单起见,我们假设批量大小为1)。Fin和Fout分别表示处理块输入和输出上的特征图数量。
在这里插入图片描述

表1比较了Resnet-50和Densenet-121中卷积权重的计数。我们发现,Densenet-121在B1块中的参数是Resnet-50的两倍,而在B3块中的关系则相反。最后一个残差块B4容量超过整个Densenet-121。最后,densenet-121的所有参数比resnet50的所有参数少三倍。

网络架构

研究者提出了一种高精度、低内存占用和高执行速度的轻量级语义分割体系结构。该体系结构由两个数据通路组成,这些数据路径由图2中的两个水平轨道指定。下采样数据路径由一个改进的densenet特征提取器和一个轻型空间金字塔池化模块(SPP)组成。特征提取器通过逐渐降低空间分辨率和增加特征图的数量(图2中的上层)将输入图像转换为特征张量F。SPP模块使用上下文信息丰富densenet功能,并创建上下文感知功能C。上采样数据路径将低分辨率功能C转换为高分辨率语义预测(图2中的底部轨道)。这种转换是通过将更深层次的语义与早期层次的精细细节有效地混合来实现的。

在这里插入图片描述
图2中DB代表这Dense Blocks,TD为transition layers,TU为transition-up blocks,f为输出特征图(后面的数字为特征图个数),输出特征图上的x4、x8…x32为下采样倍数,SPP为空间采样池化模块。
可以看出,其最明显的特征是有两个数据路径。
上面的为下采样数据路径,特征图不断缩小。下面为上采样数据路径,并在此进行数据融合。
整个结构宛如梯子,故称梯形风格的(Ladder-style) DenseNets 。

特征提取

DenseNet 特征提取模块包括密集模块(DB)和迁移层(TD)。每个密集块(DB)是卷积单元的串联,而每个卷积单元操作前面所有单元和块输入的串联,详见下采样通路。与最初的DenseNet设计不同,我们将密集块DB3分成两个片段(DB3a和DB3b)。并在它们之间放置一个跨步平均池层(D)。这扩大了DB3a之后所有卷积的接收区域,同时降低了它们的计算复杂度。与扩展过滤相比,这种方法权衡了空间分辨率(稍后我们将使用阶梯式混合进行恢复),从而提高了执行速度并减少了内存占用。尽管新的池化层在ImageNet预训练期间以未看到的方式改变了特征,我们使用原始Densenet模型的ImageNet预训练权重初始化DB3b过滤器。尽管存在这种差异,但微调成功地恢复并实现了竞争的泛化性。特征提取器的结果是将所有DB4单元连接到64×子采样表示F中。

空间金字塔池化(SPP)

空间金字塔池模块(SPP)通过在多个空间网格上用平均池化增加f来广泛捕获上下文信息。我们的SPP模块计划首先将F映射到D/2,其中D表示Densenet特征的维数。然后,得到的张量平均集中在四个行数分别为1行、2行、4行和8行的网格上。网格列的数量根据图像大小进行设置,以便所有单元格都是方形。我们将每个池化张量投影到D/8图上,然后用双线性上采样进行向上采样。将所有结果与投影F连接起来,最后与1×1×D/4卷积混合。生成的上下文感知特征张量C的形状为H/64×W/64×D/4。C的维数小于输入图像维数的48倍(我们假设densenet-121,d=1024)。
我们的SPP模块与[22]中提出的模块有两个不同之处。首先,我们根据输入特征的纵横比调整网格:不管输入图像的形状如何,每个网格单元总是方形面积的平均。其次,为了避免输出维数的增加,我们在池化前降低了输入特征的维数。通过4个双线性上采样

上采样数据通路

上采样通路的作用是恢复由于下采样而丢失的精细细节。该设计基于最小向上过渡(TU)块。TU块的目标是混合空间分辨率相差2倍的两种表示。较小的表示来自上采样数据通路,较大的表示来自通过跳连接的下采样通路。首先通过双线性插值法上采样较小的表示,使两种表示具有相同的分辨率。随后,通过将较大的表示投影到低维空间,这样两种表示就具有了相同的特征图。这平衡了两个数据路径的相对影响,并允许通过简单的求和混合两种表示。然后,我们应用1×1卷积来降低维数(如果需要),最后用3×3卷积来准备特征张量,以便进行后续的混合。混合过程是递归的重复上采样数据通路,从每个密集快的输出中得到跳连。最后一个向上转换模块(TD)从DenseNet中得到logits参数。最后通过4个双线性上采样得到输入分辨率的密集预测。

梯度检查点

语义分割在训练过程中需要大量的内存,特别是在大分辨率的输入图像上。由于GPU内存的限制,这些要求很难实现。例如,大家都知道,小批量的训练可能导致批量统计的不稳定性和较差的学习性能,这个问题不能通过更新累计后向传播来克服,因此这是达到高性能的一个障碍。

使用梯度检查点可以减少与反向传播相关的缓存的范围。主要的思想是告知前向传播只缓存所有激活中仔细选择的一个子集。这些激活随后用于在反向传播期间重新计算非缓存的激活。我们将计算图的显示缓存点成为梯度检查点。两个梯度检查点之间的子图称为检查点段。后向传播迭代所有检查点段,并按如下方式处理它们。首先,从缓存的检查点开始重新计算正向传递激活。第二,通过标准后向传播计算梯度。一旦处理了相应的段,即在继续下一段之前,就释放本地缓存。

我们注意到,分段粒度会影响空间和时间效率。扩大检查点段总是减少前向传播的内存占用。但是,对后向传播内存需求的影响是非常重要的。较大的段因为它们需要重新计算所有需要的激活,并将它们存储在本地缓存中,所以需要更多的内存。在某一点上,我们开始失去前向传播时获得的增益。最好的启发式方法是只检查来自3×3卷积的输出,因为它们是计算量最大的操作。换句话说,我们建议在后向传播期间重新计算词干、所有预测、所有批处理规范和所有连接。实验表明,该方法在前向和后向传播的最大内存分配之间取得了很好的平衡。

建议的检查点策略与前面的论文中的方法相关,后者将大量精力投入到共享内存的显式管理中。这里我们表明,依赖于标准的pytorch内存管理器可以获得类似的结果。我们还表明,通过利用标准的pytorch 模块torch.utils.checkpoint,可以完全避免自定义的后向传播操作。最后,我们建议通过只缓存3×3卷积的输出和输入图像来实现进一步的内存增益。我们通过检查stem、transition down和transitionup块以及整个densenet单元来实现这一点。据我们所知,这是第一个将积极的检查点应用于语义分割领域的描述。

实验结果

作者在主流的语义分割数据库上与基于ResNet的相同结构算法进行了比较,也与其他state-of-the-art进行了比较,验证了该算法精度达到最高的同时,速度快一个数量级,参数也是高精度语义分割算法中最小的(是在Cityscapes数据集上唯一的IoU上80的实时语义分割算法)。
下表2为在Cityscapes数据集验证集上使用与ResNet Blocks的算法的比较,可见在使用Dense Blocks时不仅参数少,计算速度快,而且精度也更高。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
表5为该算法的两个最好模型与state-of-the-art语义分割算法在 Cityscapes 验证集与测试集的结果比较。可见该文算法精度最高,计算量也接近最低水平。

在这里插入图片描述

在这里插入图片描述

图3为上述结果的散点图,该文提出的算法LDN是目前唯一的在Cityscapes数据集上IoU精度超过80的实时语义分割算法!
表6是在CamVid 测试集上与基于ResNet结构的算法结果比较,LDN121依然是精度高、模型小、速度快。
表7是与CamVid测试集上的其他state-of-the-art算法的结果比较,精度依旧是最优秀的。

在这里插入图片描述
在这里插入图片描述
表9是在Pascal VOC 2012 验证集与测试集上的与其他state-of-the-art算法相比的分割结果,依然取得了精度的新突破。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分割结果如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

<think>我们有一个PLC逻辑控制网络需要转换为梯形图。根据用户描述,控制网络包括传送带启停、产品计数检测、机械手触发和复位功能。由于没有提供具体的逻辑控制网络,我们只能根据一般PLC梯形图设计原则进行说明。梯形图是PLC编程的一种图形化语言,它类似于继电器控制电路图,由触点、线圈和功能块组成。基本元素:-常开触点:用“||”表示-常闭触点:用“|/|”表示-线圈:用“()”表示我们将根据功能描述构建梯形图:1.传送带启停控制:通常由启动按钮、停止按钮和自锁电路组成。2.产品计数检测:使用计数器,当传感器检测到产品时计数,达到设定值后触发动作。3.机械手触发:当计数达到要求时,触发机械手动作(如下降、夹取、上升等)。4.复位功能:复位按钮可以复位计数器和机械手状态。假设以下输入输出点:-启动按钮:I0.0-停止按钮:I0.1-传送带电机:Q0.0-产品检测传感器:I0.2-计数器:C0(设定值假设为10)-机械手下降:Q0.1-机械手上升:Q0.2-夹取电磁阀:Q0.3-复位按钮:I0.3我们分步设计梯形图:步骤1:传送带启停控制(典型的起保停电路)网络1:|I0.0|I0.1|Q0.0||----||----|/|-----()--------||||Q0.0||----||------|步骤2:产品计数网络2:|I0.2|C0||----||----------(CTU)-----||(设定值10)||(复位信号I0.3或机械手完成信号)|步骤3:当计数达到时触发机械手动作(假设使用一个中间继电器M0.0来触发机械手动作序列)网络3:|C0|M0.0||----||----------()--------|步骤4:机械手动作控制(这里以简单的顺序控制为例,实际可能更复杂)假设机械手动作顺序:下降->夹紧->上升->松开(回到原位)我们可以使用置位和复位指令,或者使用顺序功能图(SFC)。但梯形图中常用多个网络实现。网络4:下降(当M0.0为ON且机械手在原点时下降,用限位开关检测原点,假设原点信号I0.4)|M0.0|I0.4|Q0.2|Q0.1||----||----||----|/|---------()--------|说明:当M0.0接通,机械手在原点(I0.4)且没有上升(Q0.2断开)时,下降(Q0.1)动作。网络5:下降到位(假设下降到位信号I0.5)后夹紧|I0.5|Q0.3||----||----------()--------|网络6:夹紧后(假设夹紧完成有信号,这里用定时器T0模拟夹紧时间)上升|Q0.3|T0|Q0.2||----||----------(TON)-------()--------||(设定值2秒)|同时,在夹紧后需要复位下降:|Q0.3|Q0.1||----||----------(/)--------|网络7:上升到位(假设上升到位信号I0.4,即回到原点)后松开|I0.4|Q0.3||----||----------(/)--------|同时,当上升到位后,复位上升:|I0.4|Q0.2||----||----------(/)--------|步骤5:复位功能复位按钮I0.3用于复位计数器C0,同时复位机械手动作(如果正在动作中,需要停止,并回到原位?)但通常复位按钮要求机械手回到原位,这里我们的设计是机械手动作完成后会自动回到原位并松开。所以复位按钮主要复位计数器。网络8:|I0.3|C0||----||----------(RES)------|注意:以上设计仅为示例,实际控制中机械手动作可能需要更严谨的互锁和顺序控制。由于我们无法绘制图形,这里用文本描述梯形图结构。因此,转换为梯形图表示方法就是按照上述逻辑用梯形图符号绘制出来。用户如果需要更具体的转换,应提供原始的逻辑控制网络(如语句表、功能块图或文字描述的控制逻辑)。根据引用[3]中的控制要求,我们还可以看到有手动、单步和自动模式,但用户问题中未提及,所以这里只按自动控制设计。如果用户提供的逻辑控制网络有具体细节,我们可以进一步调整。</think>### PLC逻辑控制网络转换为梯形图的步骤 根据您描述的控制功能(传送带启停、产品计数检测、机械手触发和复位),以下是转换为梯形图的标准方法及核心设计原则: --- ### 一、梯形图设计基础 1. **I/O分配原则**(引用[1]) - 输入设备:启动按钮(I0.0)、停止按钮(I0.1)、产品传感器(I0.2)、复位按钮(I0.3) - 输出设备:传送带电机(Q0.0)、机械手抓取(Q0.1)、机械手复位(Q0.2) - 辅助元件:计数器(C0)、中间继电器(M0.0) 2. **PLC工作周期**(引用[4]) 梯形图执行遵循“输入扫描→程序执行→输出刷新”的循环扫描机制,需确保逻辑时序匹配物理过程。 --- ### 二、梯形图分步实现 #### 1. 传送带启停控制(起保停电路) ```ladder 网络1: | I0.0 | I0.1 | Q0.0 | |----| |----|/|-----( )--------| // 启动按钮常开,停止按钮常闭 | | | Q0.0 | // 自锁保持 |----| |------| ``` > **功能**:按下I0.0启动传送带,Q0.0自锁;按下I0.1断开自锁。 #### 2. 产品计数检测 ```ladder 网络2: | I0.2 | C0 | |----| |----------(CTU)-----| // 传感器触发计数器加1 | (预设值10)| | I0.3 |----(RES)-----| // 复位按钮清零计数器 ``` > **说明**:每检测一个产品(I0.2上升沿),计数器C0+1;满10个时C0触点接通。 #### 3. 机械手触发控制 ```ladder 网络3: | C0 | T37 | Q0.1 | |----| |----|/|-----( )--------| // 计数满时触发抓取 | | | Q0.1 |----(TON T37 3s) // 抓取保持3秒(定时器T37) |----| |------| ``` > **动作时序**:C0=1 → Q0.1抓取 → T37计时3秒 → 自动松开。 #### 4. 复位功能 ```ladder 网络4: | I0.3 | Q0.2 | |----| |----------( )--------| // 手动复位机械手 | I0.3 | C0 | |----| |----------(RES)------| // 同时清零计数器 ``` > **联动**:复位按钮(I0.3)同时复位机械手位置和计数器。 --- ### 三、完整梯形图结构 ```ladder |-------[网络1:传送带控制]-------| | I0.0 | I0.1 | Q0.0 | |----| |----|/|-----( )--------| | | Q0.0 | | | |----| |------| | | |-------[网络2:产品计数]----------| | I0.2 | C0 (预设10)| |----| |----------(CTU)-------------| | I0.3 |----(RES)-----------------| | |-------[网络3:机械手触发]--------| | C0 | T37 | Q0.1 | |----| |----|/|-----( )--------| | | Q0.1 |----(TON T37 3s)| | |----| |------| | | |-------[网络4:复位功能]----------| | I0.3 | Q0.2 | | |----| |----------( )--------| | | I0.3 | C0 | | |----| |----------(RES)------| | ``` --- ### 四、关键设计要点 1. **互锁保护**(引用[3]) 若需防止机械手动作时传送带启动,需增加互锁: ```ladder | Q0.1 | Q0.2 | I0.1 | Q0.0 | |----|/|----|/|----|/|-----( )--------| ``` 2. **扫描周期优化** 计数器(C0)和定时器(T37)需放在触发逻辑后,避免时序错误[^4]。 3. **调试建议** - 模拟调试:用开关模拟I0.2传感器信号(引用[1]) - 强制监控:通过PLC软件实时监控C0和Q0.1状态(引用[2]) > 完整程序需结合具体PLC型号(如西门子S7-200或三菱FX系列)调整指令格式。 --- ### 注意事项 - **变量命名规范**:使用`M0.0`等中间继电器简化复杂逻辑 - **物理安全**:急停信号需直接硬接线,不依赖梯形图(引用[3]) - **扩展性**:若需触摸屏控制,添加`HMI_Start`等软元件(引用[3])
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值