• darknet 结构体汇总


    目录

    1. list.h文件

    1.1 node

    1.2 list

    2. parser.c文件

    2.1 section

    2.2 size_params

    3. option_list.h

    3.1 kvp

    4. darknet.h

    4.1 network

    4.2 layer


    这里对darknet使用到的结构体进行汇总。

    1. list.h文件

    1.1 node

    1. // cfg文件每一个[xxx]代表一个片区(section),通常表示的是一个 层(layer)
    2. // 链表中的每个node,都是一个section.
    3. // 双向链表的节点定义
    4. typedef struct node{
    5. void *val; // 存放的是指向实际值的指针。
    6. struct node *next; // 指向当前节点的下一节点
    7. struct node *prev; // 指向当前节点的上一节点
    8. } node;

    1.2 list

    1. // 网络配置双向链表,存储cfg网络配置文件。
    2. // // 双向链表
    3. typedef struct list{
    4. int size; // 配置文件的节点数,即section个数,通常就是layer层数
    5. node *front; // 头指针,指针链表第一个节点
    6. node *back; // 尾指针,指针链表最后一个节点
    7. } list;

    2. parser.c文件

    2.1 section

    1. typedef struct{
    2. char *type; // 字符串
    3. list *options; // 双向链表
    4. }section;

    一个section结构体变量,对应一个网络层配置。

    (1) type可能的值:[net], [maxpool], [convolutional], [avgpool], [softmax]等等;

    (2) options:双向链表,利用尾插法,逐个插入中括号后面的属性;

    例如。*.cfg配置文件内容如下。

    1. [net]
    2. batch=128
    3. subdivisions=1
    4. height=28
    5. width=28
    6. channels=3
    7. max_crop=32
    8. min_crop=32
    9. hue=.1
    10. saturation=.75
    11. exposure=.75
    12. learning_rate=0.1
    13. policy=poly
    14. power=4
    15. max_batches = 5000
    16. momentum=0.9
    17. decay=0.0005
    18. [convolutional]
    19. batch_normalize=1
    20. filters=32
    21. size=3
    22. stride=1
    23. pad=1
    24. activation=leaky
    25. [maxpool]
    26. size=2
    27. stride=2
    28. [convolutional]
    29. batch_normalize=1
    30. filters=16
    31. size=1
    32. stride=1
    33. pad=1
    34. activation=leaky

    则对应得到的,双向链表存储内容如下,网状结构。

    2.2 size_params

    1. typedef struct size_params{
    2. int batch;
    3. int inputs; // h*w*c
    4. int h;
    5. int w;
    6. int c;
    7. int index;
    8. int time_steps;
    9. int train; // 为0,则Inference only,为1,Inference & Training
    10. network net;
    11. } size_params;

    3. option_list.h

    3.1 kvp

     kvp结构体变量存储的是键值对,比如网络层convolutional有属性batch_normlize=1, filters=2.

    1. ///
    2. /// 存放属性,比如filter=3.
    3. ///
    4. typedef struct{
    5. char *key; // filter
    6. char *val; // 3
    7. int used; // 0代表未被使用
    8. } kvp;

    4. darknet.h

    4.1 network

    net网络

    1. typedef struct network {
    2. int n; // 网络中层的数量
    3. int batch; // 批次大小
    4. uint64_t *seen; // 已经有多少图片被处理过了
    5. float epoch; // 迭代大小
    6. int subdivisions; // 子划分,对batch size进行进一步的划分,以便于某些小显存的GPU也能够运行程序。
    7. layer *layers; // 每一个层的定义,layer结构体指针。
    8. float *output; // 输出
    9. learning_rate_policy policy; // 学习率更新策略,枚举类型,包括CONSTANT, STEP, EXP, POLY, STEPS, SIG, RANDOM, SGDR
    10. float learning_rate; // 学习率
    11. float learning_rate_min;
    12. float learning_rate_max;
    13. int batches_per_cycle;
    14. int batches_cycle_mult;
    15. float momentum; // 动量大小
    16. float decay; // 衰减系数
    17. ...
    18. } network;

    4.2 layer

    layer网络层

    1. // layer.h
    2. struct layer {
    3. LAYER_TYPE type; // 网络层的名称,枚举类型,比如CONVOLUTIONAL、 MAXPOOL
    4. ACTIVATION activation; // 激活函数名称,枚举类型,比如RELU, RELU6, RELIE, LINEAR
    5. ACTIVATION lstm_activation; // 激活函数名称,枚举类型
    6. COST_TYPE cost_type; // 损失函数名称,枚举类型,包含SSE, MASKED, L1, SEG, SMOOTH,WGAN
    7. // 定义函数指针
    8. void(*forward) (struct layer, struct network_state); // 前向传播
    9. void(*backward) (struct layer, struct network_state); // 反向传播
    10. void(*update) (struct layer, int, float, float, float); // 更新函数
    11. void(*forward_gpu) (struct layer, struct network_state);
    12. void(*backward_gpu) (struct layer, struct network_state);
    13. void(*update_gpu) (struct layer, int, float, float, float, float);
    14. layer *share_layer; // 结构体指针,指向layer结构体变量
    15. int train; // 标志符,1表示训练。
    16. int avgpool; // 标志符, ?
    17. int batch_normalize; // 标志符, ?
    18. int shortcut; // 标志符, ?
    19. int batch; // batch size
    20. int dynamic_minibatch; // ?
    21. int forced;
    22. int flipped;
    23. int inputs; // 输入图片(特征)的元素个数?
    24. int outputs; // 输入图片(特征)的元素个数?
    25. float mean_alpha;
    26. int nweights; // 权值矩阵元素个数,即n个多通道卷积核的所有元素个数
    27. int nbiases; // 偏置项元素个数,对于卷积层,偏置项个数==卷积核个数,对于全连接层,偏置项个数==神经元个数
    28. int extra;
    29. int truths;
    30. int h, w, c; // 特征图的尺度。
    31. int out_h, out_w, out_c; // 输出特征图的尺度
    32. int n; // 卷积核个数
    33. int max_boxes;
    34. int truth_size;
    35. int groups; // 组数,默认是1,分组卷积技术。
    36. int group_id;
    37. int size; // 卷积核的长宽,默认长宽相等。
    38. int side;
    39. int stride; // 步长
    40. int stride_x; // x方向的步长
    41. int stride_y;
    42. int dilation; // 空洞卷积参数,默认是1
    43. ...
    44. };

    待续。。。

  • 相关阅读:
    <JavaEE> 理解IP协议的两个功能 -- 地址管理和路由选择
    Ubuntu如何连接WiFi
    https
    QT实现凸凹边形等距缩放
    Java全栈工程师:技术与视野的双重拓展
    第3章:数据链路层
    AI优秀企业案例——机器人流程自动化:达观数据RPA
    【故障诊断】基于改进型的节点重构小波包频带能量谱结合概率神经网络 PNN实现轴承联合故障诊断附matlab代码
    LeetCode 2007. 从双倍数组中还原原数组
    【TWVRP】基于matlab鲸鱼算法求解带时间窗开放式车辆路径问题【含Matlab源码 1986期】
  • 原文地址:https://blog.csdn.net/jizhidexiaoming/article/details/126143230