程序员如何学习计算机视觉?你需要了解这五大技术!( 二 )


现存的很多计算机视觉算法,都是被来自牛津、 INRIA 和 XRCE 等顶级的计算机视觉团队在 ImageNet 数据集上实现的 。通常来说,计算机视觉系统使用复杂的多级管道,并且,早期阶段的算法都是通过优化几个参数来手动微调的 。
第一届 ImageNet 竞赛的获奖者是 Alex Krizhevsky(NIPS 2012),他在 Yann LeCun 开创的神经网络类型基础上,设计了一个深度卷积神经网络 。该网络架构除了一些最大池化层外,还包含 7 个隐藏层,前几层是卷积层,最后两层是全连接层 。在每个隐藏层内,激活函数为线性的,要比逻辑单元的训练速度更快、性能更好 。除此之外,当附近的单元有更强的活动时,它还使用竞争性标准化来压制隐藏活动,这有助于强度的变化 。

程序员如何学习计算机视觉?你需要了解这五大技术!

文章插图
 
就硬件要求而言,Alex 在 2 个 Nvidia GTX 580 GPU (速度超过 1000 个快速的小内核)上实现了非常高效的卷积网络 。GPU 非常适合矩阵间的乘法且有非常高的内存带宽 。这使他能在一周内完成训练,并在测试时快速的从 10 个块中组合出结果 。如果我们能够以足够快的速度传输状态,就可以将网络分布在多个内核上 。
随着内核越来越便宜,数据集越来越大,大型神经网络的速度要比老式计算机视觉系统更快 。在这之后,已经有很多种使用卷积神经网络作为核心,并取得优秀成果的模型,如ZFNet(2013),GoogLeNet(2014),VGGNet(2014),RESNET(2015),DenseNet(2016)等 。
▌2?、对象检测
程序员如何学习计算机视觉?你需要了解这五大技术!

文章插图
 
识别图像中的对象这一任务,通常会涉及到为各个对象输出边界框和标签 。这不同于分类/定位任务——对很多对象进行分类和定位,而不仅仅是对个主体对象进行分类和定位 。在对象检测中,你只有 2 个对象分类类别,即对象边界框和非对象边界框 。例如,在汽车检测中,你必须使用边界框检测所给定图像中的所有汽车 。
如果使用图像分类和定位图像这样的滑动窗口技术,我们则需要将卷积神经网络应用于图像上的很多不同物体上 。由于卷积神经网络会将图像中的每个物体识别为对象或背景,因此我们需要在大量的位置和规模上使用卷积神经网络,但是这需要很大的计算量!
为了解决这一问题,神经网络研究人员建议使用区域(region)这一概念,这样我们就会找到可能包含对象的“斑点”图像区域,这样运行速度就会大大提高 。第一种模型是基于区域的卷积神经网络( R-CNN ),其算法原理如下:
  1. 在 R-CNN 中,首先使用选择性搜索算法扫描输入图像,寻找其中的可能对象,从而生成大约 2,000 个区域建议;
  2. 然后,在这些区域建议上运行一个 卷积神网络;
  3. 最后,将每个卷积神经网络的输出传给支持向量机( SVM ),使用一个线性回归收紧对象的边界框 。

程序员如何学习计算机视觉?你需要了解这五大技术!

文章插图
 
实质上,我们将对象检测转换为一个图像分类问题 。但是也存在这些问题:训练速度慢,需要大量的磁盘空间,推理速度也很慢 。
R-CNN 的第一个升级版本是 Fast R-CNN,通过使用了 2 次增强,大大提了检测速度:
  1. 在建议区域之前进行特征提取,因此在整幅图像上只能运行一次卷积神经网络;
  2. 用一个 softmax 层代替支持向量机,对用于预测的神经网络进行扩展,而不是创建一个新的模型 。

程序员如何学习计算机视觉?你需要了解这五大技术!

文章插图
 
Fast R-CNN 的运行速度要比 R-CNN 快的多,因为在一幅图像上它只能训练一个 CNN。但是,择性搜索算法生成区域提议仍然要花费大量时间 。
Faster R-CNN 是基于深度学习对象检测的一个典型案例 。
该算法用一个快速神经网络代替了运算速度很慢的选择性搜索算法:通过插入区域提议网络( RPN ),来预测来自特征的建议 。RPN 决定查看“哪里”,这样可以减少整个推理过程的计算量 。RPN 快速且高效地扫描每一个位置,来评估在给定的区域内是否需要作进一步处理,其实现方式如下:通过输出 k 个边界框建议,每个边界框建议都有 2 个值——代表每个位置包含目标对象和不包含目标对象的概率 。

程序员如何学习计算机视觉?你需要了解这五大技术!

文章插图
 
一旦我们有了区域建议,就直接将它们送入 Fast R-CNN。并且,我们还添加了一个池化层、一些全连接层、一个 softmax 分类层以及一个边界框回归器 。


推荐阅读