基于BM1684的AI边缘服务器-模型转换,大模型一体机

介绍

我们属于SoC模式,即我们在x86主机上基于tpu-nntc和libsophon完成模型的编译量化与程序的交叉编译,部署时将编译好的程序拷贝至SoC平台(1684开发板/SE微服务器/SM模组)中执行。

注:以下都是在Ubuntu20.04系统上操作的,当然Ubuntu18和22也是可以的,因为我们主要是用的官方 docker 环境进行配置。

准备工作

安装docker

首先安装docker

# 更新一下库 
sudo apt-get update
sudo apt-gefat upgrade
# 安装 docker 
sudo apt-get install docker.io
# docker命令免root权限执行 
# 创建docker用户组,若已有docker组会报错,没关系可忽略
sudo groupadd docker  
# 将当前用户加入docker组
sudo gpasswd -a ${USER} docker 
# 重启docker服务 
sudo service docker restart  
# 切换当前会话到新group或重新登录重启X会话 
newgrp docker  

我已经装docker了,这一步没有测试,若有问题请问百度。

下载SDK

在算能官网上,资料下载里下载相关sdk:技术资料

基础工具包包括:

  • tpu-nntc 负责对第三方深度学习框架下训练得到的神经网络模型进行离线编译和优化,生成最终运行时需要的BModel。目前支持Caffe、Darknet、MXNet、ONNX、PyTorch、PaddlePaddle、TensorFlow等。
  • libsophon 提供BMCV、BMRuntime、BMLib等库,用来驱动VPP、TPU等硬件,完成图像处理、张量运算、模型推理等操作,供用户进行深度学习应用开发。
  • sophon-mw 封装了BM-OpenCV、BM-FFmpeg等库,用来驱动VPU、JPU等硬件,支持RTSP流、GB28181流的解析,视频图像编解码加速等,供用户进行深度学习应用开发。
  • sophon-sail 提供了支持Python/C++的高级接口,是对BMRuntime、BMCV、BMDecoder、BMLib等底层库接口的封装,供用户进行深度学习应用开发。

可以下载这个SDK

image-20230419114430498

这里面包含了models里的所有代码,当然里面很多包是用不到的。

image-20230419114506989

也可以只下载我们需要的sdk

主要是这几个:

tpu-nntc

libsophon

sophon-mw

sophon-demo

sophon-img

sophon-sail

sophon-demo

分别wget 到本地就行,

# 先建个存放的路径
mkdir fugui
# 分别wget 到本地就行
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/10/libsophon_20221027_214818.zip   https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/11/sophon-mw_20221027_183429.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-demo_20221027_181652.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-img_20221027_215835.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-sail_20221026_200216.zip https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/11/28/15/sophon-demo_20221027_181652.zip
配置环境

装上解压缩工具

sudo apt-get install unzip

先把这几个压缩文件解压了

unzip \*.zip

创建docker容器:

#如果当前系统没有对应的镜像,会自动从docker hub上下载;此处将tpu-nntc的上一级目录映射到docker内的/workspace目录;这里用了8001到8001端口的映射(使用ufw可视化工具会用到端口号)。如果端口已被占用,请根据实际情况更换为其他未占用的端口。
:~/fugui# docker run -v $PWD/:/workspace  -it sophgo/tpuc_dev:latest

进入 tpu-nntc,解压缩包

root@39d67fa4c7bb:/workspace/fugui/tpu-nntc_20221028_200521# tar -zxvf  tpu-nntc_v3.1.3-242ef2f9-221028.tar.gz

进入tpu-nntc_v3.1.3-242ef2f9-221028 运行一下命令初始化软件环境

source scripts/envsetup.sh

image-20230419153738140

在下载tensorflow时比较慢,我们都是用pytorch,直接ctrl c跳过,不装他了。

yolov5

这里就不演示官方模型了,直接用我们自己训练的模型进行量化推理。

注意:这里必须用yolov5 v6.1版本

如何训练就不说了,参考:这篇文章

最好使用yolov5s训练,然后对训练后的模型进行转换。比如我训练的是安全帽检测,现在生成了best.pt这个权重文件,为了好区分我改名为anquanmao.pt

将他放在了yolov5的根目录下,然后修改了models文件下的yolo.py中的forward函数。将return x if self.training else (torch.cat(z, 1), x) 修改为:

return x if self.training else x

image-20230419155833459

然后运行

 python export.py --weight anquanmao.pt --include torchscript

这样生成了 anquanmao.torchscript 文件

image-20230419160201616

image-20230419160211412

打开这个权重文件看看是不是和我的一样,只要是yolov5 6.1就肯定一样。

修改 anquanmao.torchscript 为 anquanmao.torchscript.pt (就是在最后加个.pt)

然后将这个文件拷贝到你的x86服务器里,路径为:

/root/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/data

然后找些你训练的图片,也就是安全帽,200张左右就行

同样上传到那个文件夹里

image-20230419161259835

然后就可以进行模型转换了

# 先备份一下
root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# cp 2_2_gen_int8bmodel.sh 3_2_gen_int8bmodel.sh 
vi cp 2_2_gen_int8bmodel.sh

然后修改里面内容,200太多了,转换起来太慢了,50就够了

image-20230419161524150

修改model_info.sh

root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# vi model_info.sh 
echo "start fp32bmodel transform, platform: ${platform} ......"root_dir=$(cd `dirname $BASH_SOURCE[0]`/../ && pwd)
build_dir=$root_dir/build
# 将这里修改为我们刚才存放的.torchscript.pt文件地址
src_model_file=${root_dir}/data/anquanmao.1_3output.torchscript.pt
src_model_name=`basename ${src_model_file}`
# 这里也修改下吧 yolov5s ——> anquanmao
dst_model_prefix="anquanmao"
dst_model_postfix="coco_v6.1_3output"
fp32model_dir="${root_dir}/data/models/${platform}/fp32model"
int8model_dir="${root_dir}/data/models/${platform}/int8model"
lmdb_src_dir="${root_dir}/data/images"
# 这里修改为我们上传的图片地址
image_src_dir="${root_dir}/data/anquanmao"
# lmdb_src_dir="${build_dir}/coco2017val/coco/images/"
#lmdb_dst_dir="${build_dir}/lmdb/"
img_size=${2:-640}
batch_size=${3:-1}
iteration=${4:-2}
img_width=640
img_height=640

运行转换命令前需要加上权限,否则不能执行

root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# sudo chmod 777 *

然后执行转int8bmodel模型,转FP32也一样

root@39d67fa4c7bb:/workspace/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/scripts# ./ 2_2_gen_int8bmodel.sh

性能不好的机器会非常慢,等待完成即可

编译yolov5 c++程序

/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# 
cd cpp/deepsort_bmcv 
mkdir build && cd build	
# 请根据实际情况修改-DSDK的路径,需使用绝对路径 
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk .. 
make

复制到开发板

scp ../yolov5_bmcv.soc linaro@192.168.17.153:/data/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv

开发板运行

linaro@bm1684:/data/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv$ ./yolov5_bmcv_drawr.soc --input=rtsp://admin:sangfor@123@192.168.17.253 --bmodel=BM1684/yolov5s_v6.1_3output_int8_1b.bmodel

目标追踪

注:所有模型转换都是在docker环境中的

先进入docker

这里我们是要在docker环境里编译的,所以先进入docker

:~/tpu-nntc# docker run -v $PWD/:/workspace  -it sophgo/tpuc_dev:latest

初始化环境

root@2bb02a2e27d5:/workspace/tpu-nntc# source ./scripts/envsetup.sh

docker里安装编译器

root@2bb02a2e27d5:/workspace/sophon-demo/sample/YOLOv5/cpp/yolov5_bmcv/build# sudo apt-get install  gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libeigen3-dev

本C++例程依赖Eigen,您需要在编译c++程序的机器上运行如下命令安装:

sudo apt install libeigen3-dev

先下载相关文件,主要是追踪的测试视频,测试图片,目标追踪的权重,目标检测的权重

# 安装unzip,若已安装请跳过
sudo apt install unzip
chmod -R +x scripts/
./scripts/download.sh

然后编译c++代码

/workspace/sophon-demo/sample/DeepSORT/cpp/deepsort_bmcv/build# 
cd cpp/deepsort_bmcv
mkdir build && cd build
# 请根据实际情况修改-DSDK的路径,需使用绝对路径。
cmake -DTARGET_ARCH=soc -DSDK=/workspace/soc-sdk ..  
make

这时会生成deepsort_bmcv.soc文件,复制到盒子里

:/workspace/sophon-demo/sample/DeepSORT/cpp/deepsort_bmcv# scp -r  deepsort_bmcv.soc linaro@192.168.17.125:/data/yolo/sophon-demo/sample/DeepSORT/cpp

测试视频

./deepsort_bmcv.soc --input=rtsp://admin:sangfor@123@192.168.17.253 --bmodel_detector=../../BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor=../../BM1684/extractor_fp32_1b.bmodel --dev_id=0

运行相关代码,这个是检测图片的

cd python
python3 deepsort_opencv.py --input ../datasets/mot15_trainset/ADL-Rundle-6/img1 --bmodel_detector ../models/BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor ../models/BM1684/extractor_fp32_1b.bmodel --dev_id=0

对视频追踪

python3 deepsort_opencv.py --input ../datasets/test_car_person_1080P.mp4 --bmodel_detector ../models/BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor ../models/BM1684/extractor_fp32_1b.bmodel --dev_id=0

对本地摄像头视频追踪

python3 deepsort_opencv.py --input rtsp://admin:sangfor@123@192.168.17.253 --bmodel_detector ../models/BM1684/yolov5s_v6.1_3output_int8_1b.bmodel --bmodel_extractor ../models/BM1684/extractor_fp32_1b.bmodel --dev_id=0

人体姿态估计

python3 python/openpose_opencv.py --input rtsp://admin:sangfor@123@192.168.17.253 --bmodel models/BM1684/pose_coco_fp32_1b.bmodel --dev_id 0

生成的文件会放在sample/YOLOv5/data/models/BM1684/int8model/anquanmao_batch1

:~/fugui/sophon-demo_20221027_181652/sophon-demo_v0.1.0_b909566_20221027/sample/YOLOv5/data/models/BM1684/int8model/anquanmao_batch1# ls
compilation.bmodel  input_ref_data.dat  io_info.dat  output_ref_data.dat

然后将转换好的模型推送到开发板

scp compilation.bmodel linaro@{开发板ip地址}:/data/{你的yolov5存放路径}

开发板环境配置

搭建 libsophon 环境

cd libsophon_<date>_<hash>
# 安装依赖库,只需要执行一次
sudo apt install dkms libncurses5
sudo dpkg -i sophon-*.deb
# 在终端执行如下命令,或者log out再log in当前用户后即可使用bm-smi等命令
source /etc/profile

python3 yolov5_new_1.py --input rtsp://admin:1111111a@192.168.16.223 --bmodel yolov5s_v6.1_3output_fp32_1b.bmodel

===========板卡介绍========================

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis+Caffeine 多级缓存数据一致性解决方案

RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战&#xff0c;文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能&#xff0c;但是可能会出现缓存一致性问题。如果数据频繁的变更&#xff0c;可能会导…

计算机网络——不同版本的 HTTP 协议

介绍 HTTP&#xff0c;即超文本传输协议&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;是应用层的一个简单的请求-响应协议&#xff0c;它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。 HTTP/1.0 HTTP/1…

【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码

系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…

P1319 压缩技术 P1320 压缩技术(续集版)

题目传送门 P1319 压缩技术 P1320 压缩技术&#xff08;续集版&#xff09; P1319 压缩技术 输入格式 数据输入一行&#xff0c;由空格隔开的若干个整数&#xff0c;表示压缩码。 其中&#xff0c;压缩码的第一个数字就是 N N N&#xff0c;表示这个点阵应当是 N N N\t…

【CSS】一篇掌握CSS

不是因为有了希望才去坚持,而是坚持了才有了希望 目录 一.导入方式 1.行内样式 2.内部样式 3.外部样式(常用) 二.选择器 1.基本选择器(常用) 1.1标签选择器 1.2类选择器 1.3id选择器 2.层次选择器 2.1后代选择器 2.2子选择器 2.3相邻兄弟选择器 2.4通用兄弟选择器…

linux 获取公网流量 tcpdump + python + C++

前言 需求为&#xff0c;统计linux上得上下行公网流量&#xff0c;常规得命令如iftop 、sar、ifstat、nload等只能获取流量得大小&#xff0c;不能区分公私网&#xff0c;所以需要通过抓取网络包并排除私网段才能拿到公网流量。下面提供了一些有效得解决思路&#xff0c;提供了…

Rain后台权限管理系统,快速开发

这段时间一直没有更新&#xff0c;因为在写一个脚手架&#xff0c;今天Rain项目终于完工&#xff0c;已经发布到github,免费使用 项目github链接 https://github.com/Rain-hechang/Rain 简介 前端采用Vue3.x、Element UI。 后端采用Spring Boot、Spring Security、Redis &…

scroll-view组件,在iOS设备上禁用橡皮筋回弹效果

问题描述 在实现uniapp微信小程序的一个项目时&#xff0c;ios真机测试&#xff0c;scroll-view组件可以向下拉动一段距离然后又回弹。 如下图 解决方法&#xff1a; 可以通过设置scroll-view组件的属性来禁用橡皮筋回弹效果。如下&#xff0c;设置enhanced"true&…

【AI系统】昇腾异构计算架构 CANN

昇腾异构计算架构 CANN 本文将介绍昇腾 AI 异构计算架构 CANN&#xff08;Compute Architecture for Neural Networks&#xff09;&#xff0c;这是一套为高性能神经网络计算需求专门设计和优化的架构。CANN 包括硬件层面的达芬奇架构和软件层面的全栈支持&#xff0c;旨在提供…

csv文件的上传、解析和获得最后的数据

前端和node端解析、读取csv文件的区别 1、前端 运行环境为浏览器&#xff0c;受到浏览器安全策略的限制&#xff0c;例如跨域请求、文件访问权限等。对于大型CSV文件的处理可能会受到性能瓶颈的影响。前端运行在用户的浏览器中&#xff0c;受到浏览器安全策略的限制&#xff…

Python学习------第十五天

1.异常的捕获方式&#xff1a; #基本捕获语法 try:f open("D:/abc.txt","r",encoding"UTF-8") except:print("出现异常了&#xff0c;因为文件不存在&#xff0c;我将open模式改为w模式去打开")f open("D:/abc.txt", &quo…

THENA大涨将对整个DeFi市场产生怎样的影响?

引言 近期&#xff0c;区块链行业的一个热门项目——THENA&#xff08;THE&#xff09;代币&#xff0c;在短时间内吸引了大量投资者的目光。THE代币的价格在短短几个月内经历了显著的上涨&#xff0c;引发了市场对其背后机制的浓厚兴趣。而在THENA生态系统的成功背后&#xf…

Kubernetes命名空间详解

目录 目标 版本 官网 概述 namespace&#xff08;命名空间、名称空间&#xff09; 注意事项 基本命令 查看namespace列表 查看所有Pod的namespace 查看单个Pod的namespace 查看同一个namespace下的所有Pod 查看单个namespace资源配额 查看单个Pod详情 查看所有na…

【开源】A059-基于SpringBoot的社区养老服务系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…

【AI系统】算子开发编程语言 Ascend C

算子开发编程语言 Ascend C 本节将深入探讨昇腾算子开发编程语言 Ascend C&#xff0c;这是一种专为昇腾 AI 处理器算子开发设计的编程语言&#xff0c;它原生支持 C 和 C标准规范&#xff0c;最大化匹配用户的开发习惯。Ascend C 通过多层接口抽象、自动并行计算、孪生调试等…

Python基于大数据的微博的舆情分析,机器学习的微博情感分析系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

WPF+LibVLC开发播放器-LibVLC播放控制

接上一篇&#xff1a; LibVLC在C#中的使用 实现LibVLC播放器播放控制 界面 界面上添加一个Button按钮用于控制播放 <ButtonGrid.Row"1"Width"88"Height"24"Margin"10,0,0,0"HorizontalAlignment"Left"VerticalAlignme…

【设计模式系列】中介者模式(十八)

一、什么是中介者模式 中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心思想是通过一个中介者对象来封装一系列对象之间的交互&#xff0c;使这些对象不需要相互显式引用。中介者模式提供了一个中介层&#xff0c;用以协调各个对象…

【AI系统】Ascend C 编程范式

Ascend C 编程范式 AI 的发展日新月异&#xff0c;AI 系统相关软件的更新迭代也是应接不暇&#xff0c;作为一本讲授理论的作品&#xff0c;我们将尽可能地讨论编程范式背后的原理和思考&#xff0c;而少体现代码实现&#xff0c;以期让读者理解 Ascend C 为何这样设计&#x…

是什么阻断了kafka与zk的链接?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 前几天部署一套环境&#xff0c;先把zk集群起来了&#xff0c;之后第二天在启动kafka的时候&#xff0c;…