手把手教你用Edgeboard部署模型(二):BML离线部署

P粉084495128
发布: 2025-08-01 10:30:00
原创
319人浏览过
本文介绍通过BML模型部署方式将模型部署到EdgeBoard。先讲BML全功能AI开发平台的优势及与EdgeBoard的适配,再说明在BML上训练安全帽检测模型的步骤,接着阐述准备离线部署模型、EdgeBoard联网操作,最后讲解BML模型部署的编译SDK及测试单张图片预测、HTTP服务部署、视频流预测等效果。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

手把手教你用edgeboard部署模型(二):bml离线部署 - php中文网

背景介绍

EdgeBoard嵌入式AI解决方案是百度面向嵌入式与边缘计算场景打造的系列软硬件方案。丰富的软硬件选型,可适应多变的场景与边缘部署环境。无缝兼容百度大脑工具平台与算法模型,开发者可轻松上手,集成应用。

在该系列的第一个项目中,我们研究了如何将基于PaddleX训练的自定义模型部署到EdgeBoard,详见:手把手教你用Edgeboard部署模型(一):PaddleX+YoloV3

在本文中,我们探讨EdgeBoard支持的另一种模型训练、部署方式,BML模型部署。

BML模型训练

BML 全功能AI开发平台

BML全功能AI开发平台是一个面向企业和个人开发者的机器学习集成开发环境,提供兼具效果与性能的卓越AI开发体验,有高性能的算力支持、强大的数据处理服务、高精度训练效果、丰富完善的开发方案、广泛适配的模型推理服务、全面丰富的交付方案诸多优势,为经典机器学习和深度学习提供了从数据处理、模型训练、模型管理到模型推理的全生命周期管理服务,帮助用户更快的构建、训练和部署模型。与EdgeBoard合作推出软硬一体方案。将EdgeBoard与BML模型深度适配,可应用于工业分拣、视频监控等多种设备端离线计算场景,让离线AI落地更轻松。

虽然是收费平台,但是现在正在搞活动,因此本文的操作其实都可以免费完成,序列号有90天有效期。        

  • BML全功能开发平台主页:https://ai.baidu.com/bml/
  • BML使用文档请参考:https://ai.baidu.com/ai-doc/BML/Ekhvg0smz
  • BML中适用于Edgeboard的模型请参考:https://ai.baidu.com/bml/app/adapt?templateType=undefined&soc=edgeboard

在BML上训练安全帽检测模型

这里直接使用了BML官方3日打卡课的教程,不仅包括了如何训练模型,还能免费薅算力        

  • DAY1:创建数据集和模型
  • DAY2:模型训练并发布
  • DAY3:创建在线服务并调用

其实仅就这个项目而言,第三步不做也行,不过读者也可以参考,毕竟离线部署的操作和在线部署前面有些类似。

——当然了,还可以领算力卡,操作下也没坏处。        

需要注意的是,如果我们想要在EdgeBoard部署BML训练的模型,首先要确保网络结构EdgeBoard可以支持。当然,如果是教程里的示例,EB是可以支持的,具体可以查看支持列表。手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

准备EdgeBoard离线部署模型

这边其实没太多难点,跟着文档一步步走就行。

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

模型发布完成后,从【服务详情】里点进去,下载SDK获取序列号

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

如果我们只是要测试下效果,申请个临时的测试序列号就行啦。

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

最终,我们得到了一个zip格式的SDK压缩包,以及一串序列号。SDK压缩包(文件做了重命名)中内容如下:

EasyEdge/
├── RES #模型文件│   ├── conf.json
│   ├── label_list.txt
│   ├── model
│   ├── params
│   └── preprocess_args.json
├── cpp 
│   ├── baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.4_gcc7.5_v1.3.2_20210824 # 支持的是旧版软核,本文不用│   └── baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.5_gcc7.5_v1.3.2_20210824
│       ├── bin #demo可执行文件│       ├── include #头文件│       │   └── easyedge
│       ├── lib #动态库│       ├── src #demo源文件│       │   ├── CMakeLists.txt
│       │   ├── cmake
│       │   ├── common
│       │   ├── demo_image_inference #图像推理demo│       │   ├── demo_serving #http服务demo│       │   └── demo_video_inference #视频推理demo│       └── thirdparty 
│           └── opencv
登录后复制
   

EdgeBoard联网操作

修改时间

应当注意的是,使用BML模型是需要用序列号激活的,激活需要联网——而且还会比对序列号的有效期,所以一定要把EdgeBoard的默认时间改过来。

# 修改系统时间date --set "2021-10-04 20:48:00"
登录后复制
       

通过电脑共享网络

参考EdgeBoard连接外网方式,由于在本文中EdgeBoard是和计算机通过网线直连,因此选择了【通过电脑共享网络】的方式。

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

EdgeBoard直连电脑的情况下,可以将电脑的无线网络分享给本地连接,如下图更改无线网络连接属性,勾选interface连接共享,此时本地连接ip地址变为192.168.137.1。同时更改EdgeBoard的ip地址也在137网段,更改方法参见EdgeBoard ip地址修改,EdgeBoard更改后重启。 注意:如果电脑在共享属性下没有家庭网络连接的选项,会共享不成功。

EdgeBoard修改临时联网IP

sudo ifconfig eth0 192.168.137.254/24
sudo route add default gw 192.168.137.1 eth0echo “nameserver 8.8.8.8” > /etc/resolve.conf
登录后复制
       

再次查看目前的网络配置

edgeboard-183:~# ifconfigeth0      Link encap:Ethernet  HWaddr 00:0a:35:ac:c1:db
          inet addr:192.168.137.30  Bcast:192.168.137.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:35ff:feac:c1db/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST DYNAMIC  MTU:1500  Metric:1
          RX packets:2267 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3737 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:133368 (130.2 KiB)  TX bytes:488014 (476.5 KiB)
          Interrupt:31

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1159 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1159 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:92488 (90.3 KiB)  TX bytes:92488 (90.3 KiB)
登录后复制
       

确认联网成功

edgeboard-183:~# ping www.baidu.comPING www.baidu.com (163.177.151.110): 56 data bytes
64 bytes from 163.177.151.110: seq=0 ttl=51 time=31.706 ms
64 bytes from 163.177.151.110: seq=1 ttl=51 time=55.466 ms
64 bytes from 163.177.151.110: seq=2 ttl=51 time=35.449 ms
64 bytes from 163.177.151.110: seq=3 ttl=51 time=30.011 ms
64 bytes from 163.177.151.110: seq=4 ttl=51 time=70.884 ms
登录后复制
       

需要注意的是,以上方法只是临时的,因为重启EdgeBoard后,ip又变回默认设置了。

edgeboard-183:~# ifconfigeth0      Link encap:Ethernet  HWaddr 00:0a:35:ac:c1:db
          inet addr:192.168.1.254  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20a:35ff:feac:c1db/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST DYNAMIC  MTU:1500  Metric:1
          RX packets:205 errors:0 dropped:0 overruns:0 frame:0
          TX packets:121 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15505 (15.1 KiB)  TX bytes:18076 (17.6 KiB)
          Interrupt:31

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1227 (1.1 KiB)  TX bytes:1227 (1.1 KiB)
登录后复制
       

如果读者需要长期使用BML模型,可以修改EdgeBoard网络配置文件/etc/network/interface,本文只是个测试,因此就先用临时方案了。

BML模型部署

编译SDK

首先把SDK文件上传到EB,然后重新编译(文档中预编译的方案执行不成功)

注意到,FZ3A这个板卡其实存储空间不大,如果按照上一篇文章的操作,到这里有可能SDK因剩余存储空间不足而上传失败。可以考虑删除旧版软核等文件,释放一下存储。

可图大模型
可图大模型

可图大模型(Kolors)是快手大模型团队自研打造的文生图AI大模型

可图大模型32
查看详情 可图大模型
# 解压sdkunzip EasyEdge.zip# 解压tar.gzcd EasyEdge/cpp
tar xvf baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.5_gcc7.5_v1.3.2_20210824.tar.gz
登录后复制
       
#进入src目录,cd src
mkdir build #创建build文件夹cd build #打开build文件夹rm -rf * #清空build文件夹cmake .. #调用cmake 创建Makefilemake #编译工程
登录后复制
       

整个编译过程其实花的时间挺短的,很快就成功了。手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

编译完成后,build文件夹下会产生demo_image_inference、demo_serving、demo_video_inference三个装有对应可执行文件的文件夹,进入对应文件夹目录,执行相应的功能,执行成功任意一个demo,就可以激活成功。

测试效果

单张图片预测

这里的【RES资源文件夹路径】其实就是放模型的那个目录

# 进入build文件夹cd ~/workspace/EasyEdge/cpp/baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.5_gcc7.5_v1.3.2_20210824/src/build/demo_image_inference# 设置LD_LIBRARY_PATH为SDK部署包中的lib目录export LD_LIBRARY_PATH=../../lib# 执行easyedge_image_inference {RES资源文件夹路径} {测试图片路径} {序列号}./easyedge_image_inference ../../../../../RES/ ../../../../../RES/1.jpeg "1111-1111-1111-1111"
登录后复制
   

实际执行效果如下:选用了上一个项目放进去的安全帽检测图片,指定绝对路径预测,部署后会直接在原来路径下生成结果文件。

edgeboard-183:~/workspace/EasyEdge/cpp/baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.5_gcc7.5_v1.3.2_20210824/src/build/demo_image_inference# ./easyedge_image_inference ../../../../../RES/ /home/root/workspace/PaddleLiteDemo/res/models/detection/mask-yolov3/img/7bd3af20a5eb1085a9282e65b3a683dc.jpg "0406-DFD4-3DA0-0703"result size : 2
2, helmet, p:0.965438, coordinate: 0.484771, 0.0180491, 0.737253, 0.471222
2, helmet, p:0.91078, coordinate: 0.247744, 0, 0.446785, 0.361257
save result image to /home/root/workspace/PaddleLiteDemo/res/models/detection/mask-yolov3/img/7bd3af20a5eb1085a9282e65b3a683dc.jpg.result-cpp.jpg
Done
登录后复制
   

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

HTTP服务部署

可以将单张图片预测的服务,发布到指定的ip和端口

# 进入build文件夹cd ~/workspace/EasyEdge/cpp/baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.5_gcc7.5_v1.3.2_20210824/src/build/demo_serving# ./easyedge_serving {RES资源文件夹路径} {序列号} {host, default 0.0.0.0} {port, default 24401}
 ./easyedge_serving ../../../RES "1111-1111-1111-1111" 0.0.0.0  24401
登录后复制
   
./easyedge_serving ../../../../../RES/ "0406-DFD4-3DA0-0703" 0.0.0.0  24401
登录后复制
       

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

视频流预测

SDK包含视频推理的demo,如果给一段视频,执行结果会以视频存储的方式将预测出的视频帧保存成build目录下的0.result.mp4文件。

# 进入build文件夹cd ~/workspace/EasyEdge/cpp/baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.5_gcc7.5_v1.3.2_20210824/src/build/demo_video_inference# 执行方式:easyedge_image_inference {RES_dir} {video_type} {video_src} {serial_rum}./easyedge_video_inference ../../../../../RES/ 1 /home/root/video.mp4 "1111-1111-1111-1111"
登录后复制
       

easyedge_image_inference参数定义:

RES_dir :模型存放目录

video-type:视频类型,1表示本地视频,视频位置写本地视频位置;2表示使用摄像头输入,目前只支持usb免驱摄像头,视频位置写摄像头的index,可在系统中执行ls /dev/video*查看插入的摄像头index,如果是/dev/video2,则视频位置写2。

video_src:视频位置,如果视频类型为1,写本地视频视频位置;如果视频类型为2,写摄像头index。

serial_rum:序列号,如果设备已激活,该参数可选。

注意: demo_video_inference功能暂不支持display,不支持接入minidp显示器实时显示。

不过,这里我们使用的视频流预测,是直接通过外接摄像头实现的。

注意,这里有个坑,如果装了摄像头但是出现Cannot open source: /dev/video0的报错,原因是因为这个摄像头资源被占用了。

抢占资源的就是在前置项目中配置的EdgeBoard管理系统!!!管理系统开机默认启动,如果对摄像头做了配置,一开机管理系统就把摄像头的资源拿走了!!!

最快的解决办法,就是把管理系统摄像头的路径编辑一下,然后重启!(不要删除摄像头,不然以后还得重新配置)

手把手教你用Edgeboard部署模型(二):BML离线部署 - php中文网        

预测效果如下:可以看出,视频流是一帧一帧预测的。

edgeboard-183:~/workspace/EasyEdge/cpp/baidu_easyedge_linux_cpp_aarch64_EdgeBoardFZ1.5_gcc7.5_v1.3.2_20210824/src/build/demo_video_inference# ./easyedge_video_inference ../../.A0-0703"input fps: 30, width: 640, height: 480
2021-10-06 00:56:13,929 INFO [EasyEdge] 547565068304 ==== frame id: 0 ====
2021-10-06 00:56:13,929 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.936849, coordinate: 0.265797, 0.303112, 0.595704, 0.854871
2, helmet, p:0.308001, coordinate: 0.246313, 0.32209, 0.608355, 0.883078
2021-10-06 00:56:14,755 INFO [EasyEdge] 547565068304 ==== frame id: 1 ====
2021-10-06 00:56:14,755 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.936849, coordinate: 0.265797, 0.303112, 0.595704, 0.854871
2, helmet, p:0.308001, coordinate: 0.246313, 0.32209, 0.608355, 0.883078
2021-10-06 00:56:14,898 INFO [EasyEdge] 547565068304 ==== frame id: 2 ====
2021-10-06 00:56:14,898 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.86643, coordinate: 0.226212, 0.341875, 0.563942, 0.821873
2021-10-06 00:56:15,076 INFO [EasyEdge] 547565068304 ==== frame id: 3 ====
2021-10-06 00:56:15,076 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.885813, coordinate: 0.211774, 0.33184, 0.562473, 0.858988
2, helmet, p:0.337755, coordinate: 0.193702, 0.275792, 0.589217, 0.817867
2021-10-06 00:56:15,249 INFO [EasyEdge] 547565068304 ==== frame id: 4 ====
2021-10-06 00:56:15,249 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.887917, coordinate: 0.2062, 0.340431, 0.550655, 0.871187
2, helmet, p:0.277928, coordinate: 0.181167, 0.299305, 0.578772, 0.826651
2021-10-06 00:56:15,415 INFO [EasyEdge] 547565068304 ==== frame id: 5 ====
2021-10-06 00:56:15,415 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.762959, coordinate: 0.281878, 0.289703, 0.60245, 0.797125
2, helmet, p:0.333646, coordinate: 0.230875, 0.251128, 0.60219, 0.811976
2021-10-06 00:56:15,612 INFO [EasyEdge] 547565068304 ==== frame id: 6 ====
2021-10-06 00:56:15,612 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.962207, coordinate: 0.273251, 0.282059, 0.586766, 0.821948
2, helmet, p:0.247164, coordinate: 0.240881, 0.232974, 0.580364, 0.793412
2021-10-06 00:56:15,798 INFO [EasyEdge] 547565068304 ==== frame id: 7 ====
2021-10-06 00:56:15,798 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.91732, coordinate: 0.259767, 0.265151, 0.580276, 0.778973
2, helmet, p:0.295565, coordinate: 0.222856, 0.232002, 0.571475, 0.769648
2021-10-06 00:56:15,971 INFO [EasyEdge] 547565068304 ==== frame id: 8 ====
2021-10-06 00:56:15,971 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.974546, coordinate: 0.279582, 0.304269, 0.582712, 0.83014
2, helmet, p:0.208045, coordinate: 0.230546, 0.236246, 0.5774, 0.792106
2021-10-06 00:56:16,150 INFO [EasyEdge] 547565068304 ==== frame id: 9 ====
2021-10-06 00:56:16,150 INFO [EasyEdge] 547565068304 is_needed: true3, head, p:0.979111, coordinate: 0.269361, 0.317251, 0.584749, 0.849518
2, helmet, p:0.223544, coordinate: 0.226171, 0.260796, 0.565521, 0.80769
登录后复制
   

以上就是手把手教你用Edgeboard部署模型(二):BML离线部署的详细内容,更多请关注php中文网其它相关文章!

Edge浏览器
Edge浏览器

Edge浏览器是由Microsoft(微软中国)官方推出的全新一代手机浏览器。Edge浏览器内置强大的搜索引擎,一站搜索全网,搜文字、搜图片,快速识别,帮您找到想要的内容。有需要的小伙伴快来保存下载体验吧!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号