什么是语义分割?
大多数深度学习和计算机视觉大家庭中的人都知道什么是图像分类:我们想让我们的模型告诉我们,图片中存在的单个物体或场景是什么。分类是一种非常模糊和高层次的任务。
很多人同样对目标检测很熟悉:我们尝试定位和分类图像中的多个物体,手段就是在它们周围画出范围框,并对框内的东西进行分类。检测是一种中层次的任务,我们可以得到一些很有用的细节信息,但由于我们只是画出检测框而没有得到物体的准确形状,所以还是略显粗糙。
语义分割是这三者中信息量最大的,我们对图片中的每一个像素都进行分类,就像你在上方的动态图中看到的那样!最近几年,这些完全是基于深度学习完成的。
在这篇简介中,你将会学到语义分割模型的基本结构和功能,以及最新最棒的高水平成果。
如果你想要自己试一试这些模型,你可以登陆我的语义分割程序组,对于很多这篇指南中出现的模型,那里有我用 TensorFlow 实现的训练和测试!
GeorgeSeif/Semantic-Segmentation-Suite
Semantic Segmentation Suite in TensorFlow. Implement, train, and test new Semantic Segmentation models easily! …http://github.com
基本结构
我将要向你展示的语义分割模型的基本结构在所有的顶尖工作中都存在。这使得实现不同的模型变得异常简单,因为他们几乎全部都有着相同的骨架、构造方法和构造流程。
U-Net 模型可以对这个结构给出很好的阐释。模型左侧表示了任何训练出来可为图片分类任务提取特征的网络。包括了VGGNet, ResNets, DenseNets, MobileNets,和 NASNets!这里你几乎可以用任何你想用的结构。在选择你的用以特征提取的分类网络时,你心中的主要参考指标是网络的均衡。使用一个很深的 ResNet152 可以为你提供很高的准确度,速度却不及 MobileNet。这些在图像分类任务中出现的折衷因素在语义分割中同样存在。你需要记住一个重要的事实:这些骨架将是你设计/选择你的语义分割网络时的主要驱动力,我再强调也不为过。
用于语义分割的 U-Net
特征被提取出来后将在不同的大小被处理,原因有二。首先,你的模型很可能遇到很多不同大小的物体;在不同的尺寸中处理特征图将赋予网络处理不同大小物体的能力。