卷积神经网络的Python实现
上QQ阅读APP看书,第一时间看更新

1.4 图像分类

人类每时每刻都在进行图像分类,对人类来说,图像分类“简单”到甚至察觉不到。走在街道上,你要判断路上的车辆、行人、红绿灯、道路和人行横道等。

图像分类是指:对于一幅给定的图像,模型需要判定它属于所给定的类别中的哪一个,如一幅图像属于集合{卡车,公交车,私家车,货车}中4类的概率分别是多少。这个任务对人类看似很简单,却一直是计算机视觉的一个核心和难点问题。图像分类应用很广泛,计算机视觉的很多问题(如物体检测、图像分割)的基础都是图像分类。

1.计算机“看到”的图像是什么

计算机“看”不到图像的内容,对它而言,图像是巨大的数值矩阵,矩阵元素表示像素的颜色信息。例如,某幅图像分辨率为1280× 720,表示图像有1280×720个像素点,则存储为1280×720的矩阵。对于彩色图像,每个像素点有红、绿、蓝(RGB)3个颜色的通道值,每个值在0(黑)到255(白)之间;对于灰度图像,每个像素点有亮度1个通道值,每个值也在0到255之间。计算机只能根据“看到”的这个数值矩阵去判定图像内容,采用 H×W×C表示图像,其中 H是图像高度,W是宽度,C是通道数。

2.图像分类的挑战

图像分类对人类很简单,但对计算机而言,会面临诸多困难,主要有如下几点。

视角变化:摄像机可以从多个角度拍摄同一个物体,不同角度的图像内容不同。

大小变化:同一类物体有大有小,而且拍摄距离对大小的影响很大。

形变:很多物体不是刚体,会产生形变。

遮挡:目标物体可能会被挡住,有时候物体只有一小部分是可见的。

光照条件:强光和暗光环境下拍摄,像素的亮度差别非常大。

背景干扰:物体可能混入复杂背景中,难以辨认。

类内差异:同类物体之间的外形差异很大,比如椅子。这类物体有许多不同的子类,每个子类都有自己独特的外形。

好的图像分类模型必须能克服上述变化及其组合,同时对类间差异足够敏感。

3.语义鸿沟

我们知道,计算机只能“看到”一个个像素值堆积成的矩阵,并非人类看到的物体内容。人类在判别图像内容时,不是建立在图像像素值这种低层视觉特征上,而是建立在对图像语义理解的基础上,如人脸由眼睛和嘴巴等组成。这种语义理解无法从图像的低层视觉特征中直接获得,而是由人们长期积累的大量先验知识帮助判断。换言之,人们是依据图像的语义信息来进行图像判别的,这产生了人所理解的“语义相似”与计算机理解的“视觉相似”之间的“语义鸿沟”。语义鸿沟就是由于计算机获取的图像信息与人类对图像理解的语义信息的不一致性而导致的低层信息和高层信息之间的距离。像素信息不包含任何语义信息,计算机难以从像素中提取语义信息,这是图像分类难度大的内在原因。

4.数据驱动方法

那么,如何写一个图像分类的算法呢?这和排序算法大不一样,怎么写一个从图像中认出车的算法?因此,与其在代码中直接写明各类物体到底“看起来”是什么样,不如采取小孩看图识物的方法:给计算机很多物体图像,然后采用机器学习方法,让计算机自己学习区分每个类别物体图像的视觉表现特征。这种方法,就是数据驱动方法,也就是机器学习方法。不要直接告诉计算机该“怎么做”,而是给计算机大量的实例,让计算机自己学会“怎么做”。