-
om模型验证时,没有工具,需要每个model对应去创建graph保存结果,再去和caffe工程对比。(解决,自己写工具,但是不高效)检测模型0.1误差下达到83.3%相似度,识别模型0.01误差下92.1%
-
mindstudio不适合开发,cmake重构工程(解决)
-
升级SDK后,sample报错,graph init fail,后替换main文件解决
-
Deconvolution group>1时转换om报错,重新用回Upsample层(解决)
-
量化时,网络中存在Upsample层量化失败(未解决)
-
单Engine多model(后提供资料解决)
-
突然断电,导致npu-smi无法找到npu card,报错drv_dcmi(未解决,直接重装)[dcmi_drv_api.c, 2879, dcmi_get_card_num_list]: not init. Failed to get card number.
-
性能测试,多分支和小输入网络速度明显变慢,例如116x116正常在1ms以内。
-
log不能调level要将某个配置文件中的ulimit屏蔽掉
-
deviceStartResult_ failed, engine init failed。引擎类名错误或者没有找到om模型等graph.config错误导致设备打开结果失败。
-
程序卡死找原因,可能是没有输入图像导致引擎卡死。Init卡死写成**“==”**ai_model_manager_ = std::make_sharedhiai::AIModelManager();
-
return SendSentinelImage();如果是Sentinel图像记得要return,防止往下执行。后续因为没有图像而出错,会卡顿一段直接跳过后续图像结束。
-
记得清理里推理引擎输入输出容器,否则导致推理引擎tensor shape不匹配 input_data_vec_.clear();output_data_vec_.clear();
-
HIAIEngineFactory create null engine。由于graph.config中引擎名字不是对应的引擎类名。
-
/etc/slog.config 将zip_switch=0可以不加密log
-
参数如果没有从host传到device要查看是否cereal序列化参数漏了。
-
一级检测CenterNet还有问题
-
测试性能时在MindStudioLog中关闭system Log
-
接收arg参数是要用局部变量,不然性能会很差。(最终原因:device发送到host端耗时,如果不传image buffer,时间为32ms,否则80ms)
-
测试模型一致性时使用NoAIPP模型和Raw数据(由cnet.py脚本生成)推理保存二进制与caffe比较
-
解码jpeg图片时,FFD0结束符后多出一串字符导致重复解码异常bug,更新so后部分图像解码返回-1错误(待解决)。
-
700万图片334张以后内存蹦了(未解决)
-
device不传解码后图像到host端,耗时从251ms减少到152ms
-
decode申请输入输出buf,手动管理内存,耗时从152ms减少到133.618ms
-
一级检测resize复用decode buf,输出Init里面初始化,不拷贝,耗时从133.618ms减少到123.846ms
-
二级检测同样改动,123.846ms减少到120.894ms
-
8T= 4K(4096 MAC) X 2(双核) X 1G(频率1GHz)
-
看来看去也就那么几个建议能节省大页内存:一是申请大块内存和地址偏移来替代频繁的小块内存申请(因为dvpp对齐可能会放大);二是使用智能指针避免释放不及时和内存泄露;三是之前说的,在业务流程中找到瓶颈,看处理慢的engine能不能用多线程或拆分engine来提升;最后就是当以上三种策略还是4G内存不足,有一个增加拷贝开销的方案来节约4G空间内存。其实4G空间的内存是DVPP模块需要的,其他模块不需要,例如模型推理,后处理等。可以把DVPP的输出拷贝到普通内存里面(模型推理的输入用HIAI_DMalloc申请内存也就可以满足零拷贝了),此方法带来的拷贝性能开销需要综合全局考虑。
-
JPEGD解码出来的图片是nv21,经过DVPP crop resize以后编程nv12。VDEC解码出来的图片是hfbc,经过DVPP转换成nv12
-
VDEC会缓存5帧,除非设置isEOS标志再调用vdecctl才会把剩下所有帧都输出。解码错误不会进入回调函数。
-
Ascend310 device侧使用的编译是GCC: (Do-Compiler V100R001C00B002) 7.3.0.
-
omg --mode=1 --om=XXX.om --json=./xxx.json 模型转换成json
-
VPC分非8K和8K缩放,8K仅能缩放不能ROI,而且缩放比例都需要满足宽高[32,16]倍率
-
Host侧数据进入device侧如果不拷贝到DVPP_DMalloc空间VPC不能使用。(不适用DVPP解码时必须拷贝一次)
-
device侧容器一定要注意不能越界(下标越界),可能导致崩溃行之前的打印信息都无法输出,引起查找难度。
-
网络授权服务端需要sudo service firewalld stop和setenforce 0之后才能执行,返回0表示开启成功
模型验证 | 相似度(误差0.1) | 0.01 | 0.001 |
---|---|---|---|
Recognize | 93.33% | 92.76% | 90.83% |
ObjectDetectStageCentG320x384 | 99.71% | 92.01% | 87.35% |
ObjectDetectStageV160x128 | 100% | 87.69% | 24.88% |
Network(bATCH=1) | Ascend310(fp16) | ASCEND310(INT8) |
---|---|---|
YOLOv3_288x320 | 7.783ms | int8报错upsample层引起 |
CenterNet_320x384 | 17.653ms | 同上 |
VehiclePlateAlignCH_16x56 | 0.797ms | 0.844ms |
VehiclePlateNameCH_48x168 | 1.105ms | 1.096ms |
PedestrianGlobal_116x116 | 4.536ms | 4.979ms |
cv_imread vs dvpp_nv21ToBgr | CV_Resize VS Dvpp_Resize | |
---|---|---|
0.1 | 99.6989% | 88.4587% |
0.08 | 99.209% | 84.9902% |
0.06 | 94.3766% | 77.6725% |
0.04 | 64.5752% | 57.2087% |
0.02 | 34.4401% | 32.0052% |
0.01 | 15.7666% | 15.7324% |