caffe.proto文件算子定义(可选)
如果使用的是Caffe开源框架的模型,请参考本章节进行caffe.proto文件的定义;如果使用的Tensorflow开源框架的模型,此章节跳过。
算子开发完成后,需要在DDK内置的caffe.proto文件中增加自定义算子的相关定义(如果内置的caffe.proto文件中已存在此算子的定义则此章节跳过)。
若同一模型中存在多个不支持的自定义算子,请参考本章节一次性将相关算子定义进行添加。算子插件实现时会根据算子名称从caffe.proto文件读取相关的算子参数进行解析,进而将算子数据结构转换为适配昇腾AI处理器的离线模型支持的数据结构。
DDK中内置的caffe.proto文件的路径为:“$HOME/tools/che/ddk/ddk/include/inc/custom/proto/caffe/caffe.proto”,用户可基于此文件进行修改,添加自定义算子的定义。
此处以添加Reduction算子的定义为例(DDK中内置的caffe.proto已经添加了Reduction算子的定义,此处以此样例进行说明)。
- 在LayerParameter中添加Reduction算子的定义。
如下所示,在LayerParameter中加入Reduction层的定义,并设置其ID。
message LayerParameter { …… optional ReductionParameter reduction_param = 136; //此ID需要保持唯一 …… }
- 在caffe.proto文件中增加Reduction层的参数定义。
message ReductionParameter { enum ReductionOp { //算子支持的操作类型 SUM = 1; //对被reduce的所有轴求和 ASUM = 2; //对被reduce的所有轴求绝对值后求和 SUMSQ = 3; //对被reduce的所有轴求平方后再求和 MEAN = 4; //对被reduce的所有轴求均值 } optional ReductionOp operation = 1 [default = SUM]; // 定义算子的操作 optional int32 axis = 2 [default = 0]; //定义reduce的轴 optional float coeff = 3 [default = 1.0]; // coefficient for output //标量,对结果进行缩放的倍数 }