环境部署
打开MobaXterm,新建Session,点击左上角SSH。

登入服务器(服务器地址为192.168.8.182),用户名为自己名字拼音(eg:yangyifei),端口号为22,默认进入以自己姓名命名的文件夹,登陆密码:Horbot_1。

解压文件夹内的j6-3.0.17-py310-11.4.tgz到当前目录,得到horizon_j6_open_explorer_v3.0.17-py310_20240705 。

查看本地镜像名称和版本号。

利用已经加载的本地的镜像启动当前OE版本所对应的Docker容器,并挂载OE包,其中"--rm"意味着一旦通过exit退出当前容器,当前容器会自动删除。

浮点模型准备
执行结果打印如下


模型验证
参数说明--march用于指定需要适配的处理器类型,J6E处理器请设置为 nash-e,J6M处理器需设置为 nash-m。--proto此参数仅在model-type指定caffe时有效,取值为caffe模型的 prototxt 文件名称; onnx模型无需配置该参数。--model在模型为caffe模型时,取值为Caffe模型的caffemodel 文件名称;在模型为onnx模型时,取值为 ONNX模型 文件名称。
校准数据预处理
执行结果打印如下

模型转换
执行结果打印如下(部分)


板端快速性能验证
板端创建个人工作空间
服务器端拷贝hbm文件到板端个人工作空间内
板端模型信息获取

- 应确保填写数值满足 ??????[???]>=??????[???+1]∗??????ℎ???.?????????????[???+1],其中 idx 代表当前维度。
- 对于 Y 和 UV 输入的 stride, 由于存在一些硬件约束,需要动态维度保证32对齐,这意味着您需要根据 stride 对输入进行对齐处理。
对于yolov2_darknet19_608x608_nv12来说,stride计算过程如下:
对于input[0],有:
stride[3] = 1;
stride[2] = 1;
stride[1] = ALIGN_32(stride[2] * validShape.dimensionSize[2]) = ALIGN_32(1 * 608) = 608;
stride[0] = ALIGN_32(stride[1] * validShape.dimensionSize[1]) = ALIGN_32(608 * 608) = 369964;
对于input[1],有:
stride[3] = 1;
stride[2] = 2;
stride[1] = ALIGN_32(stride[2] * validShape.dimensionSize[2]) = ALIGN_32(2 * 304) = 608;
stride[0] = ALIGN_32(stride[1] * validShape.dimensionSize[1]) = ALIGN_32(304* 608) = 184832;
板端测试量化、编译后的模型性能
执行结果打印如下(部分)

QAT对应操作
QAT量化参考
手把手教你利用算法工具链训练、量化、编译、可视化J6参考算法BEVFormer
在获得相关模型的.hbm文件后,将其拷贝到板端,板端操作见上。
