1## 4.3.AI CPU算子实现 2 3### 4.3.1 Non-support层处理方式 4 5在介绍Non-support层处理方式之前,先介绍下一个网络层的分类,一个网络的层可分为如下3类: 6 7* 标准层:NNIE支持的Caffe标准层,如Convolution、Pooling层等; 8 9* 扩展层:NNIE支持的公开但非Caffe标准层,分为2种: 10 11 * 一种是基于Caffe框架进行自定义扩展的层,比如Faster RCNN中的ROIPooling层、SSD中Normalize层、RFCN中的PSROIPooling层,SegNet中的UpSample层等; 12 13 * 另外一种是来源于其他深度学习框架的自定义层,比如YOLOv2中Passthrough层等; 14 15* Non-support层:NNIE不支持的层,比如Caffe中专用于Tranning的层、其他非Caffe框架中的一些层或者用户自定义的私有层等。 16 17当网络中存在Non-support层时,需要将网络进行切分,不支持的部分由用户使用CPU 或者DSP等方式实现,统称为非NNIE方式。由此整个网络会出现NNIE->非NNIE- >NNIE… 的分段执行方式。 18 19nnie_mapper将NNIE的Non-support层分为两种,“Proposal”层和“Custom”层: 20 21(1)Proposal层输出的是矩形信息(Bbox,即Bounding box);Proposal自定义层格 式如下,包含name\type\bottom\top等关键字段参数,type必须为 “Proposal”,支持任意多个的bottom,但是top只有一个。 22 23```python 24layer { 25 name: "proposal" 26 type: "Proposal" 27 bottom: "rpn_cls_prob_reshape" 28 bottom: "rpn_bbox_pred" 29 top: "rois" 30} 31``` 32 33Proposal层还支持以下参数的解析,但不产生实际的效果。 34 35 36 37(2)Custom层输出的是tensor(feature map、vector);Custom自定义层格式如下,仅包含name\type\bottom\top\ custom_param\shape\dim关键字段,type 必须为“Custom”,支持任意多个top\bottom,custom_param中的shape信息 是描述top输出的形状,如果有多个输出,则按top顺序书写多个shape。用户原有其他的参数字段需删除。 38 39``` 40layer { 41 name: "custom1" 42 type: "Custom" 43 bottom: "conv1" 44 bottom: "conv2" 45 bottom: "pooling1" 46top: "custom1_1" 47 top: "custom1_2" 48 custom_param 49 { 50 shape { 51 dim: 1 52 dim: 256 53 dim: 64 54 dim: 64 55 } 56 shape { 57 dim: 1 58 dim: 128 59 dim: 128 60 dim: 128 61 } 62 } 63} 64``` 65 66在nnie_mapper对网络模型进行转化之前,用户需根据上述特性将Non-support层 修改为“Proposal”层或者“Custom”层,具体修改方式参考**源码的device/soc/hisilicon/hi3516dv300/sdk_linux/sample/doc中**《HiSVP 开发指南.pdf》中“3.2 Prototxt要求”。 67 68### 4.3.2 NNIE算子无法支持的网络层实现 69 70#### 4.3.2.1通过CPU/GPU/DSP实现NNIE不支持算子 71 72##### 4.3.2.1.1 案例 73 74以RFCN网络为例进行阐述 75 76RFCN跟Faster RCNN类似,RPN部分的Proposal层(Bbox_transform、Argsort、NMS 等操作)输出的是Bounding Box信息,由此网络被分为5段NNIE: 77 78* 第1段(NNIE执行),卷积部分,包含RPN前面的部分; 79 80* 第2段(非NNIE执行),Proposal部分,生成矩形框信息; 81 82* 第3段(NNIE执行),左边的PsRoiPooling部分以及后续的Pooling等,得到矩形框调整值; 83 84* 第4段(NNIE执行),右边的PsRoiPooling部分以及后续的Pooling等,得到矩形框置信度; 85 86* 第5段(非NNIE执行),结果获取部分,由3、4段得到的矩形框调整值和置信度经过bbox_transfom、argsort、NMS、ClipBox等步骤获取最终的矩形框和置信度信息。 87 88RFCN 网络 mapper 自动分段示意图,如下图所示: 89 90 91 92类似Faster RCNN,考虑将Reshape->Softmax->Reshape->Proposal一起又CPU执行,RFCN 自定义分段示意图如下图所示: 93 94 95