《TencentNCNN系列》 之param文件(网络结构文件)格式分析

#PS:要转载请注明出处,本人版权所有

#PS:这个只是 《 我自己 》理解,如果和你的

#原则相冲突,请谅解,勿喷

时间: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个值的含义固定:
1 层的类型
2 层的名称
3 输入数据结构(blob)数量(bottom)(input层特殊点)
4 输出数据结构(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:要转载请注明出处,本人版权所有.

有问题请留言,看到后我会第一时间回复

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值