本文主要介绍了CV概要和CNN基础概念。
1 计算机视觉(computer vision)简介
计算机视觉旨在识别和理解图像/视频中的内容。其诞生于1966年MIT AI Group的"the summer vision project"。当时,人工智能其他分支的研究已经有一些初步成果。由于人类可以很轻易地进行视觉认知,MIT的教授们希望通过一个暑期项目解决计算机视觉问题。当然,计算机视觉没有被一个暑期内解决,但计算机视觉经过50余年发展已成为一个十分活跃的研究领域。如今,互联网上超过70%的数据是图像/视频,全世界的监控摄像头数目已超过人口数,每天有超过八亿小时的监控视频数据生成。如此大的数据量亟待自动化的视觉理解与分析技术。
计算机视觉的难点在于语义鸿沟。这个现象不仅出现在计算机视觉领域,Moravec悖论发现,高级的推理只需要非常少的计算资源,而低级的对外界的感知却需要极大的计算资源。要让计算机如成人般地下棋是相对容易的,但是要让电脑有如一岁小孩般的感知和行动能力却是相当困难甚至是不可能的。
语义鸿沟(semantic gap): 人类可以轻松地从图像中识别出目标,而计算机看到的图像只是一组0到255之间的整数。
计算机视觉任务的其他困难: 拍摄视角变化、目标占据图像的比例变化、光照变化、背景融合、目标形变、遮挡等。
计算机视觉的顶级会议和期刊: 顶级会议有CVPR、ICCV、和ECCV,此外ICLR也有不少计算机视觉论文。顶级期刊有IJCV和TPAMI。由于计算机视觉领域发展十分迅速,不论身处学术界或产业界,通过阅读顶级会议和期刊论文了解计算机视觉的最近研究成果都十分必要。
CV四大基本任务: 分类、定位、检测、分割
其他任务:
- 场景文字识别
- 图像生成(比如GAN、VAE等)
- 人体/人脸关键点检测
- 目标跟踪
- 图像标注(Image Captioning)
- 超分辨率、风格迁移、着色
- 人体姿态估计
- 行为识别
- 3D视觉
- and so on
2 卷积神经网络基础概念
经典的多层感知机由一系列全连接层(FC)组成,卷积神经网络中除全连接层外,还有卷积层(Conv)和池化(Pooling)层。
为什么要采用CNN CNN是从DNN发展而来。在图像上使用DNN效果不好,原因:一是图像维度通常很高,全连接需要的参数量巨大,难以计算和存储;二是巨大的参数量非常容易带来过拟合;三是全连接并不适用于应对图像的特性(比如平移不变性、尺度不变性等等)。而CNN中的卷积是局部连接、共享参数版的全连接层,这两个特性使参数量大大降低,而且适合图像的特性。卷积层中的权值通常被成为滤波器(filter)或卷积核(convolution kernel)。
CNN好处:局部连接、权值共享、池化。
- 共同优点:局部连接、权值共享、池化均能降低参数量,减轻过拟合,提高泛化能力;
- 局部连接模式保证了学习到的卷积核对输入的空间局部模式具有最强的响应;
- 权值共享使得网络善于捕捉平移不变性;
- 池化层的降采样赋予了模型对轻度形变的容忍性,提高了模型的泛化能力。
卷积层的作用:通过卷积,我们可以捕获图像的局部信息。通过多层卷积层堆叠,各层提取到特征逐渐由边缘、纹理、方向等低层级特征过渡到文字、车轮、人脸等高层级特征。
描述卷积的四个基本量:卷积核尺寸f,padding,stride,卷积核个数。
卷积输入输出的大小 假设输入高和宽为\(H\)和\(W\),输出高和宽为\(H‘\)和\(W‘\),则\(H‘=\frac{H-f+2p}{s}+1\),\(W‘=\frac{W-f+2p}{s}+1\)
卷积核:卷积神经网络的核心,通常被看做是在局部感受野上,将空间上(spatial)的信息和特征维度上(channel-wise)的信息进行聚合的信息聚合体。
池化:包括Max Pooling和Average Pooling。前者更容易捕捉图像上梯度的变化,带来更大的局部信息差异性,更好地描述边缘、纹理等构成语义的细节信息;后者常用于卷积模块和FC连接处,以降低参数量(比如GooGLeNet、ResNet等);此外还有自适应平均池化,主要用于将不同的输入转化成固定的输出(比如Fast R-CNN中ROI池化层)。
感受野:卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小,即关心的是原图中多大区域会影响到当前特征图上某个像素。大小计算公式为 \(r_n = r_{n-1} + k_{n-1}\prod_{i=1}^{n-1}s_i\)
看待卷积结果(特征图,Feature Map)的两种视角:卷积结果是一个D×H×W的三维张量。其可以被认为是有D个通道,每个通道是一个二维的特征图,可以显示出对输入的某种特征的响应,即从输入中捕获了某种特定的特征。也可以被认为是有H×W个空间位置,每个空间位置是一个D维的描述向量,描述了对应感受野的图像局部区域的语义特征。
卷积结果的分布式表示:卷积结果的各通道之间不是独立的。卷积结果的各通道的神经元和语义概念之间是一个“多对多”的映射。即,每个语义概念由多个通道神经元一起表示,而每个神经元又同时参与到多个语义概念中去。并且,神经元响应是稀疏的,即大部分的神经元输出为0。
1x1卷积核作用:一是变换通道个数;二是整合通道方向上信息。
卷积操作的实现:1. 快速傅里叶变换(FFT)。通过变换到频域,卷积运算将变为普通矩阵乘法。实际中,当滤波器尺寸大时效果好,而对于通常使用的1×1和3×3卷积,加速不明显。2. im2col (image to column)。im2col将与每个输出神经元相连的局部输入区域展成一个列向量,并将所有得到的向量拼接成一个矩阵。这样卷积运算可以用矩阵乘法实现。im2col的优点是可以利用矩阵乘法的高效实现,而弊端是会占用很大存储,因为输入元素会在生成的矩阵中多次出现。此外,Strassen矩阵乘法和Winograd也常被使用。现有的计算库如MKL和cuDNN,会根据滤波器大小选择合适的算法。
3 高级一点点的基础
上采样的几种方式:
- 直接扩展,多出来的填充0
- 插值法,即图像缩放旋转时采用的方法,有最近邻插值、双线性插值等
- 反池化法,即记录池化的位置,反池化时将值置于记录的位置上,其余填充0(针对最大池化)
- 反卷积
- 每个核拉平成一个行向量,则一系列核可以表示成一个矩阵;
- 图像中对应核大小的一块patch拉成一个列向量,则图像可表示成(Cin×K×K)×(Hout×Wout)大小的矩阵;
- 之后卷积的过程就可以表示成矩阵乘法,用于加速;
反卷积:反卷积英文为Deconvolution或Transposed Convolution或Fractional-strided Convolutions。在机器学习中,反卷积是从低分辨率映射到大分辨率的过程,用于扩大图像尺寸。反卷积是一种特殊的正向卷积,而不是卷积的反过程。正向卷积的实现中,通过im2col的方式将一个kernel拉成一个\(k×k\)的行向量,则\(C_{out}\)个kernel就拉成\(C_{out}×(k×k)\)的矩阵,记为\(C\);于是正向传播的过程就是\(C\)左乘图像矩阵\(X\)(经过im2col拉伸的)得到\(Y=CX\),反向传播就是\(C^T\)左乘梯度得到\(\frac{\partial L}{\partial X} = C^T \frac{\partial L}{\partial Y}\)。而反卷积就是,正向传播时候用\(C^T\)左乘,而反向传播时候用\(C\)左乘。所以反卷积可以恢复图像尺寸,但是不能恢复原值,因此有人建议应该采用转置卷积这个术语,而不是叫它反卷积。
Reference
原文地址:https://www.cnblogs.com/inchbyinch/p/12694996.html