问题描述
使用BMNNSDK2.7.0_20220316 auto_calib工具时报错:base_conv_layer.cpp43] Check failed: num_spatial_axes_ == 2 (3 vs. 2) kernel_h & kernel_w can only be used for 2D convolution
解决方案
使用 auto_calib ufw.calib.cali_model
为了兼容之前旧版本SDK生成的LMDB文件,要求lmdb必须是 [3,640,640] 这种的,而不能是 [1,3,640,640]。
删除 examples/calibration/create_lmdb/convert_imageset.py
中 cv_img = np.expand_dims(cv_img,axis=0)
这一句(增加了一个维度),重新生成lmdb。 新生成lmdb时,请先删除掉原先生成的lmdb那个文件夹,否则无法覆盖原先生成的。
如果 auto_calib ufw.calib.cali_model
的 cali_image_preprocess
参数可以满足模型预处理要求,那么使用时可以直接使用图片集,这个不会涉及lmdb文件数据的维度。
补充说明
使用手动分步方式量化模型时,也要注意,如果使用的是 [1,3,640,640] 这样的 lmdb,那么修改使用 ufw.tools.xx_to_umodel
生成的 fp32umodel prototxt 时,prototxt 里要 batch_size 要设置为 0 (如果在使用 ufw.tools.xx_to_umodel
时,指定了-D=”${lmdb_dst_dir}
那么程序自动会在生成的 protoxt 里将 batch_size 设置为0);如果使用的是 [3,640,640] 这样的 lmdb,那么 fp32umodel prototxt 里 batch_size 要设置为 1。