#PS:要转载请注明出处,本人版权所有
#PS:这个只是 《 我自己 》理解,如果和你的
#原则相冲突,请谅解,勿喷
时间:2018.06.25
ncnn master commit id:b3e24cafc37483dcc97ee61e6f0f6ff1b094300e
由于公司算法组的算法在某些arm板子的表现不佳,于是需要使用此框架进行优化,初步测试得出的结论为:此框架表现不错,于是需要对此框架进行深入学习。根据相关源码分析,要学习此框架的,最好的开始(突破口)应该在模型参数加载和网络加载部分。今天本文介绍网络文件的格式相关信息(根据其源码分析得出)。
其数值其实代表的是此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
层名称:_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:要转载请注明出处,本人版权所有.
有问题请留言,看到后我会第一时间回复