主要内容

基于树莓派的深度学习静态图像分类

此示例演示如何使用Raspberry Pi的MATLAB®支持包为图像分类算法生成和部署代码™ 硬件。该算法使用ResNet-50神经网络识别图像,该图像通过Raspberry Pi命令行作为输入传递。金宝app

当你生成预测代码时,Raspberry Pi支持包会在硬件上构建可执行文件。金宝app使用ResNet-50,可执行文件将图像分为1000个对象类别,如键盘、咖啡杯、铅笔和许多动物。可执行程序预测对象,并输出它的标签以及对象类别的相关概率。

注意:你不能使用macOS在树莓派硬件上生成和部署深度学习代码。

所需的硬件

  • 树莓派硬件(推荐型号4)

  • 传输线

  • 以太网电缆

  • 显示器连接树莓派硬件和HDMI线(可选)

先决条件

使用配置Raspberry Pi网络硬件设置屏幕上。在硬件设置过程中,确保下载用于深度学习的MathWorks®Raspbian图像。如果选择自定义硬件上的现有映像,请确保选择安装ARM计算库的选项,而不是MathWorks Raspbian映像。

步骤1:连接树莓派硬件

提示:在开始这个示例之前,我们建议您完成入门MATLAB支持包树莓派硬件金宝app从Raspberry Pi的命令行向MATLAB函数发送输入的例子。

将USB电缆的微型端连接到Raspberry Pi,将USB电缆的常规端连接到计算机。等待硬件上的PWR LED开始闪烁。

在MATLAB®命令窗口中,创建与Raspberry Pi硬件的连接。

r = raspi
r = raspi属性:DeviceAddress:“172.31.164.186”端口:18734 BoardName:覆盆子π模型B +的AvailableLEDs:{“led0”}AvailableDigitalPins:(4、5、6、12、13、14、15、16、17、18、19日,20日,21日,22日,23日,24日,25日,26日,27日]AvailableSPIChannels:{‘CE0’,‘CE1} AvailableI2CBuses:{“i2c-1”}AvailableWebcams: {} I2CBusSpeed: 100000支持的外设金宝app

第二步:打开对象分类算法

在这个例子中raspi_fileRead_resnet函数加载ResNet-50深度学习神经网络对输入图像进行分类。该函数使用OpenCV调整图像的大小,以适应网络预期的大小。然后,它将图像分类为对象类别,并输出对象预测的标签以及每个对象类别的概率。

有关该函数的更多信息,请在MATLAB命令窗口中输入此命令。

类型raspi_fileRead_resnet
函数raspi_fileRead_resnet(fileName)%#codegen%版权所有2020 MathWorks,Inc.断言(all(size(fileName)<=50));断言(isa(fileName,'char');%initializednn和输入大小net=coder.loadDeepLearningNetwork('resnet50');inputSize=[224224,3];%net.Layers(1).inputSize;%Read图像imgSizeAdjusted=readResizedImg(文件名,inputSize);%Classify输入图像[label,score]=net.Classify(imgSizedJusted);labelStr=cellstr(label);maxScore=max(score);outputStr=sprintf('label:%s\nScore:%f',labelStr{:},maxScore);%Print将标签和分数打印到标准输出fprintf('%s\n',outputStr);结束

属性可以修改函数编辑命令

编辑raspi_fileRead_resnet

步骤3:生成树莓派图像分类的c++代码

属性创建硬件配置对象靶材函数。

板=目标硬件(“树莓π”);

验证设备地址,用户名,密码输出中列出的属性。如果需要,请使用点符号语法更改属性值。例如,将设备地址更改为172.18.186.123进来

董事会。DeviceAddress =“172.18.186.123”

设置CoderConfig。GenCodeOnly属性的板对象真正的.这使得支持包只在主机上生成和运行图金宝app像分类算法代码。

board.CoderConfig.TargetLang =“C++”;board.CoderConfig.GenCodeOnly = true;

创建一个arm计算机深度学习配置对象。指定Raspberry Pi的体系结构。

dlcfg =编码器。DeepLearningConfig (“arm-compute”);dlcfg。ArmArchitecture =v7的

执行此命令将显示Raspberry Pi上ARM计算库的版本。

r.system ($ ARM_COMPUTELIB / lib / libarm_compute的字符串。所以| grep arm_compute_versio | cut -d\ -f 1')
ans='arm\U计算版本=v20.02.1'

复制版本号并将其分配给ARM计算机版本深度学习配置对象的属性。

dlcfg.ArmComputeVersion='20.02.1'
ArmComputeVersion: '20.02.1' ArmArchitecture: 'armv7' DataType: 'fp32' CalibrationResultFile: " TargetLib: 'arm-compute'

设置DeepLearningConfig代码生成配置对象对深度学习配置对象的属性。

board.CoderConfig.DeepLearningConfig = dlcfg
board = targehardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.31.164.186'用户名:' Pi'密码:'*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1编码器。CodeConfig]

控件在硬件上部署该功能部署函数。这个部署函数开始生成raspi_fileRead_resnet函数。一旦代码生成完成,MATLAB就会生成一个代码生成报告。使用此报告可调试函数,以查看生成代码中的任何错误和警告。

成功生成代码后,更新main.cpp文件以接受命令行参数。

部署(董事会),“raspi_fileRead_resnet”)
代码生成成功:查看报告

步骤4:编辑c++主文件接受树莓派的命令行输入

本节介绍如何修改main.cpp文件使用Raspberry Pi的命令行提供输入。预修改的main.cpp文件可供您使用。您可以选择使用预修改的文件或使用本节中的步骤手动更新文件。

使用预先修改过的main.cpp文件,在MATLAB命令窗口中输入命令。

拷贝文件(“main.cpp”(pwd“\codegen\exe\raspi\u fileRead\u resnet”])复制文件([pwd,“\ codegen \ exe \ raspi_fileRead_resnet \ \ main.h的例子],[pwd,“\codegen\exe\raspi\u fileRead\u resnet”])

要手动更新文件,请复制生成的文件main.cppmain.h文件级别比文件层次结构中的当前级别高一个级别。打开main.cpp来自生成的代码部分代码生成报告,并通过在代码中标记的点上添加代码来更新文件。

步骤5:将函数作为独立的可执行文件部署到Raspberry Pi上

要在硬件上生成和部署代码,请设置CoderConfig。GenCodeOnly财产的董事会对象然后使用部署函数。自部署功能覆盖main.cpp在上一节中编辑的文件中,在部署之前禁用文件的创建。

board.CoderConfig.CustomSource=[“codegen”,filesep,“exe”,filesep,“raspi_fileRead_resnet”,filesep,“main.cpp”];board.CoderConfig.GenerateExampleMain =“不生成”;board.CoderConfig.GenCodeOnly = false
board = targehardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.31.164.186'用户名:' Pi'密码:'*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1编码器。CodeConfig]
部署(董事会),“raspi_fileRead_resnet”)
正在部署代码。这可能需要几分钟。代码生成成功:查看报告

这个部署函数开始生成raspi_fileRead_resnet函数。

成功生成代码后,支持包将对象分类算法作为独立的可执行文件加载到硬件上。金宝app可执行文件的位置显示在MATLAB命令窗口中。注意位置,以便以后使用。

步骤6:将图像文件复制到Raspberry Pi

  1. 成功生成代码生成报告后,单击查看报告MATLAB命令窗口

  2. MATLAB编码器报告查看器窗口,建立日志选项卡,复制生成的elf的位置。

  3. 复制图像文件到硬件进行预测,使用putFile。

在这个例子中,coffeemug.png是可执行文件的图像输入,可执行文件的位置与您在上一步中注意到的位置相同。

4.您可以提供您选择的输入图像,并使用以下语法将其复制到生成的elf的位置:

R.putfile ('','<从代码生成报告>中复制的生成elf的目标位置')

在这个例子中,coffeemug.png是可执行文件的图像输入,可执行文件的位置为/home/pi/MATLAB_ws_R2021a / C /用户/文件/ MATLAB / / raspberrypiio-ex31623069例子

r.putFile(“coffeemug.png”、“/ home /π/ MATLAB_ws / R2021a / C /用户/文件/ MATLAB /例子/ raspberrypiio-ex31623069”)

步骤7:运行可执行程序获取预测分数

要使用Raspberry Pi打开SSH终端,请在MATLAB命令窗口中使用此命令。

openShell(r)

在终端中输入树莓派的用户名和密码登录。

将当前目录更改为保存可执行文件的目录。

cd /home/pi/MATLAB_ws/R2021a/C/Users/Documents/MATLAB/Examples/raspberrypiio-ex31623069

在树莓派上运行可执行文件,提供coffee.png映像作为可执行文件的输入。

sudo。/ raspi_fileRead_resnet。精灵coffeemug.png

可执行文件开始对图像文件中的对象进行分类,然后预测对象并显示其标签以及与对象类别关联的概率。

另见