当前位置:网站首页>darknet 结构体汇总
darknet 结构体汇总
2022-08-11 10:48:00 【Mr.Q】
目录
这里对darknet使用到的结构体进行汇总。
1. list.h文件
1.1 node
// cfg文件每一个[xxx]代表一个片区(section),通常表示的是一个 层(layer)
// 链表中的每个node,都是一个section.
// 双向链表的节点定义
typedef struct node{
void *val; // 存放的是指向实际值的指针。
struct node *next; // 指向当前节点的下一节点
struct node *prev; // 指向当前节点的上一节点
} node;
1.2 list
// 网络配置双向链表,存储cfg网络配置文件。
// // 双向链表
typedef struct list{
int size; // 配置文件的节点数,即section个数,通常就是layer层数
node *front; // 头指针,指针链表第一个节点
node *back; // 尾指针,指针链表最后一个节点
} list;
2. parser.c文件
2.1 section
typedef struct{
char *type; // 字符串
list *options; // 双向链表
}section;
一个section结构体变量,对应一个网络层配置。
(1) type可能的值:[net], [maxpool], [convolutional], [avgpool], [softmax]等等;
(2) options:双向链表,利用尾插法,逐个插入中括号后面的属性;
例如。*.cfg配置文件内容如下。
[net]
batch=128
subdivisions=1
height=28
width=28
channels=3
max_crop=32
min_crop=32
hue=.1
saturation=.75
exposure=.75
learning_rate=0.1
policy=poly
power=4
max_batches = 5000
momentum=0.9
decay=0.0005
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=16
size=1
stride=1
pad=1
activation=leaky
则对应得到的,双向链表存储内容如下,网状结构。
2.2 size_params
typedef struct size_params{
int batch;
int inputs; // h*w*c
int h;
int w;
int c;
int index;
int time_steps;
int train; // 为0,则Inference only,为1,Inference & Training
network net;
} size_params;
3. option_list.h
3.1 kvp
kvp结构体变量存储的是键值对,比如网络层convolutional有属性batch_normlize=1, filters=2.
/// <summary>
/// 存放属性,比如filter=3.
/// </summary>
typedef struct{
char *key; // filter
char *val; // 3
int used; // 0代表未被使用
} kvp;
4. darknet.h
4.1 network
net网络
typedef struct network {
int n; // 网络中层的数量
int batch; // 批次大小
uint64_t *seen; // 已经有多少图片被处理过了
float epoch; // 迭代大小
int subdivisions; // 子划分,对batch size进行进一步的划分,以便于某些小显存的GPU也能够运行程序。
layer *layers; // 每一个层的定义,layer结构体指针。
float *output; // 输出
learning_rate_policy policy; // 学习率更新策略,枚举类型,包括CONSTANT, STEP, EXP, POLY, STEPS, SIG, RANDOM, SGDR
float learning_rate; // 学习率
float learning_rate_min;
float learning_rate_max;
int batches_per_cycle;
int batches_cycle_mult;
float momentum; // 动量大小
float decay; // 衰减系数
...
} network;
4.2 layer
layer网络层
// layer.h
struct layer {
LAYER_TYPE type; // 网络层的名称,枚举类型,比如CONVOLUTIONAL、 MAXPOOL
ACTIVATION activation; // 激活函数名称,枚举类型,比如RELU, RELU6, RELIE, LINEAR
ACTIVATION lstm_activation; // 激活函数名称,枚举类型
COST_TYPE cost_type; // 损失函数名称,枚举类型,包含SSE, MASKED, L1, SEG, SMOOTH,WGAN
// 定义函数指针
void(*forward) (struct layer, struct network_state); // 前向传播
void(*backward) (struct layer, struct network_state); // 反向传播
void(*update) (struct layer, int, float, float, float); // 更新函数
void(*forward_gpu) (struct layer, struct network_state);
void(*backward_gpu) (struct layer, struct network_state);
void(*update_gpu) (struct layer, int, float, float, float, float);
layer *share_layer; // 结构体指针,指向layer结构体变量
int train; // 标志符,1表示训练。
int avgpool; // 标志符, ?
int batch_normalize; // 标志符, ?
int shortcut; // 标志符, ?
int batch; // batch size
int dynamic_minibatch; // ?
int forced;
int flipped;
int inputs; // 输入图片(特征)的元素个数?
int outputs; // 输入图片(特征)的元素个数?
float mean_alpha;
int nweights; // 权值矩阵元素个数,即n个多通道卷积核的所有元素个数
int nbiases; // 偏置项元素个数,对于卷积层,偏置项个数==卷积核个数,对于全连接层,偏置项个数==神经元个数
int extra;
int truths;
int h, w, c; // 特征图的尺度。
int out_h, out_w, out_c; // 输出特征图的尺度
int n; // 卷积核个数
int max_boxes;
int truth_size;
int groups; // 组数,默认是1,分组卷积技术。
int group_id;
int size; // 卷积核的长宽,默认长宽相等。
int side;
int stride; // 步长
int stride_x; // x方向的步长
int stride_y;
int dilation; // 空洞卷积参数,默认是1
...
};
待续。。。
边栏推荐
- 03列中新增子行
- [Ext JS]11.14 SimXhr.js?_dc=1659315492151:65 Uncaught TypeError problem analysis and solution
- NT 内核函数原型大全
- The crawler is encapsulated into an api
- Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)
- 【应用SLAM技术建立二维栅格化地图】
- 2.MySQL ---- 修改数据库的字符集(日常小技巧)
- 阿里内网疯传的P8“顶级”分布式架构手册被我拿到了
- servlet——servlet执行流程 | servlet关系视图
- 全新FIDE 编译简单评测
猜你喜欢
爆料!前华为微服务专家纯手打500页落地架构实战笔记,已开源
LeetCode · Question of the Day · 1417. Reformatting String · Simulation
【Prometheus】 Grafana数据与可视化
如何给女朋友解释什么是缓存穿透、缓存击穿、缓存雪崩?
LeetCode·每日一题·1417.重新格式化字符串·模拟
阿里云ssl证书申请,宝塔ssl证书部署
I got the P8 "top" distributed architecture manual that went viral on Ali's intranet
TIOBE - 2022年8月编程语言排行
Neuropathic pain classification picture Daquan, neuropathic pain classification
PerfView project (first) : how to find hot spots function
随机推荐
[Ext JS]11.14 SimXhr.js?_dc=1659315492151:65 Uncaught TypeError问题分析与解决
LeetCode·每日一题·1417.重新格式化字符串·模拟
【应用SLAM技术建立二维栅格化地图】
Convolutional Neural Network Gradient Vanishing, The Concept of Gradient in Neural Networks
Gold Transfer(树上倍增)
分析 Flink 任务如何超过 YARN 容器内存限制
6.1 总线的概念和结构形态
LeetCode · Question of the Day · 1417. Reformatting String · Simulation
【教程】区块链是数据库?那么区块链的数据存储在哪里?如何查看数据?FISCO-BCOS如何更换区块链的数据存储,由RocksDB更换为MySQL、MariaDB,联盟链区块链数据库,区块链数据库应用
2. 类与对象——封装
全新FIDE 编译简单评测
Cholesterol-PEG-FITC, Fluorescein-PEG-CLS, Cholesterol-PEG-Fluorescein water-soluble
4. 继承
Word小技巧之图表实现自动编号和更新
使用函数计算打包下载OSS文件【遇坑锦集】
杰理AC632N蓝牙芯片iokey使用解析(通用MCU版)
我用这个操作,代码可读性提升一个档次
SAP Product Enhancement Technology Review
rem如何使用
Notes and Recommendations for Using Logs