前排提示:这周的课有很多知识点都在图中,一定要仔细地看一看图。
课堂笔记
计算机视觉
CV(Computer Vision, 计算机视觉)是计算机科学的一个研究领域。该领域研究如何让计算机“理解”图像,从而完成一些只有人类才能完成的高级任务。这些高级任务有:图像分类、目标检测、风格转换等。
想具体了解有哪些计算机视觉任务,可以直接去访问OpenMMLab的GitHub主页:https://github.com/open-mmlab 。我随手整理了一下:图像分类、目标检测、语义分割、图像补全、光流、图像超分辨率、自动抠图、姿态识别、视频插帧、视频目标跟踪、文字识别与理解、图像生成、视频理解、3D目标检测与语义分割……
现在,大多数前沿CV算法是用深度学习实现的。
但是,在CV任务上使用我们之前学的经典神经网络,会碰到一个问题:神经网络输入层的通道数与输入图像尺寸正相关。对于一幅 64 × 64 × 3 64\times64\times3 64×64×3的图像,输入的通道数是 12288 12288 12288;而对于一幅 1000 × 1000 × 3 1000\times1000\times3 1000×1000×3的图像,输入的通道数就高达 3 × 1 0 6 3\times 10^6 3×106了。而网络第一层的参数量又与输入的通道数正相关。对于一个通道数高达 3 × 1 0 6 3\times 10^6 3×106的输入,假设网络第一个隐藏层有 1000 1000 1000个神经元,那么这一层的 W W W将有 1000 × 3 × 1 0 6 = 3 × 1 0 9 1000 \times 3\times 10^6=3\times 10^9 1000×3×106=3×109个参数。有这么多参数,除非有海量的数据,不然网络非常容易过拟合。现有的数据量和计算资源还是跑不动参数这么多的网络的。
因此,在CV中,我们一般不使用之前学的经典神经网络架构,而是使用一种新的网络架构——CNN(Convolutional Neural Network, 卷积神经网络)。
教材这一段的引入新知识组织得非常棒,从参数量的角度自然而然地从全连接网络过度到卷积神经网络。
让我们从卷积神经网络最简单的构件——卷积学起,一步一步认识卷积神经网络。
边缘检测
卷积是一种定义在图像上的操作。在深度学习时代之前,它最常用于图像处理。让我们来看看卷积在图像处理中的一个经典应用——边缘检测,通过这个应用来学习卷积。
边缘检测的示意图如上所示。输入一张图片,我们希望计算机能够检测出图像纵向和横向的边缘,把有边缘的地方标成白色,没有边缘的地方标成黑色。
我们可以用卷积实现边缘检测。让我们来看看卷积运算是怎么样对数据进行操作的。
卷积有两个输入:一幅图像和一个卷积核(英文是kernel,也叫做filter滤波器),其中卷积核是一个二维矩阵。我们这里假设图像是一幅单通道 6 × 6 6 \times 6 6×6的矩阵,卷积核是一个 3 × 3 3 \times 3 3×3的矩阵。经过卷积后,我们会得到一个 4 × 4 4 \times 4 4×4的单通道图像(稍后会介绍 4 × 4 4 \times 4 4×4是怎么算出来的)。
卷积操作会依次算出输出图像中每一个格子的值。对于输出左上角第一个格子,它的计算方法如下:
首先,我们把 3 × 3 3 \times 3 3×