Convolutional Neural Networks - Part

1.1 Computer Vision (Computer vision)

Welcome to the convolution neural network courses, computer vision is an area of ​​rapid development, thanks to deep learning. Depth learning and computer vision can help the car to identify pedestrians and cars around and help them avoid the car. Also makes face recognition technology to become more efficient and accurate, you will soon be able to experience or have already experienced only able to unlock the door by phone or face brush. When you unlock the phone, I guess there are many applications to share pictures on your phone. Above you can see the food, hotel, or beautiful scenery pictures. Some companies use the technology in-depth study on these applications to demonstrate the most vivid and beautiful, and most relevant to your pictures to you. Machine learning and even spawned a new type of art. The reason why the depth of learning that excites me there are two reasons, I think you feel the same way.

First, the rapid development of computer vision marks may produce new applications, which is a few years ago, people did not dare to imagine. By learning to use these tools, you may be able to create new products and applications.

Second, even if in the end you are unable to accomplish something in the computer vision, but I found that people study for computer vision are so full of imagination and creativity, thus derived from new neural network structure and algorithm, which actually inspired people to create computer vision intersect with the results of other areas. For example, before I was doing voice recognition, I often find inspiration from the field of computer vision and apply it to my literature among. So even if you do not have to make achievements in computer vision, and I hope you can also learn to apply the knowledge to other algorithms and structures. It is introduced here, let us start learning it.

These are some of the problems we will have to learn this lesson, you should have heard the picture classification, or picture identification. For example, given this picture 64 × 64, so that computer to tell this is a cat.

Another example, there is a problem in computer vision is called object detection, such as in a drone project, you do not have to recognize the picture object is a vehicle, but you need to calculate the position of other vehicles, to ensure that You can avoid them. Therefore, in certain test items, which objects need to calculate the first figure, there are, for example cars, there are pictures of other things, and then simulate them into one box, or with some other techniques are identified in the picture position. Note that in this example, in a picture at the same time there are multiple vehicles, each vehicle as opposed to you have an exact distance.

 

There is a more interesting example is the neural network migration picture style, for example, you have a picture, but you want to convert this picture to another style. So picture style migration, it is that you have a satisfactory picture and a picture style, in fact, to the right of the painting is Picasso's paintings, and you can take advantage of neural networks fused them together, depict a new image. Its overall profile from the left, but it is the right style, and finally generate the image below. This magical algorithm to create a new artistic style, so in this course, you can also learn to do such a thing.

But in the application of computer vision to face a challenge, that is, the input data may be very large. For example, in the last lesson, you usually operate 64 × 64 small pictures are, in fact, it's the amount of data is 64 × 64 × 3, because each image has three color channels. If we calculate, then, can that amount of data is 12288, so we feature vector dimension 12288. This is actually better, because 64 × 64 is really a very small picture.

If you want to operate bigger picture, such as a 1000 × 1000 picture, it is enough to have 1 trillion so big, but the dimensions of a feature vector reached the 1000 × 1000 × 3, because there are three RGB channels, so the numbers will 300 million. If you look at the size of the small screen, you might not perceive the above picture is only as big as 64 × 64, and the following is a large image of 1000 × 1000.

If you want to enter the amount of three million data, which means that a feature vector dimensions up to 300 million. So in the first hidden layer, you may have a hidden unit 1000, and all the weight of the composition of the matrix. If you use a standard fully connected network, as we say in the first and second doors of course, the size of this matrix will be 1000 × 300 million. Because the current dimension, usually used to represent 3 million. This means that there will be 3 billion parameter matrix, which is a very huge number. In such a large number of parameters, it is difficult to obtain enough data to prevent the occurrence of neural network overfitting and competition needs to be processed neural network consists of three billion parameter, huge memory requirements for people not able to accept.

但对于计算机视觉应用来说,你肯定不想它只处理小图片,你希望它同时也要能处理大图。为此,你需要进行卷积计算,它是卷积神经网络中非常重要的一块。下节课中,我会为你介绍如何进行这种运算,我将用边缘检测的例子来向你说明卷积的含义。

1.2 边缘检测示例(Edge detection example)

卷积运算是卷积神经网络最基本的组成部分,使用边缘检测作为入门样例。在这个视频中,你会看到卷积是如何进行运算的。

在之前的视频中,我说过神经网络的前几层是如何检测边缘的,然后,后面的层有可能检测到物体的部分区域,更靠后的一些层可能检测到完整的物体,这个例子中就是人脸。在这个视频中,你会看到如何在一张图片中进行边缘检测。

让我们举个例子,给了这样一张图片,让电脑去搞清楚这张照片里有什么物体,你可能做的第一件事是检测图片中的垂直边缘。比如说,在这张图片中的栏杆就对应垂直线,与此同时,这些行人的轮廓线某种程度上也是垂线,这些线是垂直边缘检测器的输出。同样,你可能也想检测水平边缘,比如说这些栏杆就是很明显的水平线,它们也能被检测到,结果在这。所以如何在图像中检测这些边缘?

看一个例子,这是一个6×6的灰度图像。因为是灰度图像,所以它是6×6×1的矩阵,而不是6×6×3的,因为没有RGB三通道。为了检测图像中的垂直边缘,你可以构造一个3×3矩阵。在共用习惯中,在卷积神经网络的术语中,它被称为过滤器。我要构造一个3×3的过滤器,像这样。在论文它有时候会被称为核,而不是过滤器,但在这个视频中,我将使用过滤器这个术语。对这个6×6的图像进行卷积运算,卷积运算用“”来表示,用3×3的过滤器对其进行卷积。

关于符号表示,有一些问题,在数学中“”就是卷积的标准标志,但是在Python中,这个标识常常被用来表示乘法或者元素乘法。所以这个“”有多层含义,它是一个重载符号,在这个视频中,当“”表示卷积的时候我会特别说明。

这个卷积运算的输出将会是一个4×4的矩阵,你可以将它看成一个4×4的图像。下面来说明是如何计算得到这个4×4矩阵的。为了计算第一个元素,在4×4左上角的那个元素,使用3×3的过滤器,将其覆盖在输入图像,如下图所示。然后进行元素乘法(element-wise products)运算,所以,然后将该矩阵每个元素相加得到最左上角的元素,即。

把这9个数加起来得到-5,当然,你可以把这9个数按任何顺序相加,我只是先写了第一列,然后第二列,第三列。

接下来,为了弄明白第二个元素是什么,你要把蓝色的方块,向右移动一步,像这样,把这些绿色的标记去掉:

继续做同样的元素乘法,然后加起来,所以是 。

接下来也是一样,继续右移一步,把9个数的点积加起来得到0。

继续移得到8,验证一下:。

 

接下来为了得到下一行的元素,现在把蓝色块下移,现在蓝色块在这个位置:

重复进行元素乘法,然后加起来。通过这样做得到-10。再将其右移得到-2,接着是2,3。以此类推,这样计算完矩阵中的其他元素。

为了说得更清楚一点,这个-16是通过底部右下角的3×3区域得到的。

因此6×6矩阵和3×3矩阵进行卷积运算得到4×4矩阵。这些图片和过滤器是不同维度的矩阵,但左边矩阵容易被理解为一张图片,中间的这个被理解为过滤器,右边的图片我们可以理解为另一张图片。这个就是垂直边缘检测器,下一页中你就会明白。

在往下讲之前,多说一句,如果你要使用编程语言实现这个运算,不同的编程语言有不同的函数,而不是用“”来表示卷积。所以在编程练习中,你会使用一个叫conv_forward的函数。如果在tensorflow下,这个函数叫tf.conv2d。在其他深度学习框架中,在后面的课程中,你将会看到Keras这个框架,在这个框架下用Conv2D实现卷积运算。所有的编程框架都有一些函数来实现卷积运算。

为什么这个可以做垂直边缘检测呢?让我们来看另外一个例子。为了讲清楚,我会用一个简单的例子。这是一个简单的6×6图像,左边的一半是10,右边一般是0。如果你把它当成一个图片,左边那部分看起来是白色的,像素值10是比较亮的像素值,右边像素值比较暗,我使用灰色来表示0,尽管它也可以被画成黑的。图片里,有一个特别明显的垂直边缘在图像中间,这条垂直线是从黑到白的过渡线,或者从白色到深色。

所以,当你用一个3×3过滤器进行卷积运算的时候,这个3×3的过滤器可视化为下面这个样子,在左边有明亮的像素,然后有一个过渡,0在中间,然后右边是深色的。卷积运算后,你得到的是右边的矩阵。如果你愿意,可以通过数学运算去验证。举例来说,最左上角的元素0,就是由这个3×3块(绿色方框标记)经过元素乘积运算再求和得到的,

。相反这个30是由这个(红色方框标记)得到的,

如果把最右边的矩阵当成图像,它是这个样子。在中间有段亮一点的区域,对应检查到这个6×6图像中间的垂直边缘。这里的维数似乎有点不正确,检测到的边缘太粗了。因为在这个例子中,图片太小了。如果你用一个1000×1000的图像,而不是6×6的图片,你会发现其会很好地检测出图像中的垂直边缘。在这个例子中,在输出图像中间的亮处,表示在图像中间有一个特别明显的垂直边缘。从垂直边缘检测中可以得到的启发是,因为我们使用3×3的矩阵(过滤器),所以垂直边缘是一个3×3的区域,左边是明亮的像素,中间的并不需要考虑,右边是深色像素。在这个6×6图像的中间部分,明亮的像素在左边,深色的像素在右边,就被视为一个垂直边缘,卷积运算提供了一个方便的方法来发现图像中的垂直边缘。

所以你已经了解卷积是怎么工作的,在下一个视频中,你将会看到如何使用卷积运算作为卷积神经网络的基本模块的。

 

1.3 更多边缘检测内容(More edge detection)

你已经见识到用卷积运算实现垂直边缘检测,在本视频中,你将学习如何区分正边和负边,这实际就是由亮到暗与由暗到亮的区别,也就是边缘的过渡。你还能了解到其他类型的边缘检测以及如何去实现这些算法,而不要总想着去自己编写一个边缘检测程序,让我们开始吧。

还是上一个视频中的例子,这张6×6的图片,左边较亮,而右边较暗,将它与垂直边缘检测滤波器进行卷积,检测结果就显示在了右边这幅图的中间部分。

现在这幅图有什么变化呢?它的颜色被翻转了,变成了左边比较暗,而右边比较亮。现在亮度为10的点跑到了右边,为0的点则跑到了左边。如果你用它与相同的过滤器进行卷积,最后得到的图中间会是-30,而不是30。如果你将矩阵转换为图片,就会是该矩阵下面图片的样子。现在中间的过渡部分被翻转了,之前的30翻转成了-30,表明是由暗向亮过渡,而不是由亮向暗过渡。

如果你不在乎这两者的区别,你可以取出矩阵的绝对值。但这个特定的过滤器确实可以为我们区分这两种明暗变化的区别。

再来看看更多的边缘检测的例子,我们已经见过这个3×3的过滤器,它可以检测出垂直的边缘。所以,看到右边这个过滤器,我想你应该猜出来了,它能让你检测出水平的边缘。提醒一下,一个垂直边缘过滤器是一个3×3的区域,它的左边相对较亮,而右边相对较暗。相似的,右边这个水平边缘过滤器也是一个3×3的区域,它的上边相对较亮,而下方相对较暗。

这里还有个更复杂的例子,左上方和右下方都是亮度为10的点。如果你将它绘成图片,右上角是比较暗的地方,这边都是亮度为0的点,我把这些比较暗的区域都加上阴影。而左上方和右下方都会相对较亮。如果你用这幅图与水平边缘过滤器卷积,就会得到右边这个矩阵。

再举个例子,这里的30(右边矩阵中绿色方框标记元素)代表了左边这块3×3的区域(左边矩阵绿色方框标记部分),这块区域确实是上边比较亮,而下边比较暗的,所以它在这里发现了一条正边缘。而这里的-30(右边矩阵中紫色方框标记元素)又代表了左边另一块区域(左边矩阵紫色方框标记部分),这块区域确实是底部比较亮,而上边则比较暗,所以在这里它是一条负边。

再次强调,我们现在所使用的都是相对很小的图片,仅有6×6。但这些中间的数值,比如说这个10(右边矩阵中黄色方框标记元素)代表的是左边这块区域(左边6×6矩阵中黄色方框标记的部分)。这块区域左边两列是正边,右边一列是负边,正边和负边的值加在一起得到了一个中间值。但假如这个一个非常大的1000×1000的类似这样棋盘风格的大图,就不会出现这些亮度为10的过渡带了,因为图片尺寸很大,这些中间值就会变得非常小。

总而言之,通过使用不同的过滤器,你可以找出垂直的或是水平的边缘。但事实上,对于这个3×3的过滤器来说,我们使用了其中的一种数字组合。

但在历史上,在计算机视觉的文献中,曾公平地争论过怎样的数字组合才是最好的,所以你还可以使用这种:,叫做Sobel的过滤器,它的优点在于增加了中间一行元素的权重,这使得结果的鲁棒性会更高一些。

但计算机视觉的研究者们也会经常使用其他的数字组合,比如这种:,这叫做Scharr过滤器,它有着和之前完全不同的特性,实际上也是一种垂直边缘检测,如果你将其翻转90度,你就能得到对应水平边缘检测。

随着深度学习的发展,我们学习的其中一件事就是当你真正想去检测出复杂图像的边缘,你不一定要去使用那些研究者们所选择的这九个数字,但你可以从中获益匪浅。把这矩阵中的9个数字当成9个参数,并且在之后你可以学习使用反向传播算法,其目标就是去理解这9个参数。

当你得到左边这个6×6的图片,将其与这个3×3的过滤器进行卷积,将会得到一个出色的边缘检测。这就是你在下节视频中将会看到的,把这9个数字当成参数的过滤器,通过反向传播,你可以学习这种的过滤器,或者Sobel过滤器和Scharr过滤器。还有另一种过滤器,这种过滤器对于数据的捕捉能力甚至可以胜过任何之前这些手写的过滤器。相比这种单纯的垂直边缘和水平边缘,它可以检测出45°或70°或73°,甚至是任何角度的边缘。所以将矩阵的所有数字都设置为参数,通过数据反馈,让神经网络自动去学习它们,我们会发现神经网络可以学习一些低级的特征,例如这些边缘的特征。尽管比起那些研究者们,我们要更费劲一些,但确实可以动手写出这些东西。不过构成这些计算的基础依然是卷积运算,使得反向传播算法能够让神经网络学习任何它所需要的3×3的过滤器,并在整幅图片上去应用它。这里,这里,还有这里(左边矩阵蓝色方框标记部分),去输出这些,任何它所检测到的特征,不管是垂直的边缘,水平的边缘,还有其他奇怪角度的边缘,甚至是其它的连名字都没有的过滤器。

所以这种将这9个数字当成参数的思想,已经成为计算机视觉中最为有效的思想之一。在接下来的课程中,也就是下个星期,我们将详细去探讨如何使用反向传播去让神经网络学习这9个数字。但在此之前,我们需要先讨论一些其它细节,比如一些基础的卷积运算的变量。在下面两节视频中,我将与你们讨论如何去使用padding,以及卷积各种不同的发展,这两节内容将会是卷积神经网络中卷积模块的重要组成部分,所以我们下节视频再见。

发布了384 篇原创文章 · 获赞 210 · 访问量 52万+

Guess you like

Origin blog.csdn.net/qq_32146369/article/details/104591831