NCNN 源码学习【一】:学习顺序

最近一段时间一直在做模型部署的工作,主要是利用NCNN部署到安卓端,跟着网上的博客和开源项目,做了很多工作,也学习到很多东西,但是对于NCNN的源码,并没有仔细的研究过,对我来说,仿佛是一个神秘的存在一样,接下来,将会对NCNN的源码进行研究,加深对于NCNN的理解。

正文

代码版本

截止到目前ncnn已经快5年了,代码也越来越庞大,很多都是一些新添加的功能支持啥的。这回读代码,我们比较关心的是ncnn整个的架构以及它代码的逻辑是怎么走的,所以这里我选用了ncnn最早的一个release的代码,这个代码的整体使用逻辑是现在的是一样,而且代码量比较少,看起来比较方便,我用的是这个:
https://github.com/Tencent/ncnn/releases/tag/20170724

【demo】

我们来看一下ncnn自带的一个经典demo:squeezenet的代码,这里我只贴出与ncnn有关的部分:

python 复制代码
// 网络加载
ncnn::Net squeezenet;
squeezenet.load_param("squeezenet_v1.1.param");
squeezenet.load_model("squeezenet_v1.1.bin");

// 数据预处理
ncnn::Mat in = ncnn::Mat::from_pixels_resize(image.data, ncnn::Mat::PIXEL_BGR, image.cols, image.rows, 227, 227);
const float mean_vals[3] = { 104.f, 117.f, 123.f };
in.substract_mean_normalize(mean_vals, 0);

// 网络推理
ncnn::Extractor ex = squeezenet.create_extractor();
ex.set_light_mode(true);
ex.input("data", in);
ncnn::Mat out;
ex.extract("prob", out);

从上面的代码可以看到,整个过程大体可以分为四个部分:

一、网络加载

  1. load_param
  2. load_model

二、数据预处理

  1. from_pixels_resize
  2. substract_mean_normalize

三、网络推理

  1. create_extractor
  2. input
  3. extract

四、每一层的推理(隐含在模型内的)

接下来的学习顺序也很简单,主要按照这四部分设计的代码,一层一层进去看,进去学习。

参考:

致谢:https://zhuanlan.zhihu.com/p/454835595

相关推荐
Thanks_ks14 天前
利用 TensorFlow 与 Docker 构建深度学习模型训练与部署流水线
深度学习·docker·tensorflow·模型部署·容器化技术·模型训练·flask 应用
王乐予1 个月前
NCNN 记录1:Ubuntu+CLion+OpenCV+NCNN+Squeezenet 从源码编译到代码输出全流程记录
linux·c++·opencv·ubuntu·clion·ncnn
阿利同学2 个月前
计算机视觉实战项目4(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)
目标检测·计算机视觉·分类·模型部署·计算机视觉实战项目·人工智能实战项目
哦豁灬2 个月前
NCNN 学习(2)-Mat
深度学习·学习·ncnn
哦豁灬2 个月前
NCNN 学习(1)-编译与算子注册
深度学习·学习·ncnn
hi943 个月前
Vitis AI 综合实践(DPU example: dpu_resnet50.ipynb)
人工智能·深度学习·模型部署·pynq
我是陈扣题3 个月前
使用RKNN在Orange Pi 5 (RK3588s) 上部署推理PPO深度学习模型
人工智能·深度学习·rk3588·强化学习·模型部署·ppo·orangep
机器学习社区7 个月前
用 LMDeploy 高效部署 Llama-3-8B,1.8倍vLLM推理效率
深度学习·算法·大模型·llama·模型部署·模型微调·模型推理
极智视界8 个月前
Android算法部署项目 | 在Android平台基于NCNN部署YOLOv5目标检测算法
android·算法·目标检测·yolov5·ncnn·优质项目实战·算法部署
OpenBayes8 个月前
【OpenBayes 官方教程】在模型训练中使用子域名访问服务
数据库·人工智能·机器学习·语言模型·数据集·模型部署·模型训练