实时语义分割--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中isnull,ifnull,nullif的用法及语义详解

《Mysql中isnull,ifnull,nullif的用法及语义详解》MySQL中ISNULL判断表达式是否为NULL,IFNULL替换NULL值为指定值,NULLIF在表达式相等时返回NULL,用... 目录mysql中isnull,ifnull,nullif的用法1. ISNULL(expr) → 判

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时