基建互联 | 安霸与飞桨深度合作,高性能算法落地简单高效!

面对人工智能算法在端侧落地的需求,安霸在芯片产品线、工具链和软件开发包上都提供了完整成熟的解决方案。人工智能芯片CV2x系列提供了丰富多样的算力平台,完美适配从消费领域的智能门铃,工业安防领域的智能交通到智能汽车自动驾驶领域的感知、识别等不同使用场景。负责模型转换,优化和部署的安霸CV工具链全面支持飞桨等多种主流框架,给开发者提供了简单易用的算法部署体验。高效本土化的支持团队已协助各行各业众多公司使用CV2x系列芯片实现了量产落地。

此次飞桨团队和安霸的深度合作,为飞桨的用户提供了一个新的优质端侧部署平台,同时也进一步丰富了基于安霸平台的算法生态,助力开发者快速高效地产品研发迭代。

安霸CV工具链在原生支持飞桨模型之前,已经支持了ONNX深度学习通用中间表示格式。此时开发者仍需要把基于飞桨框架训练好的高精度模型转换为ONNX才可以在安霸平台上部署。这样可能会引入算子库版本不匹配,算子不支持,算子实现方式不同带来的精度下降甚至结果完全不对等问题。

为了能使飞桨模型在安霸平台上更高效的部署,双方团队进行了深入的合作开发,使得安霸CV工具链可以直接对接飞桨框架保存的模型,而无需转换为ONNX或其它中间表示。随着飞桨深度学习平台在产业界不断的深耕与积累,目前飞桨已成为服务14万家企业,覆盖20+行业的平台。通过安霸CV工具链直接对接飞桨框架,能够帮助客户更快地响应业界主流算法的需求,在安霸CV系列芯片上更便捷地部署算法,实现定制化开发和更好的算法优化。

安霸CV工具链中的PaddleParser现已支持包括conv2d, relu6, pool2d和batch_norm等在内的常用PaddlePaddle算子,并在飞桨开源框架v2.0以及v1.8.5版本上验证多达30类模型及其变种模型。安霸CV工具链同时提供成熟的模型智能结构优化加速和智能量化加速功能,可以将飞桨框架深度训练、优化过的模型针对CVFlow进一步优化,在与客户的网络部署评估中安霸CV2x平台在保证相同精度的情况下实现了相较友商竞品近一倍的性能提升。

飞桨与安霸能够打通生态之间的链路,将能更好的给产业界赋能,降低开发者部署人工智能算法的门槛,加快更加优秀算法和产品的量产落地。

关于安霸

安霸的产品广泛应用于人工智能计算机视觉、视频图像处理、视频录制等领域,包括视频安防、高级驾驶辅助系统(ADAS)、电子后视镜、行车记录仪、驾驶员及舱内智能监控、智能汽车无人驾驶和机器人应用等。安霸的高性能、低功耗处理器可用于智能摄像机设计,支持超高清图像处理、视频压缩、深度神经网络加速,可从高分辨率视频中提取有价值的数据。

作为人工智能视觉芯片技术的领先者,安霸在不断技术迭代提升芯片竞争力的同时,也在不断加强与学术界产业界的合作,共同构建日益繁荣的行业生态。

欲了解更多信息,请访问 www.ambarella.com

附录

在下面《PaddlePaddle 模型在安霸 CV2x平台上的部署》中,我们以Resnet50为例,详细介绍了使用安霸CV工具链进行PaddlePaddle模型转换并在安霸CV芯片上执行的步骤。

PaddlePaddle模型在安霸

CV2x平台上的部署

环境准备

本次部署主要是基于Amba CV2x开发板。CV2x系列是安霸采用10nm制程、针对AIoT 场景推出的低功耗、高性能的 AI 视觉处理器,可支持1 ~ 15TOPS的AI算力。安霸提供了用于深度学习部署的CV工具链。这是一套基于x86_64环境的安装包,它可根据安装说明,通过安装脚本轻松安装到机器上。

操作步骤

一:模型准备

1)环境安装介绍:

飞桨开源框架为v2.0版本,源码位于:

https://github.com/PaddlePaddle/PaddleClas/blob/release/2.0/

环境安装说明请参考官网文档:

https://github.com/PaddlePaddle/PaddleClas/blob/release/2.0/docs/zh_CN/tutorials/install.md

//通过pip安装CPU版PaddlePaddle,GPU的安装请参考官网
pip3 install paddlepaddle==2.0.0 --upgrade -i https://mirror.baidu.com/pypi/simple 
python3 -c "import paddle; print(paddle.__version__)"                       //查看PaddlePaddle版本 
git clone https://github.com/PaddlePaddle/PaddleClas.git -b release/2.0         //克隆PaddleClas模型库 
pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple  //安装Python依赖库

2)数据准备:

请参考官网说明。数据集可用于生成量化时使用的标定数据,也可用于验证模型部署的精度。

https://github.com/PaddlePaddle/PaddleClas/blob/release/2.0/docs/zh_CN/tutorials/quick_start.md

cd path_to_PaddleClas      //进入PaddleClas目录 
cd dataset/flowers102      //进入dataset/flowers102目录,下载并解压flowers102数据集 
wget https://paddle-imagenet-models-name.bj.bcebos.com/data/flowers102.zip 
unzip flowers102.zip 
cd ../../

3)预训练模型准备:在pretrained目录下载预训练模型

mkdir pretrained && cd pretrained           //下载所需要的预训练模型 
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_pretrained.pdparams
cd ../

4)获取模型:

PaddleClas模型库提供dexport_model.py工具可以将模型和参数保存为文件。下边的命令将会在inference/目录下产生模型文件inference.pdmodel和模型参数文件inference.pdiparams。这些文件将被安霸CV工具链用于模型转换和量化。

python3 tools/export_model.py --model ResNet50 \
--pretrained_model ./pretrained/ResNet50_pretrained -ss-output_path ./inference

二:模型转换

1)相关安装包版本介绍

CnnGen 版本:amba-cv-tools-2.3.1-20210529.ubuntu-18.04

PaddlePaddle解析包版本:paddle_parser-master-b99abb8

2)加载安霸发布的工具包环境

source /usr/local/amba-cv-tools-2.3.1-20210529.ubuntu-18.04/env/cv22.env

3)准备模型量化使用的标定文件

通过对单张或多张图片进行正向推理从而确定量化方式的过程,我们称之为DRA(Data Range Analysis)。为了准备DRA使用的输入数据,我们从1.2中下载的jpg复制任一个到新建的dra_img目录作为模型输入文件并进行前处理。安霸CV工具集在对模型进行量化时,支持单个标定文件输入,也支持以列表形式指定多个标定数据文件。此处我们标定文件夹中仅有一张图片,所以生成的列表dra_bin_list.txt中也将只有一个表项。

cd inference 
mkdir dra_img && cp ../dataset/flowers102/jpg/image_00001.jpg dra_img/ 
rm -rf output/dra_img_list && mkdir -p output/dra_img_list 
gen_image_list.py \ 
-f dra_img \ 
-o output/dra_img_list/img_list.txt \
-ns -e jpg -c 0 -m 123.675,116.28,103.53 -sc 58.395,57.12,57.375 \ 
-d 1,2,0,7 -r 224,224 \
-bf output/dra_img_list -bo output/dra_img_list/dra_bin_list.txt

4)利用paddle-parser解析包对模型进行算子转换、量化,得到针对CVflow硬件表示的vas文件

paddle_dir = /home/yshi/work/cv2x/paddle/paddle_parser-master-b99abb8 
rm -rf output/out_paddle_parser && mkdir -p output/out_paddle_parser 
python3 $(paddle_dir)/paddleparser.py \ 
-p inference.pdmodel  \
-m inference.pdiparams \ 
-isrc "i:inputs=output/dra_img_list/dra_bin_list.txt|is:1,3,224,224|idf:1,2,0,7|iq" \ 
-dra mode=2,type=histo,coverage_th=0.95 \ 
-o resnet50 \ 
-of output/out_paddle_parser \ 
-odst "o:save_infer_model/scale_0.tmp_1|odf:fp32" \ 
-dinf "cerr"

5)编译4)中得到的vas文件,生成可以在CVflow上运行的DAG

rm -rf output/out_paddle_parser/vas_output && mkdir -p output/out_paddle_parser/vas_output 
cd output/out_paddle_parser && vas -auto -show-progress resnet50.vas

6)PC上对模型进行仿真

安霸的CV工具链提供了PC端工具ades,可以在PC上仿真CVflow的计算。ades_autogen.py则可以根据5)中编译生成的DAG辅助生成用于仿真的命令行。

我们以刚才用于量化标定的image_00001.bin为输入,举例ades_autogen.py和ades的用法。

rm -rf output/out_ades && mkdir -p output/out_ades 
ades_autogen.py \ 
-v resnet50 \ 
-p output/out_paddle_parser \ 
-l output/out_ades \ 
-ib inputs=output/dra_img_list/image_00001.bin \ 
-ov save_infer_model/scale_0.tmp_1=output/out_ades/out_save_infer_model.txt 
cd output/out_ades && ades resnet50_ades.cmd

7)打包生成运行时二进制文件

如果我们希望直接在板端运行步骤5)中编译生成的DAG,我们可通过cavalry_gen工具把所需要用到的文件打包,生成可在板端解析并运行的二进制文件。

rm -rf output/out_cavalry && mkdir -p output/out_cavalry 
cavalry_gen \ 
-d output/out_paddle_parser/vas_output/ \ 
-f output/out_cavalry/cavalry_paddle_resnet50.bin \ 
-p output/ \ 
-v > output/out_cavalry/cavalry_info.txt

8)板端运行

安霸的CV2x系列Linux SDK提供了NNCtrl库来帮助解析和运行由cavalry_gen打包生成的二进制文件,对DAG之间的内存进行分配和管理,还提供更多丰富的功能。此处我们借助test_nnctrl应用程序来运行生成的Resnet50,还是以image_00001.bin作为输入, 并将结果保存为result.bin。

(board)# modprobe cavalry; cavalry_load -f /lib/firmware/cavalry.bin -r 
(board)# test_nnctrl -b cavalry_paddle_resnet50.bin \ 
--in inputs=image_00001.bin --out save_infer_model/scale_0.tmp_1=result.bin

长按下方二维码立即

Star

c05ef0fb313f6c76f50f60606546945d.png

更多信息:

  1. 飞桨官方QQ群:793866180

  2. 飞桨官网网址:

    www.paddlepaddle.org.cn/

  3. 飞桨开源框架项目地址:

    GitHub:

    github.com/PaddlePaddle/Paddle 
    Gitee:

    gitee.com/paddlepaddle/Paddle

  4. 欢迎在飞桨论坛讨论交流~~

    http://discuss.paddlepaddle.org.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值