在树莓派上使用深度学习分类静态图像
本示例向您展示如何使用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:拷贝镜像文件到树莓派
成功生成代码生成报告后,单击查看报告在MATLAB命令窗口.
在MATLAB编码器报告查看器窗口,在建立日志选项卡,复制生成精灵的位置。
将映像文件复制到硬件进行预测,使用
putFile。
在这个例子中,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
可执行文件开始对图像文件中的对象进行分类,然后预测对象并显示其标签和与对象类别相关的概率。