

全志V853 在 NPU 转换 YOLO V3 模型
source link: https://blog.51cto.com/u_15380233/5951527
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

NPU 转换 YOLO V3 模型
YOLO 全称是 You Only Look Once(你只需看一次),从名称上也能看出这种算法速度快的优势,因此在许多边缘设备上,YOLO 算法的使用十分广泛。YOLOV3 是华盛顿大学研究生 Joseph Redmon 所开发,他也因此凭借该算法获得了计算机视觉领域的很多奖项。
本文将通过 YOLO V3 模型的下载、转换、仿真三部分讲解如何使用现成的模型转换为 V853 NPU 所支持的模型。
模型的准备
在开始转换模型之前,需要准备模型。
模型可以通过自行准备数据集,工具训练而成,也可以从网上下载已经训练好了的 YOLO V3 模型。
本文演示的是从网上下载的已经训练好的模型。
我们使用的框架是 darknet,模型为 YOLOv3-608
。 其训练的数据集是 COCO trainval
数据集,模型可以在这里下载到: https://pjreddie.com/darknet/yolo/

darknet 版的 yolov3 模型包含两个文件,分别是权重文件 yolov3.weights
和模型结构描述文件 yolov3.cfg
这里两个都需要下载。下载完毕后放到配置好 NPU 开发工具的环境内。
打开模型结构描述文件 yolov3.cfg
,将 width
与 height
改为 416
以获得更好的性能。

然后还需要准备 dataset.txt
和测试的图片文件作为量化使用。先在 dataset.txt
文件中写入图片的路径和 id
./data/01.jpg 0
./data/02.jpg 1
然后将测试的图片放到文件夹里,这里我们准备 2 张不同的图片以供量化使用。

至此所有准备就完成了,你准备的文件看起来是这样的:
文件夹下包含 yolov3.cfg, yolov3.weight
这两个模型文件,一个dataset.txt
文件,存放量化使用的图片路径与 id,data
文件夹下包括已经修改统一分辨率的测试图片。

模型的转换
首先我们导入模型
pegasus import darknet --model yolov3.cfg --weights yolov3.weights --output-model yolov3.json --output-data yolov3.data

导入生成两个文件,分别是是 yolov3.data
和 yolov3.json
文件,他们是 YOLO V3 网络对应的芯原内部格式表示文件,分别对应原始模型文件的 yolov3.weights
和 yolov3.cfg
创建 YML 文件
YML 文件对网络的输入和输出的超参数进行描述以及配置,这些参数包括,输入输出 tensor 的形状,归一化系数 (均值,零点),图像格式,tensor 的输出格式,后处理方式等等
pegasus generate inputmeta --model yolov3.json --input-meta-output yolov3_inputmeta.yml
pegasus generate postprocess-file --model yolov3.json --postprocess-file-output yolov3_postprocessmeta.yml

修改 yolov3_inputmeta.yml
文件中的的 scale
参数为 0.0039(1/255)
,目的是对输入 tensor
进行归一化,和网络进行训练的时候是对应的。
生成下量化表文件,使用非对称量化,uint8,修改 --batch-size
参数为你的 dataset.txt
里提供的图片数量。
pegasus quantize --model yolov3.json --model-data yolov3.data --batch-size 1 --device CPU --with-input-meta yolov3_inputmeta.yml --rebuild --model-quantize yolov3.quantize --quantizer asymmetric_affine --qtype uint8

利用前文的量化表执行预推理,得到推理 tensor
,yolov3 是 1 输入 3 输出网络,所以一共产生了 4 个 tensor
pegasus inference --model yolov3.json --model-data yolov3.data --batch-size 1 --dtype quantized --model-quantize yolov3.quantize --device CPU --with-input-meta yolov3_inputmeta.yml --postprocess-file yolov3_postprocessmeta.yml

导出模板代码与模型
pegasus export ovxlib --model yolov3.json --model-data yolov3.data --dtype quantized --model-quantize yolov3.quantize --batch-size 1 --save-fused-graph --target-ide-project 'linux64' --with-input-meta yolov3_inputmeta.yml --output-path ovxilb/yolov3/yolov3prj --pack-nbg-unify --postprocess-file yolov3_postprocessmeta.yml --optimize "VIP9000PICO_PID0XEE" --viv-sdk ${VIV_SDK}

至此,模型转换完成,生成的模型存放在 ovxilb/yolov3_nbg_unify
文件夹内。

原贴链接: https://bbs.aw-ol.com/topic/1641/
作者@YterAA
全志及开发者最新动态可以关注全志在线微信公众号
Recommend
-
16
把YOLO标注文件转换为COCO格式 Enoch2090 2021-01-06 实验室之前用的模型是基于Darknet的YOLO。这两天需要试一些其它模型,所以我准备给标注文件做个格式转换。网上找了半天都找不到个给人用的
-
17
3-TOPS per Watt Hailo-8 NPU arrives on M.2 module Oct 1, 2020 — by Eric Brown — 1796 views
-
8
【科普】一头雾水?TPU、IPU、NPU是什么? | 爱搞机
-
12
Hailo-8 NPU bundles up with Kontron Pico-ITX and embedded PC Nov 16, 2021 — by Eric Brown 61 views
-
8
OPPO自研NPU芯片发布在即有感-基础器件-与非网 今天OPPO在社交平台发布自研芯片即将发布,芯片命名:MariSilicon X Mariana Silicon,由世界最深海沟马里亚纳和硅芯片两个名字演变而来,这个含义大家都懂的;
-
4
详解全志V853上的ARM A7和RISC-V E907之间的通信方式 原创 神棍地海棠 20...
-
3
V853开发板硬件资料——RISC-V核E907用户手册 原创 神棍地海棠 2022-07-20...
-
7
V853开发板开发进阶——在Linux下加载E907核心固件 推荐 原创 神棍地海棠 ...
-
6
项目源码获取: V853 Tina_LVGL Download LVGL 开发实战 移植基于 LVGL 的 2048 小游戏 这一节将以一个已经编写好的 lvgl 小游戏 20...
-
5
1.主题 Tina V85x 平台适配双目GC2053的操作步骤 GC2053数据手册: ov-GC2053datas 2.问题背景 Tina V85x 平...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK