之所以写这个日记是为了记着整个过程的问题,因为过去的一段时间里,已经踩过不少的坑,到目前为止,有些坑还是没有解决。所以需要记着做过的尝试,成功的要记着,失败的也得记着。
首先,根据供应商和线上一些有限的资料看到,3403-SS928这个芯片号称的10.4T算力是由一个有4.8T算力和另一个5.6T算力的两个不同架构的NPU组成。这两个NPU互相不能通用,模型虽都是.om格式但不通用,调用模型的推理程序和库也不通用。
目前我可以做到4.8T(号称)的这个核的模型转换,使用的是供应商提供的官方模型转换工具 Ascend-cann-toolkit_5.13.t5.0.b050_linux-x86_64.run 这个ATC工具
这个工具的安装也有坑,具体是什么有空再写,总之目前我能成功装上的环境是使用windows10 的 wsl2 安装 ubuntu 20.04版本linux 再加上手工编译安装的 Python 3.8.16
安装atc 工具后,使用 source /${安装目录}/Ascend/ascend-toolkit/latest/x86_64-linux/bin/setenv.bash 引用atc工具环境
运行atc 进行模型转换,命令如下:
atc –model=./yolov5s_v6.2.onnx –framework=5 –input_shape=”images:1,3,640,640″ –output=v5s_o –soc_version=”OPTG” –output_type=FP32
看到网上有些大神的文章说使用 –insert_op_conf= xxx.cfg 定义AAPP,在研究了一翻供应商官方提供的关于ATC的官方文档后暂时觉得没有必要。这东西其实是把图像的前处理以某种方式整合到.om文件里,这是我的个人理解,不知道对不对。但现在我的问题并不是性能问题,而是需要先让整个模型推理过程运行正确。所以我现在没有加入 –insert_op_conf= 这个参数
另外,供应商提供的包里有一个把图片转成.bin 格式的 python 程序。对其分析研究一翻后,先前认为这个程序只是把.jpg图片转成需要输入模型的大小,即 640×640 ,并且把图片数组转为 NCHW 的布局,然后保存成 binary 格式的.bin 文件。但现在感觉这里有两个大坑。
一,图片是使用resize 强制转大小,并没有保持原图的横宽比,这将会导致图像压缩扭曲,使模型识别结果错误(暂时个人认为是这样)。
二,是程序使用PILLOW 库进行图像读取和处理,图像在初始读取时是以RGB 的色域格式进行读取的,但程序对这个RGB 色域进行了错误的转换(暂时我认为是错的),把色域转为BGR。所以,下一步我将修改这个python 使之保持RGB的格式。
