• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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![](./figures/hispark_taurus_nnie_sample/130proposal%E5%B1%82%E6%94%AF%E6%8C%81%E7%9A%84%E5%8F%82%E6%95%B0.png)
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![](./figures/hispark_taurus_nnie_sample/131RFCN%E7%BD%91%E7%BB%9Cmapper%E8%87%AA%E5%8A%A8%E5%88%86%E6%AE%B5%E7%A4%BA%E6%84%8F%E5%9B%BE.png)
91
92类似Faster RCNN,考虑将Reshape->Softmax->Reshape->Proposal一起又CPU执行,RFCN 自定义分段示意图如下图所示:
93
94![](./figures/hispark_taurus_nnie_sample/132RFCN%E8%87%AA%E5%8A%A8%E5%88%86%E6%AE%B5%E7%A4%BA%E6%84%8F%E5%9B%BE.png)
95