准备Caffe模型npy数据文件
Caffe原始数据文件准备要求
Caffe原始npy数据文件要求:
- 文件内容以numpy(.npy)格式保存。
- 文件以{op_name}.{output_index}.{timestamp}.npy形式命名。设置numpy数据文件名包括output_index字段且值为0,确保转换生成的dump数据的output_index为0,否则无比对结果,原因是精度比对时默认从第一个output_index为0的数据开始。
- 为确保生成符合命名要求的.npy文件,需要对原始的Caffe模型文件去除in-place,生成新的.prototxt模型文件用于生成.npy文件(例如:如果有未去除in-place的A、B、C、D四个融合算子,进行dump数据,输出的结果为D算子的结果,但命名却是A算子开头,就会导致比对时找不到文件)。针对量化场景,需要先在环境上安装AMCT再执行去除in-place命令,安装方法请参见《CANN 6.3.RC2 AMCT工具(Caffe)》或《CANN 6.2.RC2 AMCT工具(Caffe)》。
进入Ascend-cann-toolkit安装目录/ascend-toolkit/latest/tools/operator_cmp/compare目录,执行命令去除in-place,命令行举例如下:
python3 inplace_layer_process.py -i /home/HwHiAiUser/resnet50.prototxt
执行命令后,在/home/HwHiAiUser目录下生成去除in-place的new_resnet50.prototxt文件。
- 针对量化场景:为确保精度误差,需要执行Caffe模型推理时预处理数据与Caffe模型小型化时预处理数据一致。
生成npy数据文件
本版本不提供Caffe模型numpy数据生成功能,请自行安装Caffe环境并提前准备Caffe原始数据“*.npy”文件。本文仅提供生成符合精度比对要求的numpy格式Caffe原始数据“*.npy”文件的样例参考。
为输出符合精度比对要求的“*.npy”数据文件,需在推理结束后的代码中增加dump操作,示例代码如下:
#read prototxt file net_param = caffe_pb2.NetParameter() with open(self.model_file_path, 'rb') as model_file: google.protobuf.text_format.Parse(model_file.read(), net_param) # save data to numpy file for layer in net_param.layer: name = layer.name.replace("/", "_").replace(".", "_") index = 0 for top in layer.top: data = net.blobs[top].data[...] file_name = name + "." + str(index) + "." + str( round(time.time() * 1000000)) + ".npy" output_dump_path = os.path.join(self.output_path, file_name) np.save(output_dump_path, data) print('The dump data of "' + layer.name + '" has been saved to "' + output_dump_path + '".') index += 1
增加上述代码后,运行Caffe模型的应用工程,即可生成符合要求的“*.npy”数据文件。
父主题: 推理场景数据准备