对于海思35xx上nnie配套的软件及工具链仅支持Caffe框架,且以Caffe-1.0版本为基础。因此若想在nnie硬件上进行推理的话,需先将模型转换为Caffe-1.0框架的模型(若模型直接由Caffe-1.0框架训练出来的话,忽略此步骤),然后由nnie配套软件工具nniemapper将转换后的模型生成nnie硬件能够识别的.wk文件。
ps:由于现在主流模型训练框架为:pytorch、tensorflow、Mxnet、darknet等,Caffe-1.0框架使用不多,因此大部分情况下的算法模型都需要进行转换。
这里讨论的是基于darknet训练出来的yolov3模型转换成caffemodel。
在data中可以看到配置文件(.cfg)分两种:func(function功能)和inst(instruction指令),分别代表功能级别的仿真配置与指令级别的仿真配置。功能级别的仿真,较简单,主要为功能的模拟,仿真耗时较少;指令级别的仿真,一定程度上等同于硬件NNIE上的模拟,仿真耗时较多。这两种级别仿真分别能够生成各自的.wk文件,能下载到硬件上运行的为指令级别仿真生成的.wk文件。
选中.cfg文件,右击openwith选择MapperConfigurationEditor
nniemapper的输入包括两个部分:
prototxt:caffe定义网络结构是用protobuf格式写的.prototxt文件
caffemodel:.Caffemodel是使用caffe框架训练网络时,最终生成一个二进制文件。里面存储了模型的参数包括权重和偏置等信息,还存储了整个训练网络的结构信息,即.prototxt信息(.Caffemodel文件包含有.prototxt)
这两个文件,都可以在工程data->detection->yolov3->model文件夹下找到,也可以自己手动生成。
(不少算法都是用预训练模型在自己数据上微调,即加载“caffemodel”作为网络初始参数取值,然后在此基础上更新。使用方式往往是:同时给定solver的prototxt文件,以及caffemodel权值文件,然后从solver创建网络,并从caffemodel读取网络权值的初值)
marked_prototxt:在加载nniemapper的两个输入文件和选择net_type后,RuyiStudio自动将加载的prototxt文件中nnie不支持的层修改为Custom层Proposal层,并生成一个标记后的prototxt文件。(对于yolov3而言,没有nnie不支持的层,因此加载的prototxt和marked_prototxt一样)
output_wk_name:生成的.wk文件的命名和保存位置。
batch_num:一次处理图片数,目前一次处理1张
spare_rate:稀疏率,进一步压缩模型,作用于全连接层(fullyconnectedlayers,FC),若值为0.5,则全连接层一半参数强制改为0,有负面作用:导致精度下降,影响准确度,一般不稀疏。
image_list:在做模型量化的时候,需要参考的一系列图片,这些图片应该能把要检测的目标类型覆盖,参考图片数量20-50张。
data_scale:值为1/255
.ini文件是仿真前的一个配置文件
1.是否需要层线性打印:使能后可以在指令仿真时输出caffe各层的中间线性结果
2.是否需要使用CUDA加速(若有GPU,安装CUDAv8.0以上版本能加快仿真速度)
3.是否需要指令的仿真
另外也有一种方式能够选择仿真类型:
4.是否需要性能仿真:若使能,必须使能指令仿真
在做模型转换或者仿真之前,需要注意的一点:选对SOCVersion
在.cfg和.ini都设置好,并保存后,开始点击按钮生成.wk文件