pfld项目地址:https://github.com/github-luffy/PFLD_68points_Pytorch (感谢作者)
algmodelconvert项目:https://gitee.com/mumulin19/algmodelconvert.git
嵌入式平台:hi3559a
nnie推理时间:2ms,提升很大,能到1ms以下就完美了
1 修改工程
(1)修改model2.py文件,注释ResNest50相关代码,我们不验证此网络 (有需要可以私信我)
(2)修改pytorch2ncnn.py文件,使用MobileNetV2模型,输入改为3*112*112 (有需要可以私信我)
2 转模型->onnx
#安装onnxsim pip3 install onnx-simplifier #转成onnx模型 python3 pytorch2ncnn.py #优化onnx模型 python3 -m onnxsim pfld_out.onnx pfld_out_sim.onnx
3 转模型onnx->caffe
onnx模型转caffe在笔者的algmodelconvert工程中。
转模型遇到了问题,笔者使用的是此工程的MoileNetV2的模型,MoileNetV2的激活函数用的是Relu6,转成onnx是Clip,caffe不支持Clip,也不支持Relu6,所以笔者修改了转模型文件,把Clip当做Relu处理,修改代码如下:
_ONNX_NODE_REGISTRY = {
"Conv": _convert_conv,
"Relu": _convert_relu,
"Clip": _convert_relu,
"BatchNormalization": _convert_BatchNorm,
"Add": _convert_Add,
"Mul": _convert_Mul,
"Reshape": _convert_Reshape,
"MaxPool": _convert_pool,
"AveragePool": _convert_pool,
"Dropout": _convert_dropout,
"Gemm": _convert_gemm,
"Upsample": _convert_upsample,
"Concat": _convert_concat,
"ConvTranspose": _convert_conv_transpose,
"Sigmoid": _convert_sigmoid,
"Flatten": _convert_Flatten,
"Transpose": _convert_Permute,
"Softmax": _convert_Softmax,
}
这样修改可能会有精度问题,但是本次笔者只想验证速度,如想提高精度,可以在本工程的train.py(pytorch训练)脚本中,把activation=nn.ReLU6改成activation=nn.ReLU重新训练尝试一下。
4 转模型caffe->wk
cafef模型转wk模型在笔者的algmodelconvert工程中。
5 merge bn
py代码在笔者的algmodelconvert工程中。
6 验证pfld速度
1 速度2ms,比pfpld的11ms提升不少,应该与此项目使用的MobileNet架构有关。
2 由于笔者在转模型的时候把Relu6改成了按Relu处理,而模型训练使用的是Relu6,精度上肯定会有一定损失,想要提高精度,可以把激活函数换成Relu重新训练试试。
![v2-749378680732db5742c7c3f2b083276f_b.jpeg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f520ae58-bd2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-749378680732db5742c7c3f2b083276f_b.jpeg)