第5章图像分类的数据集
在我们实际进入到代码编写阶段来构建分类器之前,我们首先回顾下在本书中用到的数据集。一些数据集可理想的获得大于95%的准确率,另一些则还在开放研究阶段,还有一些是图像分类竞赛的部分数据集。
现在就对这些数据集进行回顾是很重要的,这样我们就可以在以后的章节中对我们在使用这些数据时可能遇到的挑战有一个高级的理解。
1 MNIST
图1 MNIST数据集的一个样例
MNIST数据集是计算机视觉和机器学习文献中最受研究的数据集之一。这个数据集的目标是正确的分类手写数字0-9。在许多例子中,这个数据集是作为基准(benchmark),用于机器学习排名的基准。实际上,MNIST数据集用在深度学习的训练神经网络模型和其它语言中的“Hello World”示例是一样的。
MNIST本身包含60000张训练图片和10000张测试图片。每张图片是784维的特征向量,即对应于图像的28*28的灰阶像素强度。这个像素值是[0, 255]之间的无符号整数。所有数字放置在前景白色背景黑色的区域。
我们主要在Starter Bundle的早期章节中使用这个数据集用于进入神经网络的学习。
2 Animals:Dogs, Cats, Pandas
图2 三分类动物集的例子
这个数据集的目的是正确的分类包含猫、狗、大熊猫的图像。每个类别包含1000张图片,总共3000张图片,这个数据集是另一个“入门”数据集,可以在CPU或GPU上快速的训练深度学习模型且获得好的精确度。其中,猫和狗图像来自Kaggle的Cats vs.Dogs竞赛,大熊猫图像节选自ImageNet数据集。
在第10章我们用这个数据集来示例说明,使用图像的像素作为特征向量是如何不能获得高质量的机器学习模型的,除非我们利用CNN。
这个数据集仅用在Starter Bundle中。
3 CIFAR-10
图3 来自10类CIFAR-10数据集的例子
就像MNIST,CIFAR-10是在计算机视觉和机器学习文献中的另一个标准的基准数据集。CIFAR-10包含60000张特征向量维数为3072的32*32*3(RGB)的图像。
如图3所示,CIFAR-10数据集包含图示中的10个类别。当我们很容易的在MNIST上获得大于97%的分类正确率,但在CIFAR-10上会有些难度(在CIFAR-100上难度更大)。挑战主要来自对象出现方式的显示差异。
尽管是个小的数据集,但是CIFAR-10仍然是新的CNN架构的基准测试集。我们将在Starter Bundle和Practitioner Bundle中使用CIFAR-10。
4 SMILES
图4 SMILES数据集的例子
SIMILES数据集包含要么笑要么不笑的人脸图像,数据集中总共有13165张灰阶图像,大小为32*32。
图像是围绕人脸的32*32大小,即让我们设计出只专注于微笑识别的机器学习算法。计算机视觉预处理与机器学习(尤其是在基准数据集中)脱钩是一大常见趋势,当我们回顾常见的基准数据集时将看到。在一些例子中,假设一个机器学习研究者在应用他们自己的机器学习算法之前,有足够的计算机视觉知识来正确的对一组图像数据集进行预处理,是不公平的。
但是,这种趋势正在快速改变,任何有兴趣将机器学习应用于计算机视觉问题的从业者都被认为至少拥有计算机视觉方面的基本背景。这一趋势在未来还会继续,所以如果你打算在计算机视觉的深度学习方面更加深入的学习,一定要用一点计算机视觉来补充你的教育,即使这只是基础知识。
如果要提高计算机视觉知识,见文档《Adrian Rosebrock - Practical Python and OpenCV, 3rd Edition + Case studies》。
5 Kaggle:Dags vs. Cats
图5 来自猫狗Kaggle竞赛的例子
这个数据集是Kaggle竞赛的一部分,专门用于正确的分类包含猫和狗的图像。总共25000张具有不同分辨率的图像提供给算法使用。
如何决定预先处理你的图像会导致不同的性能水平,再次证明计算机视觉和图像处理基础的背景将会在学习深度学习中发挥很大的作用。
我们将在Practitioner Bundle中的AlexNet网络中使用该数据集作为例子。
6 Flowers-17
Flowers-17数据集是17个种类,每个种类包含80张图像。这个数据集的目标是在给定输入图像时,正确的预测flower的种类。Flowers-17可认为是一个有挑战的数据集,由于缩放、视点角度、背景密集、亮度变化和类内差异等变化因素。此外,每个类只有80张图像,这在训练深度学习模型而避免过拟合也是一个挑战。
图6 三个类别的示例
作为经验法则,建议在训练深度神经网络时,每个类别至少1000-5000张图像。我们将在Practitioner Bundle中研究Flowers-17数据集,利用特征提取(feature extraction)和微调(fine-tuning)等转移学习方法来提高分类性能。
7 CALTECH-101
2004年,李飞飞介绍的CALTECH-101数据集,该数据集作为目标检测的流行的基准数据集。通常用于目标检测(如预测图像中特定对象的包围框的(x,y)坐标),我们也可以用CALTECH-101来研究深度学习。
CALTECH-101具有极大的类别失衡,使得它可以用于类别失衡算法方面的研究。
之前的图像分类方法在CALTECH-101上的精确度在35%-65%之间。但是就像我们在Practitioner Bundle中指出的,我们可以利用深度学习用于图像分类来达到99%的分类正确率。
8 Tiny ImageNet 200
斯坦福大学优秀的cs231n: Convolutional Neural Networks for Visual Recognition class课程为学生组织了一个类似于ImageNet挑战的图像分类挑战,但范围更小。本数据集共有200个图像类,其中500张图像用于训练,50张图像用于验证,50张图像用于每类测试。每张图像被预处理且裁剪成64*64*3像素大小,使学生更容易的关注与深度学习技术而不是计算机视觉预处理功能上。
但是,就像我们在Practitioner Bundle中指出的,这个裁剪使得问题变得更难一些,因为它使得一些重要的、有鉴别能力的信息在预处理任务中被裁剪掉了。也就是说,我将在这个数据集上示例如何训练VGGNet、GooLenet和ResNet且在排行榜中获得较高排名。
9 Adience
图 7 用于年龄和性别预测的Adience数据集的例子
Adience数据集用于促进年龄和性别识别的研究。总共图像26580张年龄分布在0-60之间。这个数据集的目标是正确的预测年龄和性别。我们将在ImageNet Bundle中进一步(构建自己的年龄和性别预测系统)讨论Adience数据集。
10 ImageNet
在计算机视觉和深度学习社区中,你可能对ImageNet是什么或不是什么感到一点混淆。
10.1 ImageNet是什么?
ImageNet实际上是一个项目,旨在根据一组定义的单词和短语,将图像标记并分类到将近2.2万个类别中。
截止到该书此时,项目中有大概1400万张图像。为了管理如此多的数据,采用WordNet层次管理,在WordNet中的每个有意义的单词或短语称为同义词集(synet)。在InageNet中,图像依据这些synet组织,目标是每个synet包含1000+的图像。
10.2 ILSVRC
在计算机视觉和深度学习背景下,当人们谈论ImageNet时,很可能他们谈到的是ImageNet Large Scale Visual Recognition Challenge或者简写的ILSVRC。
在这个挑战中图像分类的目标是训练一个模型,使用大概120万张图像用于训练,50000张用于验证,100000张用于测试,能够将图像分类到1000个不同的类别中。这1000个类别代表了我们日常生活中遇到的目标类别,如不同种类的狗、猫,不同的车辆等等。你可以看到整个目标类别在http://pyimg.co/x1ler。
在图像分类方面,ImageNet挑战是用于计算机视觉分类算法的实际挑战,自2012年以来,这项挑战的排行榜一直被CNNs和深度学习技术占据。
在ImageNet Bundle中,我将在这个著名的数据集上从头演示如何训练重要的网络结构(AlexNet,SqueezeNet,VGGNet,GoogLeNet,ResNet),允许你复制你在相关研究论文中看到的最新的研究成果。
11 Kaggle: Facial Expression Recognition Challenge
图8 Kaggle中FER的例子
Kaggle的另一项挑战,Facial Expression Recognition Challenge(FER)(面部表情识别挑战)的目标是仅从他们的面部照片就能正确的识别出一个人正在经历的面部表情。在FER中提供了35888张图像,目标是将给定的面部表情分类到下述的7种类别中:
1. Angry
2. Disgust (sometimes grouped in with “Fear” due to class imbalance)
3. Fear
4. Happy
5. Sad
6. Surprise
7. Neutral
我将在ImageNet Bundle中演示如何使用这个数据集用于表情识别。
12 Indoor CVPR
室内场景识别(Indoor Scene Recognition)数据集,包含大量室内场景,包括商店、房屋、休闲空间、工作场所和公共空间。这个数据集的目标是训练一个正确的能识别每一个场景的模型。但是,代替使用这个数据集的原始作用,我们在ImageNet Bundle中使用它来自动的检测和修正图像方向。
13 Standard Cars
图9 Cars数据集的例子
这个Cars数据集包括196种汽车种类的16185张图像。你可以根据车辆制造、型号、甚至是制造年份,以任何你想要的方式切片和扫描这个数据集。尽管每个类别有较少的图像(具有较高的类别失衡),但是我将演示在标记车辆的制造型号时如何利用CNNs来获得>95%的分类正确率。