前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志V853 在 NPU 转换 YOLO V3 模型

全志V853 在 NPU 转换 YOLO V3 模型

作者头像
阿志小管家
发布2024-02-02 17:07:58
1750
发布2024-02-02 17:07:58
举报
文章被收录于专栏:全志嵌入式那些事

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,将 widthheight 改为 416 以获得更好的性能。

然后还需要准备 dataset.txt 和测试的图片文件作为量化使用。先在 dataset.txt 文件中写入图片的路径和 id

代码语言:javascript
复制
./data/01.jpg 0
./data/02.jpg 1

然后将测试的图片放到文件夹里,这里我们准备 2 张不同的图片以供量化使用。

至此所有准备就完成了,你准备的文件看起来是这样的:

文件夹下包含 yolov3.cfg, yolov3.weight 这两个模型文件,一个dataset.txt 文件,存放量化使用的图片路径与 id,data 文件夹下包括已经修改统一分辨率的测试图片。

模型的转换

导入模型

首先我们导入模型

代码语言:javascript
复制
pegasus import darknet --model yolov3.cfg --weights yolov3.weights --output-model yolov3.json --output-data yolov3.data

导入生成两个文件,分别是是 yolov3.datayolov3.json 文件,他们是 YOLO V3 网络对应的芯原内部格式表示文件,分别对应原始模型文件的 yolov3.weightsyolov3.cfg

创建 YML 文件

YML 文件对网络的输入和输出的超参数进行描述以及配置,这些参数包括,输入输出 tensor 的形状,归一化系数 (均值,零点),图像格式,tensor 的输出格式,后处理方式等等

代码语言:javascript
复制
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 里提供的图片数量。

代码语言:javascript
复制
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

代码语言:javascript
复制
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
导出模板代码与模型
代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NPU 转换 YOLO V3 模型
    • 模型的准备
      • 模型的转换
        • 导入模型
        • 创建 YML 文件
        • 量化
        • 预推理
        • 导出模板代码与模型
    相关产品与服务
    腾讯云服务器利旧
    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档