CNN简单理解 and matlab2016a+vs2015+CUDA+Matconvnet环境配置流程

一、CNN理解

CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。

1、检测图像中的垂直边缘,如下图1所示:

图1 垂直边缘检测

当卷积核为以下则为水平边缘检测:


由6-3+1=4

可推知n-f+1=t

2、padding(卷积基本操作),如下图2所示:


图2 padding示例

加了padding的卷积又叫same卷积,因为输入和输出是同样大小,一般情况下padding填充为0。

此时n+2p-f+1=t(or n),此时p=(f-1)/2

因此一般f(卷积核)为奇数,目的有两个:1防止不对称填充2卷积核有中心像素点,便于指出过滤器位置。

3、卷积步长,如下图3所示:

图3 卷积步长

上图步长为2,卷积核一次移动2个距离。

由上可知:(n+2p-f)/s+1=t(当不是整数时,向下取整)

4、卷积中“卷”的体现之处,如下图4所示:

图4 卷积的直观表现

上图为垂直边界的过滤器,但是只是对红色通道起作用。

5、卷积神经网络结构,如下图5所示:

图5 简单卷积神经网络结构

由上图,可知卷积神经网络通常有三层,卷积层(conv),池化层(pool),全连接层(FC)。通常情况下,卷积层和池化层交替出现,常把二者作为一层来表示。卷积层参数较少,池化层无参数,全连接层参数最多。

6、池化层的原理和作用,如下图6所示:

图6 池化原理图

上图用到是最大池化,即颜色相同区域取最大值,除此之外还有平均池化(颜色相同区域取平均值)。可以把这4*4区域看作是某种特征的集合,也就是神经网络中某一层的反激活值集合,数字大意味着可能提取了某些特定特征,最大池化的功能就是要在任何一个象限内提取到某个特征。大部分情况下,最大池化很少用到padding,池化过程没有需要学习的参数(即超级参数都是人为提前设定),当执行反向传播时,没有参数适用于最大池化。

7、经典的卷积神经网络

LeNet-5

AlexNet

VGG/VGG-16

ResNet

Iception

二、代码实现及运行环境搭建的体会

一、起初在win8.1安装了matlab2011a+vs2008,由于Matconvnet要求vs2015编译器,因此就放弃在win8.1尝试,

二、考虑到以下两点:

1、程序需要在CUDA【CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。】下利用GPU运算【利用CPU也可以计算不过速度较慢】

2、CNN需要在海量数据集下进行训练,对计算机硬件要求较高,显卡和内存,以及发热问题,时间效率问题

综上两点选择在服务器上进行环境配置。然而matlab2015a找不到vs2015编译器,几番尝试未果,放弃在服务器上配置的想法(原因:服务器操作系统版本太低,并且没有独显)

三、转到win10操作系统重新配置,环境配置圆满成功。具体配置流程如下【安装所需的matlab2016a(包括激活文件)+vs2015+CUDA+cudnn文件+Matconvnet(下载链接:http://www.vlfeat.org/matconvnet/)】

(1)CPU环境下运行配置流程:

1、安装顺序很重要,先安装matlab2016a,后安装vs2015。为方便查找,提前在program files(表示64位程序文件路径,如果后面加有x86则为32位程序文件路径)建立相关软件的文件夹。

2、matlab激活见https://blog.csdn.net/u012313335/article/details/73733651

3、matlab命令框内输入以下代码:

mex –setup  %绑定C++编译器,效果如下图


如果有多种编译器可选,选择VS2015编译器。接着进行第4步。

如果出错了,打开vs2015测试一下,看是否可以编译一条简单的C++代码【eg:输出hello world】。如果不可以编译C++代码,则在vs2015内更新下载所需要的C++开发环境。如果是其他错误,则卸载vs2015,重启电脑后,重新装vs2015,然后回到第3步,直到matlab2016a能够找到vs2015编译器为止,进行第4步。

4、将matlab工作路径切换到matconvnet所在文件夹,并执行命令: addpathmatlab,添加搜索路径。

cd F:\Documents\Desktop\昆工\研究方向图像处理\17级实践学习建议\DnCNN_TrainingCodes_v1.1\matconvnet

addpath matlab

5、在Matlab中执行命令:vl_compilenn。编译工具箱。

vl_compilenn

6、在Matlab中执行命令:vl_setupnn。设置工具箱。

特别说明:以上3—6步为编译安装环节。

7、测试。在命令行窗口输入vl_testnn命令,测试非GPU模式,结果如下:

(2)、GPU环境下运行配置流程:

1、安装cuda,正常安装即可,没有特殊的要求,这里建议安装到默认路径,不要改变,防止之后填写环境变量的时候出现差错。

2、设置环境变量:安装完毕后,在计算机上点右键,打开属性->高级系统设置->环境变量,可以看到系统中多了CUDA_PATH和CUDA_PATH_V9_1两个环境变量,接下来,还要在系统中添加以下几个环境变量:如果是默认的CUDA安装路径,添加的路径分别是下面这样的:

变量名:CUDA_SDK_BIN_PATH

路径:G:\ProgramData\NVIDIACorporation\CUDA Samples\v9.1\bin\win64

变量名:CUDA_SDK_LIB_PATH

路径:G:\ProgramData\NVIDIACorporation\CUDA Samples\v9.1\common\lib\x64

然后,在系统变量 PATH 的末尾添加:

C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v9.1\lib\x64;

C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v9.1\bin;

C:\ProgramData\NVIDIACorporation\CUDA Samples\v9.1\common\lib\x64;

C:\ProgramData\NVIDIACorporation\CUDA Samples\v9.1\bin\win64;

并不清楚时哪些环境变量起作用,为了不出错误建议都配置上。

3、在matconvnet-1.0-beta25(建议重命名文件夹改为matconvnet)中建一个local文件夹(与example和matlab等同一”级别”),然后把下载的cudnn放进去,如下图所示:

4、把cudnn中bin文件夹下的cudnn64_7.dll放入matconvnet文件夹中。 (不同的cudnn版本不一样,我的是cudnn9.1)

5、把cudnn中的bin,lib/x64,include中的文件分别拷贝至G:\ProgramFiles\NVIDIA GPU ComputingToolkit\CUDA\v9.1中的bin,lib/x64,include三个子目录下。(这里的路径对应cuda的安装路径)

6、将nvcc路径加入环境变量中:

MW_NVCC_PATH

G:\ProgramFiles\NVIDIA GPUComputing Toolkit\CUDA\v9.1\bin\nvcc.exe

7、重新编译vl_compilenn程序

vl_compilenn('enableGpu',true,'cudaRoot','G:/Program Files/NVIDIAGPU Computing Toolkit/CUDA/v9.1','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn')

这是因为1.25版本的MatConvNet中的vl_compilenn.m文件中在506行增加了这样的判断:

ifstrcmp(arch, 'win64') && opts.enableCudnn

要求&&符号前后都是逻辑值

所以在运行vl_compilenn函数中'enableCudnn'后面要跟true,而不是跟'true'

8、测试GPU编译,在命令行窗口输入vl_testnn('gpu',true)

由于电脑(神船~)在GPU测试期间起热严重,运行了几次结果都是中途关机,不过通过观察可以得到已经安装成功。




阅读更多
个人分类: CNN
上一篇FastICA 在matlab代码实现以及运行结果
下一篇win10下anaconda安装tensorflow+pytorch
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭