《TencentNCNN系列》 之param文件(网络结构文件)格式分析
PS:要转载请注明出处,本人版权所有。
PS: 这个只是基于《我自己》的理解,
如果和你的原则及想法相冲突,请谅解,勿喷。
前置说明
本文作为本人csdn blog的主站的备份。(BlogID=066)
本文发布于 2018-06-25 11:25:09,现用MarkDown+图床做备份更新。blog原图已丢失,使用csdn所存的图进行更新。(BlogID=066)
环境说明
2018.06.25
ncnn master commit id:b3e24cafc37483dcc97ee61e6f0f6ff1b094300e
前言
由于公司算法组的算法在某些arm板子的表现不佳,于是需要使用此框架进行优化,初步测试得出的结论为:此框架表现不错,于是需要对此框架进行深入学习。根据相关源码分析,要学习此框架的,最好的开始(突破口)应该在模型参数加载和网络加载部分。今天本文介绍网络文件的格式相关信息(根据其源码分析得出)。
格式分析
param文件举例:
上文例图中第一行(版本信息):
其数值其实代表的是此param文件的版本。
相关源码说明:
int magic = 0;
fscanf(fp, "%d", &magic);
if (magic != 7767517)
{
fprintf(stderr, "param is too old, please regenerate\n");
return -1;
}
上文例图中第二行(层与数据交换结构数量):
第一个数:层(layer)数量
第二个数:数据交换结构(blob)数量
相关源码说明:
// parse
int layer_count = 0;
int blob_count = 0;
fscanf(fp, "%d %d", &layer_count, &blob_count);
上文例图第三四行(相关层的信息):
前4个值的含义固定:
- 层的类型
- 层的名称
- 输入数据结构(blob)数量(bottom)(input层特殊点)
- 输出数据结构(blob)数量(top)
后面有三种类型的值《《《严格按照顺序排序》》》:
- 第一种:网络输入层名(一个层可能有多个输入,于是有多个网络输入层名)
- 第二种:网络输出层名(一个层可能有多个输出,于是有多个网络输出层名)
- 第三种(可能没有):特殊参数层,一是k=v的类型存在。二是k=len,v1,v2,v3....(数组类型)。此层在ncnn中是存放到paramDict结构中,不同类型层,各种参数意义不一样,需要具体分析。
这里就上文图中第四行的BinaryOp层进行举例分析(其他不同的分析需要具体看不同层的源码)
层类型:BinaryOp
层名称:_minusscalar0
输入数据结构数量(bottom blob):1
输出数据结构数量(top blob):1
特殊参数1(第一个k=v):id=0,op_type=1(代表加法Operation_SUB)
特殊参数2(第二个k=v):id=1,scale val=1
特殊参数3(第三个k=v):id=2,b=127.50000(因为操作类型为减法,所以此值代表减数)
By the way:上文图中第五行是做乘法。第四五行合在一起代表的是对输入图像进行归一化。
相关源码:
op_type = pd.get(0, 0);
with_scalar = pd.get(1, 0);
b = pd.get(2, 0.f);
后记
无
参考文献
- 无
打赏、订阅、收藏、丢香蕉、硬币,请关注公众号(攻城狮的搬砖之路)
PS: 请尊重原创,不喜勿喷。
PS: 要转载请注明出处,本人版权所有。
PS: 有问题请留言,看到后我会第一时间回复。
《TencentNCNN系列》 之param文件(网络结构文件)格式分析的更多相关文章
- after effects的xml格式工程文件aepx的格式分析(一)
表面上看,AE的工程文件可以另存为xml格式,我们可以通过直接编辑XML来做一些事情. 很可惜,通过aepx文件修改AE工程,能做到的非常有限.理由是: 1.重要的属性都放在了标签的bdata这个属性 ...
- EML文件(MIME邮件)格式分析
电子邮件普遍遵循的邮件技术规范.MIME邮件由邮件头和邮件体两部分组成.邮件头包括:标题,送信人,收信人,创建日期,邮件体内容类型和邮件体编码方式等内容.邮件体包括:正文,超文本,内嵌数据和附件等内容 ...
- PDF格式分析
系列文章是csdn作者'秋风之刀'写的,我只是把目录列出来而已,感谢作者辛苦付出. PDF格式分析(一)简介 PDF格式分析(二)语法之对象 PDF格式分析(三)语法之Filter PDF格式分析(四 ...
- zlib压缩一个文件为gzip格式
网上有很多针对zlib的总结,但是很零散,自己经过总结,实现了用zlib压缩一个文件为gzip格式,似的可以直接使用winr工具解压. 具体方法是使用zlib的deflate系列函数,将buffer压 ...
- HTTP POST请求报文格式分析与Java实现文件上传
时间 2014-12-11 12:41:43 CSDN博客 原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHt ...
- C#压缩文件为zip格式
Vercher C#压缩文件为zip格式 需要ICSharpCode.SharpZipLib.dll,网上下载的到. 代码是从网上找来的: 1 public class ZipClass 2 { ...
- EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象
EF+LINQ事物处理 在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...
- [Web Chart系列之六] canvas Chart 导出图文件
前言 博主正在参加CSDN2013年度博客之星评选,如果这篇文章对您有用,请投他一票: 投票地址:http://vote.blog.csdn.net/blogstaritem/blogstar2013 ...
- SpringBoot系列之@PropertySource读取yaml文件
SpringBoot系列之@PropertySource支持yaml文件读取 最近在做实验,想通过@PropertySource注解读取配置文件的属性,进行映射,习惯上用properties都是测试没 ...
- 28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式
转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html XML Schema 语言也称作 XML Schema 定义(XML S ...
随机推荐
- 【学习笔记】Python 环境隔离
目录 前言 venv venv 环境管理 venv 包管理 virtualenv 以及 virtualenvwrapper 安装 virtualenvwrapper 环境管理 virtualenvwr ...
- Hello,World! 6.28
代码 public class Hello{ public static void main(String[] args){ System.out.print("Hello,World!&q ...
- 动态获取input内容文本(排除候选拼音文本) - js事件
要想通过事件实时获取文本框文本,一开始是想到下面的方法,但实际效果都存在一定的缺点. 通过change/blur事件获取 change事件只有在选中点击或者失焦的时候,才能够触发. blur事件则是只 ...
- 回顾复习之坐标DP
定义 坐标型动态规划一般是给定网格.序列,求满足条件的MAX或MIN. 开数组时,dp[i]一般代表以ai结尾的满足条件的子序列,dp[i][j]代表以i.j结尾的满足条件的最优解 例题 数塔 典中典 ...
- SSIS数据同步系统
缘起: 若干年前,刚到一家3C类的电商公司做DBA,到公司没几天,公司的CEO和研发总监,说现在要做个事情: 把IDC的数据库的数据,要同步一份到仓库,因单量大,仓库经常爆仓,仓库网络不好时,可以直接 ...
- Java设计模式-模板模式Template
介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),z 在一个抽象类公开定义了执行.它的方法的模板.它的子类可以按需要重写方法实现, ...
- Python之读取Excel
介绍 现在交给你一份2010年美国各州县人口普查表:censuspopdata.xlsx.共72864条记录. 每一行代表一个县某统计区的人口数. 需要你统计出:各县统计区数量和人口数. 表格内容长这 ...
- dllimport 和 dllexport
Dll 在需要暴露接口的头文件里添加 dllexport 声明,比如, #define DllExport __declspec( dllexport ) class DllExport C { in ...
- 基于javaweb的服装租赁网站
演示 技术+环境+工具 jdk8+maven.3.2.1+mysql5.7+idea+navicat+spring+springmvc+mybatis+bootstrap+jquery+ajax
- Taurus.MVC WebMVC 入门开发教程5:表单提交与数据验证
前言: 在本篇 Taurus.MVC WebMVC 入门开发教程的第五篇文章中,我们将学习如何处理表单提交和进行数据验证. 这是 Web 开发中非常重要的一部分,因为它涉及到用户输入数据的处理和有效性 ...