ncnn param文件格式
一、ncnn模型
可由ncnn库中的onnx2ncnn
工具将onnx格式模型转换为ncnn格式的.param和.bin两个文件,其中param记录了各算子,param文件可直接由可视化工具Nerton打开查看,这里记录下param文件格式。ncnn模型的加载参考:ncnn加载模型的几种方式
二、param文件格式
1. magic number
文件第一行为:7767517,这个数据可以看作ncnn的一个版本号
2. [layer count] [blob count]
第二行包含网络的层数(layer count)以及 数据转换的次数(blob count),其中blob count通常大于layer count
3. layer line
后面的每一行表示每一层的信息,其格式如下:
[layer type] [layer name] [input count] [output count] [input blobs] [output blobs] [layer specific params]
其中
- layer type
当前层的类型名,比如Convolution,Softmax等 - layer name
当前层的名称, 该名称在所有层中必须唯一 - input count
当前层输入数据blob的个数 - output count
当前层输出数据blob的个数 - input blobs
输入层的名称,以空格隔开,个数和input count相同,所有名称都必须唯一 - output blobs
输出层的名称,以空格隔开,个数和output count相同,所有名称必须唯一 - layer specific params
每一层的特殊参数,以key=value或者key=list形式出现,以空格隔开, layer params可以参考operation-param-weight-table
三、例子
如下图为ResNet18前几层的param文件内容
7767517
78 86
Input input 0 1 input
Convolution Conv_0 1 1 input 123 0=64 1=7 11=7 2=1 12=1 3=2 13=2 4=3 14=3 15=3 16=3 5=0 6=9408
BatchNorm BatchNormalization_1 1 1 123 124 0=64
ReLU Relu_2 1 1 124 125
Pooling MaxPool_3 1 1 125 126 0=0 1=3 11=3 2=2 12=2 3=1 13=1 14=1 15=1 5=1
Split splitncnn_0 1 2 126 126_splitncnn_0 126_splitncnn_1
对应的网络如下:
第二行表示该模型由78层,86次数据转换
第三行表示模型输入为名称为input
第四行表示该层为一个卷积层Convolution,该层名称为Conv_0, 该层输入blob为input,输出blob为123
参考operation-param-weight-table
可知:
0=64 表示输出通道数为64
1=7 11=7 表示卷积核的宽和高都为7
2=1 12=1 表示不为空洞卷积,如果大于1,则卷积核的感受野范围相应扩大
3=2 13=2 表示宽和高步长都为2
4=3 14=3 表示填充的宽和高都为3
5=0 表示偏置个数为0
6=9408 表示该卷积层参数个数为9408(N_i*k*K*N_o = 3*7*7*64)