简介

语义分割:给图像的每个像素点标注类别。通常认为这个类别与邻近像素类别有关,同时也和这个像素点归属的整体类别有关。利用图像分类的网络结构,可以利用不同层次的特征向量来满足判定需求。现有算法的主要区别是如何提高这些向量的分辨率,以及如何组合这些向量。

几种结构

  • 全卷积网络FCN:上采样提高分割精度,不同特征向量相加。[3]
  • UNET:拼接特征向量;编码-解码结构;采用弹性形变的方式,进行数据增广;用边界加权的损失函数分离接触的细胞。[4]
  • SegNet:记录池化的位置,反池化时恢复。[3]
  • PSPNet:多尺度池化特征向量,上采样后拼接[3]
  • Deeplab:池化跨度为1,然后接带孔卷积。
  • ICNet:多分辨图像输入,综合不同网络生成结果。

实验设计

测试平台

  • 采用[1]的代码,去掉one_hot,把损失函数改成交叉熵。
  • 在验证过程引入pixel accuray和mIOU,代码见[2]
  • 用颜色代码替换标签的类别代码,这样visdom可以显示多类别标签

数据集

  • [1]自带数据集Bag,二分类,图像800800,代码中转换到160160。

    • 这个数据集很容易收敛,可以忽略优化器的影响,用来估计网络结构的性能上限。
  • CamVid,代码见[2],从视频中截取的,图像很相似。图像尺寸960*720。
  • PASCAL VOC 2007/2012,代码参照[3],图像差别大。

测试计划

  • 在github上收集能成功运行的模型
  • 在同等条件下比较技术细节:vgg16为基础结构
    • 比较单层特征向量进行转置卷积、上采样或者反池化后的效果
    • 比较特征向量的拼接和线性组合
    • 比较多尺度输入的网络组合

实验结果

超参数:epochs=50,lr=0.001,optim=SGD,momentum=0.7u

数据集:Bag,resize(160,160),batch_size=4

注意vgg16正确的层号,每层最后一个是池化。

feats = list(models.vgg16(pretrained=True).features.children())
self.feat1 = nn.Sequential(*feats[0:5])
self.feat2 = nn.Sequential(*feats[5:10])
self.feat3 = nn.Sequential(*feats[10:17])
self.feat4 = nn.Sequential(*feats[17:24])
self.feat5 = nn.Sequential(*feats[24:31])

单层特征向量

1*1卷积+标签收缩(到对应层尺寸)

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 90 1.1
4 8 86 93 1.0
3 6 80 90 1.0

1*1卷积+上采样(2倍)+标签收缩

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 72 85 1.1
4->3 6 80 90 1.0
3->2 5 78 88 1.0

1*1卷积+转置卷积(2倍)+标签收缩

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 79 89 1.1
4->3 6 84 92 1.0
3->2 5 80 90 1.0

反池化(2倍)+1*1卷积+标签收缩

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 84 92 1.1
4->3 7 87 94 1.1
3->2 5 84 91 1.0

池化(stride=1)+2*2卷积(stride=1,padding=1)+标签收缩

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5->4 8 84 92 1.1
4->3 7 89 95 1.0
3->2 7 80 90 1.1

多层特征向量组合

  • 理论上,求和是拼接+1*1卷积的一个特例。

上采样(逐层,直到原始尺寸)+1*1卷积+求和(FCN)

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 91 1.2
5+4 8 88 94 1.2
5+4+3 9 88 94 1.2

上采样(逐层,直到原始尺寸)+1*1卷积+拼接(UNET')

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 91 1.2
5+4 9 87 93 1.2
5+4+3 9 89 94 1.1

上采样(直接达到原始尺寸)+1*1卷积+拼接(PSPNET')

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 84 92 1.2
5+4 9 87 93 1.2
5+4+3 8 88 94 1.2

反池化(逐层)+1*1卷积+上采样(SegNet')

网络层 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
5 8 82 91 1.1
5->4 8 88 94 1.1
5->4->3 9 89 95 1.1

附加实验

epochs=100,lr=3e-3

网络 单epoch时间(s) mIOU(%) pixel-acc(%) GPU(G)
PSPNET(反池化) 8 91 96 1.1
PSPNET(池化,stride=1) 9 91 96 1.2

引用

  1. https://github.com/bat67/pytorch-FCN-easiest-demo
  2. https://github.com/pochih/FCN-pytorch
  3. https://github.com/bodokaiser/piwise
  4. https://github.com/jaxony/unet-pytorch/

参考文献

  • Long J , Shelhamer E , Darrell T . Fully Convolutional Networks for Semantic Segmentation[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2014, 39(4):640-651.
  • Ronneberger O, Fischer P, Brox T. U-Net: Convolutional Networks for Biomedical Image Segmentation[C]// International Conference on Medical Image Computing & Computer-assisted Intervention. 2015.
  • Zhao H , Shi J , Qi X , et al. Pyramid Scene Parsing Network[J]. 2016.
  • Chen L C , Papandreou G , Schroff F , et al. Rethinking Atrous Convolution for Semantic Image Segmentation[J]. 2017.
  • Zhao H, Qi X, Shen X, et al. ICNet for Real-Time Semantic Segmentation on High-Resolution Images[J]. 2017.

比较语义分割的几种结构:FCN,UNET,SegNet,PSPNet和Deeplab的更多相关文章

  1. 【Keras】基于SegNet和U-Net的遥感图像语义分割

    上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割,所以刚好又把前段时间做的成果重新 ...

  2. 使用Keras基于RCNN类模型的卫星/遥感地图图像语义分割

    遥感数据集 1. UC Merced Land-Use Data Set 图像像素大小为256*256,总包含21类场景图像,每一类有100张,共2100张. http://weegee.vision ...

  3. 笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)

    图像语义分割的意思就是机器自动分割并识别出图像中的内容,我的理解是抠图- 之前在Faster R-CNN中借用了RPN(region proposal network)选择候选框,但是仅仅是候选框,那 ...

  4. 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet,语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类;目标检测只有两类,目标和非目标,就是在一张图片中找到并用box标注出所有的目标.

    from:https://blog.csdn.net/u012931582/article/details/70314859 2017年04月21日 14:54:10 阅读数:4369 前言 在这里, ...

  5. 基于FCN的图像语义分割

    语义图像分割的目标在于标记图片中每一个像素,并将每一个像素与其表示的类别对应起来.因为会预测图像中的每一个像素,所以一般将这样的任务称为密集预测.(相对地,实例分割模型是另一种不同的模型,该模型可以区 ...

  6. 语义分割--全卷积网络FCN详解

    语义分割--全卷积网络FCN详解   1.FCN概述 CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别). 传统的基于C ...

  7. FCN与U-Net语义分割算法

    FCN与U-Net语义分割算法 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像理解的重要一环,也是 AI 领域中一个重要的分支.语义分割即是对图像中每一 ...

  8. 全卷积网络(FCN)实战:使用FCN实现语义分割

    摘要:FCN对图像进行像素级的分类,从而解决了语义级别的图像分割问题. 本文分享自华为云社区<全卷积网络(FCN)实战:使用FCN实现语义分割>,作者: AI浩. FCN对图像进行像素级的 ...

  9. 人工智能必须要知道的语义分割模型:DeepLabv3+

    图像分割是计算机视觉中除了分类和检测外的另一项基本任务,它意味着要将图片根据内容分割成不同的块.相比图像分类和检测,分割是一项更精细的工作,因为需要对每个像素点分类,如下图的街景分割,由于对每个像素点 ...

随机推荐

  1. P2245 星际导航

    题目描述 sideman 做好了回到 Gliese星球的硬件准备,但是 sideman 的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有 N 个顶点和 M 条边的带权无向图,顶点表示 ...

  2. 为什么会有object这么一个根基类

    先问一个问题,为什么需要有一个统一的基类:Object?甚至,我们在编程语言中也常常见到这种模式,比如Java中的object.C#的object,甚至一些纯对象的脚本语言(Ruby里连数字123都是 ...

  3. java基础 三 概念和java程序的结构.

    一.java的一些概念: JRE(java  runtime environment):java程序运行环境,如果要运行java程序,需要jre支持.jre里包含jvm JDK(java  devel ...

  4. 469 B. Intercepted Message

    http://codeforces.com/problemset/problem/950/B Hacker Zhorik wants to decipher two secret messages h ...

  5. VUE 生命周期 详解

    beforeCreate vue中的第一个生命周期,在vue实列被完全创建出来之前会执行.注意:在beforeCreate生命周期函数执行时,data.methods.中的数据都还没有初始化. cra ...

  6. MySql优化分析

    原理 MYSQL逻辑分层 :连接层 服务层 引擎层 存储层 InnoDB(默认) :事务优先 (适合高并发操作:行锁) MyISAM :性能优先 (表锁) SQL优化 编写过程: sql select ...

  7. jQuery----选择器(重点是层次选择器)

    基本选择器 1.id选择器  ---------------------------->根据id来获取,只有一个.---------------------------------------- ...

  8. struts2第二天——数据操作

    先介绍一下大致内容: 大致内容: 结果页面配置 action获取表单提交数据 提供获取表单数据的方式(封装数据) 表单数据封装到集合中 表达式封装和模型驱动封装比较 一.结果页面配置: result标 ...

  9. Noip前的大抱佛脚----动态规划

    目录 动态规划 序列DP 背包问题 状态压缩以及拆分数 期望概率DP 马尔可夫过程 一类生成树计数问题 平方计数 动态规划 序列DP 有些问题: 求长度为\(l\)的上升子序列个数 形如一个值域的前缀 ...

  10. 柯朗微积分与数学分析习题选解(1.2 节 d)

    一直在读<陶哲轩实分析>,陶的书非常的严谨,环环相扣,但是也有个缺点就是计算性的例子和应用方面的例子太少了.所以就又找了本柯朗的<微积分与数学分析>搭配着看.柯朗的书的习题与陶 ...