几个术语初步了解下:图像分割、面部检测(Adaboost)、object recognization、SIFT(SIFT算法是一种提取局部特征的算法,在尺度空间寻找极值点,提取位置,尺度,旋转不变量 )、语义分割(将像素按照图像中表达语义含义的不同进行分组)
图像分类是计算机视觉领域的核心问题之一,并且有着各种各样的实际应用。其实在计算机视觉领域中很多看似不同的问题(比如物体检测和分割),都可以被归结为图像分类问题。
对于计算机来说,图像是一个由数字组成的巨大的3维数组。比如对一个猫的图像大小是宽248像素,高400像素,有3个颜色通道,分别是红、绿和蓝(简称RGB)。如此,该图像就包含了248X400X3=297600个数字,我们的任务就是把这些上百万的数字变成一个简单的标签,比如“猫”。
在实际中,视角变化、大小变化、遮挡、光照条件、背景干扰、类内差异(猫有多种)等等,这些因素对计算机视觉算法的图像识别造成了困难的。一个好的识别模型必须对这些因素有鲁棒性。
一、KNN
为了对图像分类有个基本的认识,我们来介绍下一个简单的分类算法:KNN。使用kaggle竞赛题目CIFAR-10 - Object Recognition in Images
数据集中共60000张图像,其中训练集包含50000张图像,测试集包含10000张图像。一共有10个标签。Nearest Neighbor算法将会拿着测试图片和训练集中每一张图片去比较,然后将它认为最相似的那个训练集图片的标签赋给这张测试图片。
那么怎么比较图像之间的相似性呢?
最简单的方法就是逐个像素比较,最后将差异值全部加起来。换句话说,就是将两张图片先转化为两个向量 I 1 I_1 I1和 I 2 I_2 I2,然后计算他们的 L 1 L_1 L1距离:
d 1 ( I 1 , I 2 ) = ∑ p ∣ I 1 p − I 2 p ∣ d_1 (I_1, I_2) = \sum_{p} \left| I^p_1 - I^p_2 \right| d1(I1,I2)=