snpe1.4.0中支持了flatten,reshape和permute的实现。但是snpe和caffe之间的数据存储次序不同,导致这些层不能直接应用。snpe为支持这部分的操作,增加了隐含层(implicit layer)。当网络中需要隐含层时将自动添加隐含层使网络输入输出维数对应。接下来说明flatten、reshape和permute在snpe中的实现。
permute层需要更改一个小问题
在编译permute层时报错:没有ssd_permute_params这个选项。
解决方法:查看文档~/snpe-1.4.0/lib/python/snpe/snpe_caffe_to_dlc.py
, 找到这一句:permute_param = layer.ssd_permute_param
, 原因是与caffe prototxt中名称不对应。将其改为:permute_param = layer.permute_param
,编译就可以通过了。
Flatten,Reshape和permute单层使用
1. Flatten在snpe中的网络结构变化:
在进行flateen之前,调用了一层隐含permute层。
—->4×4×50—-pool2_permute(permute_order[2, 0, 1])—->50×4×4—-flat—>800
2. Reshape在snpe中的网络结构变化:
在调用reshape之前和之后各调用了一层隐含permute层。前面添加一个permute: [2, 0, 1], 后面添加一个permute: [1, 2, 0].