VGG卷积神经网络实践
卷积神经网络是可应用于许多计算机视觉问题的可学习表示的重要类别。 特别地,深CNN由多个处理层组成,每个处理层涉及线性和非线性算子,以端对端的方式联合地学习以解决特定任务。 这些方法现在是用于从视听和文本数据中提取特征的主要方法。
这个实践探讨了学习(深度)CNN的基础。 第一部分介绍典型的CNN构造块,例如ReLU单元和线性滤波器,特别强调理解反向传播。 第二部分研究学习两个基本的CNN。 第一个是捕获特定图像结构的简单非线性滤波器,而第二个是识别打字字符(使用各种不同字体)的网络。 这些例子说明了使用具有动量的随机梯度下降,目标函数的定义,小批量数据的构造和数据抖动。 最后一部分显示了CNN模型可以如何下载现成的,直接在应用程序中使用,绕过昂贵的训练过程。
% Read an example image
x = imread('peppers.png') ;
% Convert to single format
x = im2single(x) ;
% Visualize the input x
figure(1) ; clf ; imagesc(x)
This should display an image of bell peppers in Figure 1:
使用MATLAB size命令获取数组x的大小。 请注意,数组x转换为单精度格式。 这是因为基础MatConvNet假定数据是单精度的
Question. The third dimension of x is 3. Why?(三通道彩色图像)
size(x)
ans =
384 512 3
接下来,我们创建一个10个5×5×3的滤波器组,随机初始化它们的系数:
% Create a bank of linear filters
w = randn(5,5,3,10,'single') ;
滤波器也是单精度的。 注意w有四个维度,包装10个过滤器。 还要注意,每个过滤器不是平的,而是包含三个切片的体积。 下一步是将过滤器应用于图像。 这使用MatConvNet中的vl_nnconv函数:
% Apply the convolution operator
y = vl_nnconv(x, w, []) ;
备注:您可能已经注意到vl_nnconv函数的第三个参数是空矩阵[]。 它可以另外用于传递偏置项的向量以添加到每个滤波器的输出。
% Visualize the output y
figure(2) ; clf ; vl_imarraysc(y) ; colormap gray ;
这是我用官网下载的安装包运行出现了问题,这时我觉得我们最好装上VLFeat。地址:VLFeat - Download > Using from MATLAB
这是第二步的结果:
问题:研究获得的特征通道,大多数将可能在输入图像x中的边缘的对应中包含强响应。 回想一下,通过从高斯分布绘制随机数来获得w。 你能解释这个现象吗?(这个应该是数图学过的内容,不过我忘记了···)
到目前为止,过滤器保留了输入要素图的分辨率。 然而,对输出进行下采样通常是有用的。 这可以通过使用vl_nnconv中的stride选项来获得:
% Try again, downsampling the output
y_ds = vl_nnconv(x, w, [], 'stride', 16) ;
figure(3) ; clf ; vl_imarraysc(y_ds) ; colormap gray ;
正如你应该在上面的问题中注意到的,对图像或特征映射应用过滤器与边界交互,使输出映射减小与过滤器大小成比例的量, 如果这是不希望的,那么可以使用pad选项用零填充输入数组:
% Try padding
y_pad = vl_nnconv(x, w, [], 'pad', 4) ;
figure(4) ; clf ; vl_imarraysc(y_pad) ; colormap gray ;
任务:请说明与不使用填充的代码相比,前面的代码的输出具有不同的边界。 你能解释一下结果吗?(padding的作用,就是保持图像大小不发生变化。)
为了巩固到目前为止已经学到的东西,我们现在将手工设计一个过滤器:
w = [0 1 0 ;
1 -4 1 ;
0 1 0 ] ;
w = single(repmat(w, [1, 1, 3])) ;
y_lap = vl_nnconv(x, w, []) ;
figure(5) ; clf ; colormap gray ;
subplot(1,2,1) ;
imagesc(y_lap) ; title('filter output') ;
subplot(1,2,2) ;
imagesc(-abs(y_lap)) ; title('- abs(filter output)') ;
问题:
我们实施了什么过滤器?(貌似是什么边缘检测器,大家可以自己去翻翻书)
这个过滤器如何处理RGB颜色通道?(把滤波器也扩展为3个)
检测到什么图像结构?(从图上看就是边缘信息)