Deep Learning for Computer Vision 课程笔记
Lecture 1
计算机视觉(Computer Vision)和机器学习(Machine Learning)都属于人工智能(Artificial Intelligence)。深度学习(Deep Learning)是机器学习的一个子集,它与计算机视觉相交,并属于更大的AI领域。
CV和DL的背景
计算机视觉的历史是从60年代初开始的,Block World 是由Larry Roberts出版的一部作品,被广泛地称为计算机视觉的第一篇博士论文,其中视觉世界被简化为简单的几何形状,目的是能够识别它们,重建这些形状是什么。1966年MIT的暑期视觉项目,目的是为了构建视觉系统的重要组成部分。
七十年代另外一个非常重要的工作(Brooks&Binford,1979 Fischler & Elschlager 1973),这个时候他们提出了一个问题,我们如何越过简单的块状世界,开始识别和表示现实世界的对象。70年代是一个没有数据可用的时代,计算机的速度很慢,计算机科学家开始思考如何识别和表示对象。
80年代,由于样本小,物体识别是很难的。如果物体识别太难,那么我们首先要做的是目标分割,这个任务就是把一张图片中的像素点归类到有意义的区域,我们可能不知道这些像素点组合到一起是一个人型,但是我们可以把这些属于这人的像素点从背景中抠出来,这个过程就叫做图像分割。他们用一个图论算法对图像进行分割,还有另外一个问题,先于其他计算机视觉问题有进展,即面部检测,脸部是人类最重要的部位之一。
1999-2000年机器学习技术,特别是统计机器学习方法,开始加速发展,出现了很多方法:支持向量机模型,boosting方法,图模型。有一种工作做出了很多贡献,技术使用AdaBoost 算法进行实时面部检测,由Paul Viola和Michal Jones 完成。
从90年代末到2000年的前十年有一个非常有影响力的思想方法是基于特征的目标识别,叫做SIFT特征,思路就是去匹配整个目标。
可以看到我们从60年代、70年代、80年代一步步走到20世纪,有一件事情一直在变化,就是图片的质量,随着互联网的发展,随着数码相机的发展,计算机视觉的研究也能拥有更好的数据了,计算机视觉在21世纪早期提出了一个非常重要的基本问题,我们一直在目标识别,但是直到21世纪的早期,我们才开始真正拥有标注的数据集,能供我们衡量在弥补识别方面取得的成果,其中最具有影响力的标记数据集之一叫PASCAL Visual Object Challenge 这个数据集由20个类别的图片,数据集中的每个种类都有成千上万张图片,现场不同的团队开发算法来和数据测试集做对抗训练,来看有没有优化,这里有一张图表列举了从2007年到2012年在基准数据集上检测图像中的20中目标的检测效果,可以看到在稳步提升。在差不多时候,普林斯顿和斯坦福中的一批人开始,向我们或者说我们这个领域提出了一个更加困难的问题,我们是否具备了识别真实世界中的每一个物体的能力,或者说大部分物体。这个问题是由机器学习中的一个现象驱动的,就是大部分的机器学习算法,无论是图模型,还是支持向量机或者是AdaBoost都可能会在训练过程中过拟合,部分原因是可视化的数据非常复杂,我们的模型的维数就很高,参数量就很大,输入是高维的模型,则还有一堆参数需要调优,当我们的训练数据量不够时,很快就产生了过拟合的现象,这样我们就无法很好地泛化,因此即使有两方面的动力,一是我们单纯地想识别自然世界中的万物,二是要回归机器学习克服机器学习中的瓶颈问题,过拟合问题。
LIfeifei开展了一个叫ImageNet的项目,汇集所有能够找到的图片,包含世界万物,组建一个尽可能大的数据集,用一个称为WorldNet的字典来排序,这个字典里有上万个物体类别,用亚马逊土耳其机器人平台进行排序清洗数据,给每张图片打上标签,最终的结果是一个ImageNet,最后由将近500万甚至4000万多的图片,分成22000类的舞台或者场景,这是一个巨大的,很有可能是由当时AI领域最大的数据集,它将目标检测算法的发展推到了一个新的高度。从2009年开始,ImageNet团队组织了一场国际比赛,叫做ImageNet大规模视觉识别竞赛,这是一个筛选更严格的测试集,总共140万的目标图像有1000种目标类别,分别识别来测试计算机视觉算法。2012年卷积神经网络算法击败了所有其他的算法。CNN模型展现了强大的能量。
Lecture 2 Image Classification
图像分类是计算机视觉的核心问题。一个给定的数据集,比如猫、狗、树等,对于人来说,很容易识别,但对机器来说是一项很难的任务。
语义鸿沟: 计算机获取的图像的视觉信息与用户对图像理解的语义信息的不一致性而导致的低层和高层检索需求间的距离。
实际识别中,还要面临如下挑战: 1. 光照;2. 形变;3. 遮挡;4. 背景杂物;5. 同类差异。算法需要对这些方法具有鲁棒性,同时算法不仅仅要能识别分类猫,还要能识别世界上的其他种类(保持对类间差异足够敏感),这是一个巨大的挑战。
需要更鲁棒的方法,更具扩展性的方法,某些方法不需写下all人对不同类型对象的知识。图像分类,就是输入一个元素为像素值的数组,然后给它分配一个分类标签。数据驱动,数据集MNIST, CIFAR10, CIFAR100, ImgeNet, Places365, Omniglot(alphabets)。
算法
- 最近邻(Nearest Neighbor)
Nearest Neighbor算法将会拿着测试图片和训练集中每一张图片去比较,然后将它认为最相似的那个训练集图片的标签赋给这张测试图片。
比较两张图片可以计算他们的L1(Manhattan)距离:
d 1 ( I 1 , I 2 ) = ∑ p ∣ I 1 p − I 2 p ∣ d_1(I_1,I2)=\sum_p{|I^p_1-I^p_2|} d1(I1,I2)=p∑∣I1p−I2p∣
L2(Euclidean)距离:
d 2 ( I 1 , I 2 ) = ∑ p ( I 1 p − I 2 p ) 2 d_2(I_1,I2)=\sqrt{\sum_p{(I^p_1-I^p_2)^2}} d