参考:
yolo网络分析
yolo v3论文解析
yolo网络结构定义的cfg文件
- yolo中的网络采用和caffe差不多的方式。都是通过一个顺序堆叠layer对神经网络结构进行定义的文件。区别在于:yolo采用自己定义的cfg文件格式,需要自己实现解析功能。而caffe无需自己实现解析文件的功能,但缺点是对第三方库依赖严重,在编译常出现无法链接的错误。
- cfg文件的格式可以总结如下:
[net]
#下面对net的参数进行配置
#yolo对net求解器的参数也放在了这里
[conv]
#一些conv层的参数描述
[maxpool]
#池化层的参数描述
……
#顺序堆叠的其他层的参数描述
网络结构解析器parser
- 具体的解析见parser.c文件。先以convolutional_layer parse_convolutional(list *options, size_params params)函数为例,看darknet是如何完成对卷基层参数的解析的。这个函数接受一个list类型的变量,darknet将堆叠起来的这些层描述抽象成链表。另一个参数是size_params类型的params变量,它指示了该层上一层的参数状况。具体定义如下:
typedef struct size_params{
int batch;
int inputs;
int h;
int w;
int c;
int index;
int time_steps;
network net;
} size_params;
这样在构建该层卷积层时,就能够知道上一层的输入维度等信息,方便做一些参数检查和layer初始化的工作。