实时语义分割--ICNet for Real-Time Semantic Segmentation on High-Resolution Images

本文主要是介绍实时语义分割--ICNet for Real-Time Semantic Segmentation on High-Resolution Images,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

github代码:https://github.com/hszhao/ICNet

语义分割算法精度和速度对比:

这里写图片描述
由图可以看出,ResNet38,PSPNet,DUC精度虽然较高,但是无法速度相对较慢,无法达到实时,ENet速度较快,但精度较低,而本文算法既可以达到实时,精度也相对较高.

Speed Analysis

PSPNet50的处理不同大小的输入图像所需时间:

这里写图片描述

图中,stage5的卷积核个数为stage4的两倍,由图可知,当输入图像尺寸增加时,卷积核越多,时间增长程度越大,运行时间与输入图像大小成正比.

加速方案

文章分别分析了三种可行的加速方案的可行性.

方案(1):输入下采样

这里写图片描述

如图3所示,下采样尺度为0.25,时间较少,但是得到的f分类结果太粗略,很多小的,重要的细节没有分类出来;尺度为0.5时,相对能分类出更多的物体,但是远处的人和交通等仍然没有分类出来;而且需要时间太多,无法达到实时.因此考虑方案(2).

方案(2):特征下采样

除了直接对输入图像下采样,另一种直接的方法是对feature map下采样.文献19的FCN网络对feature map下采样32次,DeepLab(文献2) 8次.为了验证特征下采样效果,测试下采样率分别为1:8,1:16,1:32次的效果,如表1.

这里写图片描述

然而,采样率为1:32时,时间仍需要131ms,仍然无法实时.

方案(3):模型压缩(Model Compression)

采用文献13的模型压缩方案,对于每个滤波器,首先计算滤波核权重weights的L1的和;然后,对L1和进行降序排序,仅保留前k个更有意义的值.试验对比如表2所示.

这里写图片描述

虽然仅仅保留了一部分核权值,如Rates为0.25时,运行时间仍然需要72ms,时间仍然太长,而且精度下降很多.

ICNet

以上分析证明,要设计实际的实时分割网络是非常困难的,采用下采样输入图像虽然可以减小运行时间,但预测结果会丢失很多细节信息,直接输入图像,又需要很多运行时间.因此本文提出图像级联网络(Image Cascade Network,ICNet),ICNet网络结构如下:

这里写图片描述

网络输入从上到下,分别为三个尺度的下采样图像,scale值分别为1/4,1/2,1,分别定义为Low Resolution,Median Resolution,High Resolution(低分辨率,中分辨率,高分辨率)图像.

Low Resolution

分支1,如图4中,第一行,低分辨率图像输入到一个FCN-based PSPNet 结构,网络输出为原始输入的1/32大小的feature maps.

Median Resolution

分支2,如图4中,第二行,低分辨率图像输入到3个卷积层,downsampling rate 8,网络输出为原始输入的1/16大小的feature maps.1/16的feature maps和1/32的feature maps通过CFF(cascade feature fusion)单元聚合,得到输出为1/16的feature map.

High Resolution

分支3,如图4中,第二行,低分辨率图像输入到3个卷积层(卷积核为 3×3 ,stride=2),downsampling rate 8,网络输出为原始输入的1/8大小的feature maps.1/8的feature maps和1/16的feature maps通过CFF(cascade feature fusion)单元聚合,得到输出为1/8的feature map.

在训练的时候,在每个分支中,引入不同分辨率的真实label图像,即辅助学习策略,并在测试的时候去掉这些模块.

CFF(cascade feature fusion)

CFF模块结构如下:

这里写图片描述

图中,F1,F2分别为输入feature maps,且F2大小为F1的两倍.LABEL为ground truth label.首先对F1 upsampling到与F2同样大小,再对其进行dilated convolution,卷积核为 3×3 ,dilations=1,并将输出值与F2 sum,relu,得到输出特征 F2 .为了增强学习过程,引入辅助学习,辅助loss权重为0.4.

训练

整体损失函数为:

这里写图片描述

这篇关于实时语义分割--ICNet for Real-Time Semantic Segmentation on High-Resolution Images的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079412

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真