建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
093454tjmehwgqrskef4if.jpg 文字识别 百万调用 1元包年 2020年华为云AI实战营 华为云普惠AI

柯宝闪耀其中

发帖: 2粉丝: 0

级别 : 新手上路

发消息 + 关注

发表于2020-6-24 18:33:53 1740 7
直达本楼层的链接
楼主
显示全部楼层
[技术交流] 语义分割-ICNet介绍+ModelArts下ICNet复现

ICNet 论文

ICNet简介

ICNet是一个基于PSPNet的实时语义分割网络,设计目的是减少PSPNet推断时期的耗时,论文对PSPNet做了深入分析,在PSPNet的基础上引入级联特征融合模块,实现快速且高质量的分割模型。论文报告了在Cityscape上的表现.

image.png


可以看到,许多高质量的分割模型的推理速度远远达不到实时要求。本文的目的是在不牺牲过多分割质量的前提下提高模型推理速度,达到实时要求。本文是在PSPNet的基础上,找了一个accuracy和speed上的平衡点。

论文的主要贡献在于:

- 综合低分辨率图像的处理速度和高分辨率图像的推断质量,提出图像级联框架逐步细化分割预测

- 本文提出的ICNet达到了5x以上的加速,并减少了5x倍以上的内存消耗

- ICNet可以在1024×20481024×20481024×2048分辨率下保持30fps运行

提速方向

- 图像分辨率提升,计算量明显增加

- 网络的厚度越大速度越慢(输入图像通道数越多速度越慢)

- 核数量越多速度越慢(输出图像通道数越多速度越慢

网络结构

根据上述时间预算分析,我们在实验中采用直观的加速策略,包括降采样输入图像、缩小特征图和进行模型压缩。但是效果都不好。

- 降采样输入图像:降低输入图分辨率能大幅度的加速,但同时会让预测结果非常粗糙

- 缩小特征图:降低下采样可以加速,但同时会降低准确率,此外,即使在1:32的比例下得到最小的特征映射,系统仍然需要131 ms推理

- 压缩模型:压缩训练好的模型,但效果不佳。即使只保留四分之一的核,推理时间仍然太长;相应的分割结果也十分糟糕结果表明,在推理精度和速度之间很难保持很好的平衡

image.png

它使用了级联的图像输入(即低、中、高分辨率图像),采用了级联的特征融合单元,训练时使用了级联的标签监督。

新的架构如图2所示。全分辨率的输入图像,下采样2倍和4倍后,形成级联输入的中分辨率和低分辨率分支


分支 过程 耗时
低分辨率 在中分辨率的1/16输出的基础上,再缩放到1/32.经过卷积后,然后使用几个dilated convolution扩展接受野但不缩小尺寸,最终以原图的1/32大小输出feature map 虽然层数较多,但是分辨率低,速度快,且与分支二共享一部分权重
中分辨率 以原图的1/2的分辨率作为输入,经过卷积后以1/8缩放,得到原图的1/16大小feature map,再将低分辨率分支的输出feature map通过CFF(cascade feature fusion)单元相融合得到最终输出。值得注意的是:低分辨率和中分辨率的卷积参数是共享的 有17个卷积层,与分支一共享一部分权重,与分支一一起一共耗时6ms
高分辨率 原图输入,经过卷积后以1/8缩放,得到原图的1/8大小的feature map,再将中分辨率处理后的输出通过CFF单元融合 有3个卷积层,虽然分辨率高,因为少,耗时为9ms

低分辨率分支来获取语义信息,将原图1/4大小的图像输入到PSPNet中,降采样率为8,产生了原图1/32的特征图。中分辨率和高分辨率的分支进行粗糙预测的恢复和细化,中部和底部分支,获得高质量的分割,可以减少中部分支和下部分支的参数数目。虽然最上面的分支导致了细节缺失和边界模糊,但它已经获得了大部分语义信息。高分辨率分支采用轻加权的CNNs(绿色虚线框,底部分支和中部分支);不同分支输出的特征图采用级联特征融合单元进行融合,训练时接受梯级标签监督。

复现

Github

ICNet Tensorflow

ModelArts上实现

整体的程序框架如下图所示:

截屏2020-06-24 18.31.17.png

基于此,我们需要对demo文件进行一定的修改,以适配ModelArts开发方式。

import numpy as np
import cv2
import matplotlib.pyplot as plt
import moxing as mox
mox.file.shift('os', 'mox')
from utils.config import Config
from model import ICNet, ICNet_BN
model_config = {'train': ICNet, 'trainval': ICNet, 'train_bn': ICNet_BN, 'trainval_bn': ICNet_BN, 'others': ICNet_BN}
# Choose dataset here, but remember to use `script/downlaod_weight.py` first
dataset = 'cityscapes'
filter_scale = 1
class InferenceConfig(Config):
    def __init__(self, dataset, is_training, filter_scale):
        Config.__init__(self, dataset, is_training, filter_scale)
    # You can choose different model here, see "model_config" dictionary. If you choose "others",
    # it means that you use self-trained model, you need to change "filter_scale" to 2.
    model_type = 'trainval'
    # Set pre-trained weights here (You can download weight from Google Drive)
    model_weight = './model/cityscapes/icnet_cityscapes_trainval_90k.npy'
    # Define default input size here
    INFER_SIZE = (1024, 2048, 3)
cfg = InferenceConfig(dataset, is_training=False, filter_scale=filter_scale)
cfg.display()
# Create graph here
model = model_config[cfg.model_type]
net = model(cfg=cfg, mode='inference')
# Create session & restore weight!
net.create_session()
net.restore(cfg.model_weight)
im1 = cv2.imread('./data/input/1.png')
if im1.shape != cfg.INFER_SIZE:
    im1 = cv2.resize(im1, (cfg.INFER_SIZE[1], cfg.INFER_SIZE[0]))
print(type(im1))
results1 = net.predict(im1)
overlap_results1 = 0.5 * im1 + 0.5 * results1[0]
vis_im1 = np.concatenate([im1/255.0, results1[0]/255.0, overlap_results1/255.0], axis=1)
# fig=plt.gcf()
# plt.figure(figsize=(20, 15))
# plt.imshow(vis_im1)
# fig.savefig('/tmp/666.png')
# mox.file.copy('/tmp/666.png', 'obs://semanticsch/ICNet-tensorflow/data/output/666.png')
# plt.show()
plt.figure(figsize=(20, 15))
plt.imshow(vis_im1)
plt.savefig('/tmp/666.png')
#fig.savefig('/tmp/666.png')
mox.file.copy('/tmp/666.png', 'obs://semanticsch/ICNet-tensorflow/data/output/666.png')
plt.show()

效果图

截屏2020-06-24 18.33.11.png


举报
分享

分享文章到朋友圈

分享文章到微博

AI学习者

发帖: 37粉丝: 1

级别 : 注册会员

发消息 + 关注

发表于2020-6-25 17:00:11
直达本楼层的链接
沙发
显示全部楼层

很好的分享

点赞 评论 引用 举报

找虫虫

发帖: 0粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020-6-26 07:43:31
直达本楼层的链接
板凳
显示全部楼层

很好的分享

点赞 评论 引用 举报

人生的旅途

发帖: 4粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020-6-26 07:46:54
直达本楼层的链接
地板
显示全部楼层

感谢分享!

点赞 评论 引用 举报

AI从业者

发帖: 0粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020-6-26 07:51:35
直达本楼层的链接
5#
显示全部楼层

感谢分享

点赞 评论 引用 举报

sudo rm -rf /*

发帖: 6粉丝: 0

级别 : 中级会员

发消息 + 关注

发表于2020-6-26 07:59:05
直达本楼层的链接
6#
显示全部楼层

哎呦,不错哦!

点赞 评论 引用 举报

玉米男孩

发帖: 0粉丝: 0

级别 : 注册会员

发消息 + 关注

发表于2020-6-26 08:02:27
直达本楼层的链接
7#
显示全部楼层

厉害了,点赞!

点赞 评论 引用 举报

G-washington

发帖: 257粉丝: 76

级别 : 外部版主

发消息 + 关注

发表于2020-6-26 22:40:45
直达本楼层的链接
8#
显示全部楼层

感谢分享

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册