自学内容网 自学内容网

安霸cv22平台移植采坑记录

主要分为3部分:

1.数据输入部分:

1.因原始测试代码只是单张测试图片(测试格式:安霸平台离线转的bin文件),现在的问题是:如何输入数据流?会不会涉及到字节对齐问题,如何与之前高位(1126平台)数据类型对接?(只移植npu部分,动了数据类型,涉及的改动太大)

具体操作:

1)兼容高位车牌识别(1126)数据类型,统一用如下形式

2)注意cv22是32字节对齐

如输入车牌识别大小是50*200的,cv22是按照宽长度对齐,最终对齐为50*224

3)输入数据处理

与1126对比有一些差异,但本质相同。cv22先把数据传给一个指针存储,然后进行前向推理,如直接nnctrl_run_net推理,只有一个网络ID号。(具体内部如何实现推理去拿到数据的,暂时未知其中的原理)

现在输入数据流方式如下:

 

bin为cv22的数据格式,有数据对齐等操作,这里冗余性较高,如多次memcopy操作,后期会优化。

2.模型初始化部分:

1.cv22的初始化很多,相对1126要复杂,初始化没搞好,容易出现内存泄漏,前向推理拿不到结果。

注意1:如下初始化只能做一次。

注意2:涉及到内存问题

 

我用static变量控制,只做一次。涉及到的两次内存申请函数:

alloc_cv_mem 和nnctrl_iniy_net(一定要注意,不要多次申请

注意3:做完前向推理后,拿到结果,要屏蔽掉nnctrl_exit_net,要不然会出现第二次前向拿到的结果会怀疑人生(痛苦的记忆)

模型结果输出部分:

1.注意1: 32字节对齐问题

如高位的ctc,正常最后拿到的结果是1*20*1*74,由于是32字节对齐,后面取结果1*20*1*80。

2.之前还以为cv22在数据输入上有大小限制,最后排查出是本公司画出的pcb板子在内存上有问题。

以上移植的cv22 高位车牌识别作为baseline版本,现在在三部正在测试,调试中。也许其中还有坑没有踩到,但是该版本能正常运行,无内存泄漏。代码上还有很大的冗余性,需要后期进一步的精简以及优化。移植不难,主要实现如下函数就行。思路清晰。

具体的后处理、如何拿到yolo的结果、模型的转换等相关问题可参考文档。

 


原文地址:https://blog.csdn.net/u012374012/article/details/142485157

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!