根据NCNN darknet2ncnn.cpp文件中的逻辑,总结YOLOV系列模型的数据文件结构如下,首先看代码中对权重文件的解析是如何操作的:
分析逻辑,可以看出,权重文件的前三个INT型数据共12个字节,分别为major, minor, revision,而后面的数据,根据前三个域计算得到的版本信息不同,则有不同的理解,分别为8个字节或者4个字节的iseen。
我们实际分析一下YOLOV3,YOLOV4的权重文件是否满足这个特征:
yolov4-tiny.weights.
yolov4.weights
yolov3-tiny.weights
yolov3.weights
所以可以看出,权重文件包括一个16个字节或者20个字节的头,至于之后的数据,经过分析,整份代码实现没有进行read pos的调整操作(比如seek 等等),而仅仅是通过调用read_to函数不断的读,并且这个读是按照模型的结构同步进行的,所以可以猜测,权重文件除了头之外,剩下的包括权重和偏置的信息是不存在存储结构的。