《NNIE-lite》
趟过NNIE的小伙伴可能都知道,NNIE是有很多坑的,而且是纯C的环境,除非你有几年C的开发经验,否则阅读起来不是那么容易的,而作为算法工程师,我相信更多人和我一样擅长Python和C++,所以在把NNIE用起来还是有些费力的。而作为算法工程师,你的工作更应该 concentrate on 模型上,现在有了NNIE-lite这个项目,极大的帮助大家脱离苦海,算法工程师可以把目光聚焦在模型效果和效率上,而不用再为其他的琐事担心了,使用NNIE像用ncnn一样简单。
Key Words:NNIE、 C++、 OpenCV
Beijing, 2020
作者:RaySue
Code:https://github.com/RaySue/NNIE-lite
Agile Pioneer
如果你有摄像头端(海思NNIE)移植算法的需求
如果你更擅长于C++编程
如果你擅长使用cmake构建工程
恰好你喜欢用OpenCV来进行io处理,这个比起bgr来调试十分方便
Come on and star the repo https://github.com/RaySue/NNIE-lite
那么 NNIE-lite 就是非常适合你的,我当时如果有NNIE-lite这样的项目,可能至少节省我一周的时间去梳理使用NNIE的逻辑。
模型转换 :以TensorRT为例:把你的caffe或onnx模型转为.engine文件,然后就可以利用TensorRT框架使用GPU进行加速了;
数据预处理 :准备推理输入数据,如图片颜色通道排列和分离,像素数据转换成浮点数,数据归一化处理等;
模型推理 :对输入数据进行推理计算,并输出推理数据,在手写体识别例子中,输出的是预测为0~9这10个数字对应的概率值;
后处理 :对推理输出的数据进行解析,得到最终推理结果,在分割的例子中,从Tensor中解析出最终你要的各个类别的idx组成的矩阵就是分割的结果。
NNIE 是 Neural Network Inference Engine 的简称,是海思媒体 SoC 中专门针对神经网络特别是深度学习卷积神经网络进行加速处理的硬件单元,支持现有大部分的公开网络,如 Alexnet、VGG16、Googlenet、Resnet18、Resnet50 等分类网络,Faster R- CNN、YOLO、SSD、RFCN 等检测网络,以及 SegNet、FCN 等场景分割网络。
sample_nnie_main.c例程函数调用关系:
NNIE-lite 是面向算法工程师打造的,可以很容易的在Hisi芯片上移植算法,验证算法的效果和效率,而不必过多关心NNIE的细节,而且也不用对C语言有太多的经验。
参见博客https://blog.csdn.net/racesu/article/details/107045858里面详细介绍了如何搭建模型转换的环境。
在工程目录的examples中有使用NNIE-lite做通用分类和通用分割的例子,每个例子都可以单独运行,main函数中就是调用的整个流程。
希望越来越多的小伙伴能够加入到 NNIE-lite,贡献你们已经跑通的demo,我会把你们的名字写在 NNIE-lite 的页面上。
模型 | 输入数据维度 | cv500 | av100 |
---|---|---|---|
MNIST | 1x28x28x1 | 0.1 ms | 0.1 ms |
Yolov1 | 1x448x448x3 | 102 ms | 36 ms |
Yolov2 | 1x416x416x3 | 201 ms | 75 ms |
Yolov3 | 1x416x416x3 | 182 ms | 60 ms |
SSD | 1x300x300x3 | 149 ms | 53 ms |
PvaNet | 1x224x224x3 | 43 ms | 16 ms |
RFCN | 1x800x600x3 | 501 ms | 180 ms |
SegNet | 1x224x224x3 | 183 ms | 65 ms |
ENet | 1x352x640x3 | 250 ms | 92 ms |
(AlexNet)FasterRCNN | 1x1240x375x3 | 51 ms | 18 ms |
LSTM | 16x128x20 | 94 ms | 34 ms |
https://zhuanlan.zhihu.com/p/67327779
https://blog.csdn.net/ywcpig/article/details/85260752