ncnn
学习腾讯开源的深度学习推理库——ncnn,主要包含如何使用,及代码实现。
MirrorYuChen
瞎哔哔!
展开
-
vs2015/2017配置腾讯开源框架ncnn
腾讯ncnn官方github下载地址为:https://github.com/Tencent/ncnn github上有一个配置好的vs2015版本ncnn:https://github.com/guozhongluo/ncnn-vs2015-examples-demo 1、框架编译 可以直接下载这个vs2015版本的ncnn,下载完之后打开。 这里...原创 2018-09-20 00:08:39 · 2751 阅读 · 7 评论 -
ncnn之yolov2
ncnn框架是一个非常好的深度学习部署框架,基于ncnn,我们可以很方便的对训练好的深度学习模型部署到手机(Android或Ios)、linux和PC端上,而且ncnn还提供了各个框架模型转换成ncnn可读形式模型的工具,如图1所示。 ...原创 2018-10-21 19:20:13 · 3535 阅读 · 21 评论 -
ncnn 载入insightface训练好的性别年龄识别模型
1、模型转换从insightface项目中下载mxnet模型:https://github.com/deepinsight/insightface/tree/master/gender-age/model2、使用ncnn的模型转换工具mxnet2ncnn进行模型转换./mxnet2ncnn model-symbol.json model-0000.params ag.param ag...原创 2019-03-28 21:33:14 · 5135 阅读 · 12 评论 -
ncnn载入106点关键点检测模型
最近发现一款强大的开源部署框架,左庆博士开源的ZQCNN:https://github.com/zuoqing1988/ZQCNN发现里面有个106个点的人脸关键点检测模型效果特别好,就将其对应mxnet模型转换成ncnn对应模型,测试代码如下:#include <iostream>#include "opencv2/opencv.hpp"#include "ncnn/n...原创 2019-04-08 20:04:58 · 4578 阅读 · 34 评论 -
ncnn源码学习(一):载入param文件
前段时间,分别尝试了使用腾讯开源的深度学习推理框架ncnn、陈天奇大神团队开源的tvm,及最新的阿里开源mnn,就好用程度来说,腾讯的ncnn当之无愧的第一名,这里大致写一下源码学习心得体会,方便后面进一步学习。 ncnn接口函数 在使用ncnn来部署模型时,我们会预先定义一个Net对象,然后使用load_param和load_m...原创 2019-09-05 21:26:43 · 7480 阅读 · 0 评论 -
ncnn源码学习(二):参数字典paramdict
上一节讲到,在使用load_param接口载入参数时,需要用参数字典ParamDict来解析.param文件中的特定参数,如: 0=64 1=3 11=3 5=1 6=1728 那么参数字典具体如何进行解析的?我们首先看一下paramdict.h文件中定义的数据成员变量: // parameters struct { ...原创 2019-09-06 20:12:47 · 3154 阅读 · 2 评论 -
ncnn源码学习(三):解析layer层
这个地方应该是ncnn除了优化(int8量化和汇编代码优化)之外,最难理解的部分了。前面已经讲了如果将param文件中特殊参数解析成参数字典ParamDict,而在net中,layer会根据参数字典,这里如果我们直接看layer载入参数的代码,可能就很懵逼了: // layer载入param int lr = layer->load_para...原创 2019-09-07 19:52:45 · 4058 阅读 · 13 评论 -
ncnn源码解析(四):模型权重载入
前面已经大致总结了ncnn的param文件载入,根据param文件创建网络结构,然后通过bin文件载入每一层对应的网络参数。这里就总结一下,如何载入每一层的参数: 我们常用的网络参数载入的接口为: // 从二进制文件中载入模型 int load_model(const char* modelpath); 找到对应net.cpp...原创 2019-09-08 19:29:00 · 3320 阅读 · 3 评论 -
ncnn源码解析(五):执行器Extractor
前面大致总结了一下ncnn模型载入的流程,模型载入之后,就是新建一个Extractor,然后设置输入,获取输出: ncnn::Extractor ex = net.create_extractor(); ex.set_num_threads(4); ex.input("data", in); ncnn::Mat out; ex.extract("...原创 2019-09-09 20:56:11 · 6833 阅读 · 0 评论 -
ncnn源码学习(六):模型量化原理笔记
1.请直接去学习大佬们的文章:章小龙的:Int8量化-介绍(一):https://zhuanlan.zhihu.com/p/58182172Int8量化-python实现以及代码分析(二):https://zhuanlan.zhihu.com/p/58208691虫叔的:Int8量化-ncnn社区Int8重构之路(三):https://zhuanlan.zhihu.com/p/...原创 2019-09-28 16:17:45 · 9708 阅读 · 8 评论 -
ncnn源码学习(七):常见操作算子(上)
1.绝对值操作:AbsVal 对应代码:// 前向在位传播int AbsVal::forward_inplace(Mat& bottom_top_blob, const Option& opt) const{ // 输入的width,he...原创 2019-10-07 20:01:52 · 4251 阅读 · 4 评论 -
ncnn源码学习(八):常见操作算子(中)
1.阈值操作:Threshold 将大于阈值的元素置为1,将小于或等于阈值的元素置为0。对应代码为:int Threshold::forward_inplace(Mat& bottom_top_blob, const Option&...原创 2019-11-06 00:31:35 · 4704 阅读 · 0 评论 -
ncnn源码学习(九):常见操作算子(下)
1.reorg算子:重排这个源自于yolo V2,如ssd网络一样,它会将不同层级不同大小的特征图concat到一起,用于多尺度检测,不同的是yolo V2使用reorg的方式来进行实现,如图所示:已知输入大小为:2W*2W,需要得到W*W大小的特征图,那么就可以按照上面的方式,每次取4个元素分配给4个子特征图,按照这种方式从左到右,从上到下遍历就可以得到4个W*W的特征图,多通道的与...原创 2019-11-21 23:13:46 · 3077 阅读 · 0 评论 -
ncnn源码学习(十):添加layer
给ncnn的网络添加layer分为两种情况:1.模型转换之后,某些layer没有转换成功:如,shufflenetV2中,param文件只转换到了fc这一个layer:这时需要添加一层softmax,可以先对param文件中转换成功的layer做推理,然后手动添加一个softmax层: ncnn::Extractor ex = shufflenetv2.create_...原创 2019-11-25 19:44:57 · 2201 阅读 · 0 评论