当前位置: 首页 > news >正文

征程 6 逆向自证 hbm 与 bc 一致性

1.引言

在征程 6 算法工具链使用过程中,会存在算法侧与软件侧的交接,偶尔会遇到,需要自证清白的情况,例如:

  • 算法侧反馈:bc 精度没问题,也参考了【征程 6】bc 与 hbm 一致性比对 文章,使用 hb_verifier 工具验证了 bc 与 hbm 一致性,完成交付,美滋滋,下班!
  • 软件侧反馈:算法侧给我的 hbm 有问题,使用相同的 png 图片,我用 c++写的前处理,推理 hbm 出来的可视化不行,和 bc 对不齐,算法同学快回来加班!
  • 算法与软件:我不相信 hb_verifier 工具,只相信自己的代码。(呃呃呃呃呃)

如果遇到了这种问题,算法侧的同学怎么自证清白呢?怎么证明可能是 c++与 python 前后处理不一致的问题?

很简单:反向使用软件侧的输入,用 python 代码推理一下 bc 与 hbm,并用 python 代码来进行可视化。下面会介绍软件与算法在遇到这种问题时,应该怎么做。

2.软件侧

对于视频通路金字塔过来的图像数据,前处理一般很简单,就是 mean/std/归一化之类的,常见的应该是 NV12 输入,这部分地平线有一套非常成熟的配置方式,下面以 NV12 输入为例,介绍软件侧应该怎么给算法侧输入。

软件侧和算法侧共同拥有一张 jpg 图片,在板端使用 hrt_model_exec 工具,结合 jpg 图片,生成 hbm 真实的输入。

hbm 输入信息如下:

INFO NAME    TYPE   SHAPE            DATA_TYPE
INFO ------- ------ ---------------- ---------
INFO data_y  input  [1, 224, 224, 1] UINT8
INFO data_uv input  [1, 112, 112, 2] UINT8
INFO prob    output [1, 1000, 1, 1]  FLOAT32

hrt_model_exec 工具有三个功能,本文主要使用 infer 功能,infer 用于模型推理,用户自定义输入图片,推理一帧。infer 功能需要与 input_file 一起使用,指定输入图片路径,工具根据模型信息 resize 图片,整理模型输入信息。本文使用到的相关参数如下

在这里插入图片描述

在板端执行类似如下命令:

hrt_model_exec infer --model_file mobilenetv1_224x224_nv12.hbm --input_file zebra_cls.jpg,zebra_cls.jpg --input_img_properties Y,UV --enable_dump

会生成对应的输入/输出数据

model_infer_input_0_data_y.bin
model_infer_input_1_data_uv.bin
model_infer_output_0_prob.bin

将两个输入。bin 数据给算法侧,请算法侧使用这两个输入去可视化 bc 模型。

3.算法侧

下面参考引言部分的文章,算法侧使用软件侧给的输入推理 hbm 模型即可,输入数据加载方式如下。

import numpy as np加载 bin 文件
y_bin = np.fromfile("./etc/model_infer_input_0_input_0_y.bin", dtype=np.uint8)
uv_bin = np.fromfile("./etc/model_infer_input_1_input_0_uv.bin", dtype=np.uint8)知道具体输入形状,进行 reshape
y = y_bin.reshape((1,224,224,1))
uv = uv_bin.reshape((1,112,112,2))inputs = {"input_0_y": y, "input_0_uv": uv}

注意:为了避免引入其他变量,此时转换编译模型时,不要删除任何节点。

推理部分代码如下:

hbm_model = Hbm("./etc.hbm")
hbm_outputs = hbm_model[0].feed(inputs)

最后,用 hbm_outputs 走 python 的后处理与可视化即可。

4.拓展

odel[0].feed(inputs)


最后,用 hbm_outputs 走 python 的后处理与可视化即可。# 4.拓展针对更复杂的输入场景,板端使用同样的处理方式,将 hbm 模型提供给算法侧即可。

相关文章:

  • Spring系列五:手动实现Spring底层机制 第一部分
  • 在 Conda 中,包的安装路径在电脑的哪里
  • SwiftUI 10.Toggle介绍和使用
  • 无人设备遥控器之实时数据保护技术篇
  • 60、微服务保姆教程(三)Sentinel---高可用流量管理框架/服务容错组件
  • 新时代下的存储过程开发实践与优化
  • 模板方法模式(Template Method Pattern)
  • 计算机考研精炼 计网
  • Python爬虫技术全解析:从入门到实战的终极指南大纲(深度解读与扩展)
  • 02_使用 AES 算法实现文件加密上传至阿里云、解密下载
  • AGV、AMR机器人控制器x86/RK3588/NV各有什么优劣势?
  • 数量关系6_排列组合、概率
  • 【QT】QT控制硬件
  • vuex与vuex-persistedstate 插件固化数据
  • 将有序数组转换为高度平衡二叉搜索树 | 详解与Java实现
  • [密码学实战]SDF之密钥管理类函数(二)
  • 勘破养生伪常识,开启科学养生新篇
  • C 语言函数指针与指针函数详解
  • 网络安全怎么入门?快速了解
  • EasyGBS国标GB28181设备管理软件打造园区安防高效解决方案
  • 特朗普的百日执政支持率与他“一税解千愁”的世界观和方法论
  • 专业竞演、剧场LIVE直播,32位越剧新星逐梦上海
  • 国家发改委:是否进口美国饲料粮、油料不会影响我国粮食供应
  • 涉李小龙形象商标被判定无效,真功夫:暂无更换计划
  • 五粮液一季度净利增长5.8%,今年营收与宏观经济指标保持一致
  • “五一”假期云南铁路预计发送旅客超330万人次