主要内容

通过使用LogoNet可视化深度学习网络的激活

这个例子展示了如何将图像输入卷积神经网络,并显示网络不同层的激活情况。检查激活,并通过将激活区域与原始图像进行比较来发现网络学习的特征。较早层中的通道学习颜色和边缘等简单特征,而较深层中的通道学习复杂特征。以这种方式识别特征可以帮助您了解网络学习到的内容。

标志识别网络

标志有助于品牌识别和识别。许多公司在广告、文件材料和促销活动中使用他们的标识。logo识别网络(LogoNet)是用MATLAB开发的,可以在各种光照条件和摄像机运动下识别32个logo。因为这个网络只关注识别,所以您可以在不需要本地化的应用程序中使用它。

先决条件

  • Intel®Arria10 SoC开发工具包

  • 用于Intel FPGA和SoC的深度学习HDL工具箱™支持包

  • 深度学习工具箱™

  • 深度学习HDL工具箱™

  • 计算机视觉工具箱

负载预训练系列网络

要加载预训练的系列网络LogoNet,输入:

snet = getLogoNetwork;

创建目标对象

创建一个目标对象,该对象具有目标设备的自定义名称和用于将目标设备连接到主机的接口。接口选项为JTAG和Ethernet。要使用JTAG,请安装Intel™Quartus™Prime标准版20.1。如果尚未设置,请设置已安装的Intel Quartus Prime可执行文件的路径。例如,要设置工具路径,输入:

% hdlsetuptoolpath('ToolName', 'Altera Quartus II','ToolPath', 'C:\ Altera \20.1\ Quartus \bin64');

要创建目标对象,输入:

hTarget = dlhdl。目标(“英特尔”“界面”“JTAG”);

创建工作流对象

属性的对象dlhdl。工作流类。创建对象时,指定网络和位流名称。指定保存的预训练的LogoNet神经网络,snet,作为网络。请确保位流名称与数据类型和目标FPGA板匹配。本例中目标FPGA板为Intel Arria10 SOC板。位流使用单一数据类型。

hW = dlhdl。工作流(“网络”snet,“比特流”“arria10soc_single”“目标”, hTarget);

阅读并显示图像。保存大小以备将来使用。

Im = imread(“ferrari.jpg”);imshow (im)

imgSize = size(im);imgSize = imgSize(1:2);

查看网络架构

分析网络,看看可以查看哪些层。卷积层通过使用可学习参数来执行卷积。网络学会识别有用的特征,通常每个通道包含一个特征。第一卷积层有64个通道。

analyzeNetwork (snet)

图像输入层指定输入大小。在通过网络传递映像之前,您可以调整它的大小。该网络还可以处理更大的图像。如果你给网络提供更大的图像,激活也会变得更大。由于该网络是在227 * 227大小的图像上训练的,所以它没有被训练来识别更大的物体或特征。

显示第一个Maxpool层的激活

通过观察maxpool层中哪些区域在图像上激活,并将该图像与原始图像中的相应区域进行比较,来调查特征。卷积神经网络的每一层都由许多称为渠道.通过网络传递图像并检查输出激活maxpool_1层。

act1 = hW.activations(single(im),“maxpool_1”“分析工具”“上”);
offset_name offset_address allocated_space _______________________ ______________ _________________ "InputDataOffset" "0x00000000" "24.0 MB" "OutputResultOffset" "0x01800000" "136.0 MB" "SystemBufferOffset" "0x0a000000" "64.0 MB" "InstructionDataOffset" "0x0e000000" "8.0 MB" "ConvWeightDataOffset" "0x0e800000" "4.0 MB" "EndOffset" "0x0ec00000" "Total: 236.0 MB" ###使用JTAG编程FPGA位流…已成功完成FPGA位流编程。
###已完成输入激活。###运行单输入激活。Deep Learning Processor Profiler性能结果LastLayerLatency(cycles) LastLayerLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 10182024 0.06788 1 10182034 14.7 conv_module 10182024 0.06788 conv_1 7088885 0.04726 maxpool_1 3093166 0.02062 * DL处理器的时钟频率为:150MHz

激活作为一个3-D数组返回,其中第三维为通道索引maxpool_1层。来显示这些激活imtile函数,将数组重塑为4-D。第三个维度的输入imtile表示图像颜色。将第三个维度的大小设置为1,因为激活没有颜色。第四个维度对通道进行索引。

Sz =大小(act1);Act1 =重塑(Act1,[sz(1) sz(2) 1 sz(3)]);

显示激活。每个激活可以取任意值,因此使用mat2gray.所有激活都是按比例缩放的,因此最小激活为0,最大激活为1。在12 × 8的网格上显示96张图像,每个通道对应一个图层。

I = imtile(mat2gray(act1),“GridSize”8 [12]);imshow(我)

研究特定通道的激活

激活网格中的每个磁贴都是通道中的输出maxpool_1层。白色像素代表强烈的正面激活,黑色像素代表强烈的负面激活。大部分是灰色的通道在输入图像上不会被强烈激活。一个像素在通道激活中的位置对应于原始图像中的相同位置。通道中某个位置的白色像素表示该通道在该位置被强烈激活。

将通道33中的激活大小调整为与原始图像相同的大小,并显示激活。

Act1ch33 = act1(:,:,:,22);Act1ch33 = mat2gray(Act1ch33);act1ch33 = imresize(act1ch33,imgSize);I = imtile({im,act1ch33});imshow(我)

寻找最强激活通道

通过编程方式调查具有大量激活的通道来寻找感兴趣的通道。方法找到激活最大的通道马克斯函数,调整通道输出的大小,并显示激活。

[maxValue,maxValueIndex] = max(max(max(act1)));act1chMax = act1(:,:,:,maxValueIndex);act1chMax = mat2gray(act1chMax);act1chMax = imresize(act1chMax,imgSize);I = imtile({im,act1chMax});imshow(我)

将最强激活通道图像与原始图像进行比较。这个通道在边缘激活。它在亮左/暗右边缘上激活正,在暗左/暗右边缘上激活负。

相关的话题

Baidu
map