不过故事到此还没有结束,人类对于算法精度的要求是永无止境的,计算机对图像内容的理解可以从一开始整幅图像给出一个语义标签(图像分类),进步到画出图中出现的物体位置。
再进一步,人们就自然渴望能够让计算机理解图像中的每一个像素点的语义信息,从而让计算机像人一样去看图像,这就是图像语义分割。
图像语义分割是什么
区别于图像分类与物体检测,图像语义分割的目标是给图像中的每一个像素点都标注一个标签,简单理解就是要把图像中所包含的每个类别都不多不少的从原图中标注出来。
这个过程就像是我们用PS抠图一样,需要尽可能的贴合每个物体的边框,从而让计算机对图像实现像素级的理解。随之而来的,是问题的难度也上升了一个量级,同时标注数据的难度也随之提升。
传统的语义分割方法
从问题定义可以看到,解决分割问题用途极广。从帮助修图师们精确美图,到辅助无人驾驶汽车准确的理解前方障碍,它都可以助我们一臂之力。既然这并非一个新问题,下面就先列举一些传统的解决方法:
1、阈值法。阈值法的目标是将一个灰度图像转换为一个前背景分离的二值图像。
这种方法首先简化问题,假设灰度图中仅包含两个主要类别,前景物体(蜘蛛)+背景图像,然后通过平衡图像统计直方图的方式,试图找到一个很好的像素阈值,将图像中所有点区分到这两类中去。大于阈值的点是物体,反之则为背景。
2、使用像素聚类的方法。聚类方法假设图像中有K个类别(K为参数),采用迭代聚类的方式(例如使用K-means聚类)将图像中每个像素点分类。
具体过程为,首先选取K个中心点,然后按照每个像素点与这K个像素的差别大小,将图像的所有点分配到这K个中心,之后重新计算每个类中心,并按照上述步骤迭代优化,从而将图像中的所有像素分为K个类别。
3、使用图像边缘分割的方法。图像边缘检测本身作为一个视觉问题,受到学界的广泛关注。它通常的做法是使用一个模版(边缘检测算子)扫描全图得到边缘图像。
而使用边缘的图像分割方法,顾名思义,就是利用所提取到的边缘信息,将图像中的不同区域分割出来。
4、使用区域生成的方法。区域增长方法是根据同一物体局部区域内像素具有相似性来聚集像素点的方法。它从初始区域开始,将相邻的像素归并到一起,这个过程彷佛一个种子生成起来一般,因此命名为区域生长。
深度学习方法做图像分割
在深度学习兴起之后,语义分割这个传统问题也被它收至麾下。这时对图像的处理过程类似于深度学习处理图像分类时的做法,而关键的区别点在于网络的最终输出不再是一个类别向量,而是一幅与原图尺寸大小一致的图像。
在之前神经网络表示图像的过程中,我们看到在不同的网络深度上,特征图像的尺寸是被逐步减小的。因此我们就需要一个操作,可以把图像由小放大还原为输入大小,这个操作就是反卷积操作。
1、反卷积操作。简单来说,它就是把卷积操作反过来处理,在神经网络结构的正向和反向传播中做与卷积操作相反的运算。反卷积(Deconvolution)还有很多其他的叫法,如后卷积,转置卷积等。
反卷积的过程是用一个固定模版扫描输入图像得到输出。区别于卷积扫描的地方在于,它的输入输出关系恰好与卷积操作相反。
2、网络结构。理解了反卷积操作,我们就可以使用它来处理深度卷积网络的图像表示,将本来由卷积层缩小的特征图像,通过反卷积一层层的放大回去,最终得到一个同比于原图大小的分割图像作为输出,此时输出图像中每一个点的数值,就作为对应原图中该像素点的图像标签,从而完成图像的语义分割。
至此,关于计算机如何转换图像内容到语义信息的算法介绍暂时告一段落,感谢你的阅读。
领取专属 10元无门槛券
私享最新 技术干货