主要内容

在树莓派上使用深度学习分类静态图像

本示例向您展示如何使用MATLAB®支持包为树莓派硬件生成和部署图像分类算法的代码。金宝app该算法使用ResNet-50神经网络来识别使用树莓派命令行作为输入传递的图像。

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

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

所需的硬件

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

  • USB电缆

  • 以太网电缆

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

先决条件

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

步骤1:连接树莓派硬件

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

将USB数据线的微型一端连接到树莓派,将USB数据线的普通一端连接到计算机。等待硬件上的PWR指示灯开始闪烁。

在MATLAB®命令窗口中,创建到树莓派硬件的连接。

R =树
r =带属性的raspi: DeviceAddress: '172.31.164.186'端口:18734 BoardName: '树莓派Model 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
The MathWorks, Inc. assert(all(size(fileName) <= 50));断言(isa(文件名,“字符”));%初始化DNN,输入大小net = code . loaddeeplearningnetwork ('resnet50');inputSize = [224, 224,3];% net.Layers .InputSize (1);%读取图像imgSizeAdjusted = readResizedImg(fileName,inputSize);%对输入图像进行分类[label,score] = net. classification (imgSizeAdjusted);labelStr = cellstr(label);maxScore = max(分数);outputStr = sprintf('Label: %s \nScore: %f',labelStr{:},maxScore); %Print label and score to stdout fprintf('%s\n',outputStr); end

方法修改该函数编辑命令。

编辑raspi_fileRead_resnet

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

属性创建硬件配置对象targetHardware函数在MATLAB命令窗口。

board = targetHardware(“树莓π”);

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

董事会。DeviceAddress =“172.18.186.123”

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

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

创建一个arm-compute深度学习配置对象。指定树莓派的架构。

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

使用实例显示树莓派上的ARM计算库版本。

r.system ($ ARM_COMPUTELIB / lib / libarm_compute的字符串。| grep arm_compute_versio | cut -d\ -f 1'
Ans = 'arm_compute_version=v20.02.1 '

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

dlcfg。ArmComputeVersion =“20.02.1”
dlcfg = ARMNEONConfig with properties: ArmComputeVersion: '20.02.1' ArmArchitecture: 'armv7' DataType: 'fp32' CalibrationResultFile: " TargetLib: 'arm-compute'

设置DeepLearningConfig将代码生成配置对象配置为深度学习配置对象。

board.CoderConfig.DeepLearningConfig = dlcfg
board = targetHardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.31.164.186' Username: ' Pi' Password: '*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1 coder。CodeConfig]

将该功能部署到硬件上部署函数。的部署函数的代码生成raspi_fileRead_resnet函数。代码生成完成后,MATLAB生成代码生成报告。使用此报告调试生成代码中的任何错误和警告。

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

部署(板、“raspi_fileRead_resnet”
代码生成成功:查看报告

第四步:将树莓派的c++ Main File编辑为Accept Input from Command Line

介绍如何修改main.cpp使用树莓派的命令行提供输入。一个premodifiedmain.cpp文件可供您使用。您可以选择使用预修改的文件,或者使用本节中的步骤手动更新文件。

使用预修改main.cpp在MATLAB命令窗口中输入此命令。

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

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

步骤5:将函数部署为树莓派上的独立可执行文件

要在硬件上生成和部署代码,请设置CoderConfig。GenCodeOnly的属性董事会对象然后使用部署函数。自部署函数重写main.cpp您在上一节中编辑的文件,在部署之前禁用该文件的创建。

board.CoderConfig.CustomSource = [“codegen”filesep,exe”filesep,“raspi_fileRead_resnet”filesep,“main.cpp”];board.CoderConfig.GenerateExampleMain =“DoNotGenerate”;board.CoderConfig.GenCodeOnly = false
board = targetHardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.31.164.186' Username: ' Pi' Password: '*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1 coder。CodeConfig]
部署(板、“raspi_fileRead_resnet”
部署代码。这可能需要几分钟。代码生成成功:查看报告

部署函数的代码生成raspi_fileRead_resnet函数。

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

步骤6:拷贝镜像文件到树莓派

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

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

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

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

coffeemug.png

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

R.putfile('<输入图像>','<从代码生成报告>复制的生成精灵的目标位置')

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

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

第七步:运行可执行程序获得预测分数

使用树莓派打开SSH终端,请在“MATLAB命令窗口”中使用该命令。

openShell(右)

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

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

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

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

sudo。/ raspi_fileRead_resnet。精灵coffeemug.png

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

raspberrypi_ssh_resnet50_output.png

另请参阅