【Darknet源码 】cfg文件参数详解

cfg文件是darknet中描述网络结构的文件,和caffe的prototxt类似。在darknet框架下cfg中一般先以[net]或[network]开头,描述网络的整体参数,然后接着各层参数的描述,查看string_to_layer_type()函数,一共包括以下层结构:

[shortcut],[crop],[cost],[detection],[region],[yolo],[iseg],[local],[conv]/[convolutional],
[deconv]/[deconvolutional],[activation],[logistic],[l2norm],
[crnn],[gru],[lstm],[rnn],[conn]/[connected],[max]/[maxpool],
[reorg],[avg]/[avgpool],[dropout],[lrn]/[normalization],[batchnorm],
[soft]/[softmax],[route].

这几天梳理源码,首先摘要几个常用的层的相关参数:[net] /[network] 、[conv]/[convolutional]、[shortcut]、[avg]/[avgpool]、[softmax] 、[cost]。方便大家查阅,另外部分参数尚不清楚功用,暂时先空置,欢迎大家斧正指教  ^(* ̄(oo) ̄)^

[net] /[network]  #该部分描述整个网络的超参数,在void parse_net_options()中解析
#输入图像相关参数
height            #输入图像高,为32的倍数,默认为0
width             #输入图像宽,为32的倍数,默认为0
channels          #输入图像通道,一般三通道,默认为0
batch     	#这儿batch与机器学习中的batch有少许差别,仅表示网络积累多少个样本后进行一次BP,    
                #默认为1
subdivisions  	#这个参数表示将一个batch的图片分sub次完成网络的前向传播,在Darknet中,batch和
                #sub是结合使用的,例如这儿的batch=64,sub=16表示训练的过程中将一次性加载64张图
                #片进内存,然后分16次完成前向传播,意思是每次4张,前向传播的循环过程中累加loss
                #求平均,待64张图片都完成前向传播后,再一次性后传更新参数,调参经验:sub一般设置
                #16,不能太大或太小,batch的值可以根据显存占用情况动态调整,一次性加减sub大小即
                #可,通常情况下batch越大越好,注意,在测试的时候batch和sub都设置为1!默认为1

#数据增强相关参数
max_crop	    #输入图的最小边需要在[min_crop,max_crop]区间内,如果输入和这个不符合,则通过缩                        
                    #放使之符合。默认为 2*输入宽度w
min_crop  	    #默认为 输入宽度w
max_ratio           #与max_crop/min_crop类似, 默认为max_crop  / w
min_ratio           #默认为 min_crop  / w

center          #暂不清楚,默认为 0
clip            #可能和图片裁剪有关,默认为 0

angle           #通过旋转角度来生成更多训练样本,默认为0
aspect          #通过方向来生成更多训练样本,默认为1
saturation      #通过调整饱和度来生成更多训练样本,默认为1
exposure   	    #通过调整曝光量来生成更多训练样本,默认为1
hue             #通过调整色调来生成更多训练样本,默认为0


#学习率相关参数
learning_rate   #基础学习率,默认为0.001
momentum        #梯度下降动量,默认为0.9
decay           #权重衰减正则项,防止过拟合,默认为0.0001

time_steps      #时间步数,RNN/LSTM模型中参数
notruth         #不清楚,没用到
random          # 是否开启多尺度训练,开启后对GPU要求较高
adam            #是否使用adma,默认为 0
B1              # adam 参数
B2              # adam 参数
eps             # adam 参数

policy          #学习率衰减策略,默认constant,
                #有:random,poly,constant,step,exp,sigmoid,steps  
burn_in 	    #设置了这个参数,当update_num小于burn_in时,不是使用配置的学习速率更新策略,
				#而是按照公式lr = base_lr * power(batch_num/burn_in,pwr) 更新,其背后的假设
                #是:全局最优点就在网络初始位置附近,所以训练开始后的burn_in次更新,学习速率从
                #小到大变化。update次数超过burn_in后,采用配置的学习速率更新策略从大到小变化,
                #显然finetune时可以尝试。默认为0
power    		#学习率衰减公式中,幂次方参数,默认为4
step       		#采用step或sigmoid学习率衰减策略时的参数,默认为1
scale      		#采用step和steps学习率衰减策略时的参数,默认为1
steps      		#采用steps策略时参数,多个参数之间使用,分开,例如 10000,1000000等
scales   		#采用steps策略时参数,多个参数之间使用,与steps保持一致
gamma  			#采用exp,sigmoid时启用参数,默认为1
max_batches  	        #最大批数量,默认为0


[conv]/[convolutional]  #该部分为卷积层参数,在parse_convolutional()中解析
filters  		#卷积核个数,默认为1
size			#获取卷积核尺寸,默认为1
stride			#卷积跨度,默认为1
pad		      #是否在输入图像四周补0,若需要补0,值为1,默认为0
padding			#四周补0的长度,默认为size/2,向下取整
groups			#分组卷积(深度卷积),组数,默认为1
activation      #激活函数,默认为logistic,其他还有: logistic,loggy,relu,elu,selu,relie,              
                #plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair
batch_normalize #是否进行规范化,1表示进行规范化,默认为0
binary			#是否对权重进行二值化,1表示进行二值化,默认为0
xnor			#是否对权重以及输入进行二值化,1表示是,默认为0
flipped			#是否翻转,默认为0
dot				#暂不清楚,默认为0,此变量已无使用


[shortcut]      #捷径层,与卷积层一起构建残差模块,parse_shortcut()中解析
from            #表示当前层与前面的多少层进行叠加,-3表示前面第三层。没有默认参数,必须制定
activation      #激活函数,一般为 leaky,ReLU,默认为linear
alpha			#叠加权重,默认为1
beta			#叠加权重,默认为1	

#注意[shortcut]层与[convolutional]层可以组成残差模块
#		 Residual Block
#		[convolutional]
#		batch_normalize=1
#		filters=64
#		size=3
#		stride=1
#		pad=1
#		activation=leaky
#		
#		[convolutional]
#		batch_normalize=1
#		filters=64
#		size=3
#		stride=1
#		pad=1
#		activation=linear
#		
#		[shortcut]
#		activation=leaky
#		from=-3
#


[avg]/[avgpool] #均值池化层,一般接在最后softmax层前,替代全连接层,减少计算量
            #相关参数根据上一层输出自动生成,在parse_avgpool()中解析 


[softmax]       #池化层,网络最后输出预测的概率分布,在parse_softmax()中解析
groups			#分组数,softmax计算量较大,分为多组计算,默认为1	
temperature		#softmax的温度参数,当temperature很大时,即趋于正无穷时,所有的激活值对应的激
                #活概率趋近于相同(激活概率差异性较小);而当temperature很低时,即趋于0时,不同
                #的激活值对应的激活概率差异也就越大。默认为1
tree			#softmax计算量较大,按照树结构计算??,默认为0
spatial			#与GPU计算相关,分组计算默认为0
noloss			#是否不计算损失(交叉熵),默认计算,默认为0

[cost]			#代价层函数,在目标探测中计算预测值与真实值得总体损失,在parse_cost()中解析

type            #代价函数类型,默认了为sse,其他有:seg,sse,masked,smooth,L1,wgan
scale    		#缩放尺度,默认为1
ratio			#暂不清楚,与GPU计算有关,默认为0
noobj			#noobject_scale,暂不清楚,与GPU计算有关,默认为1
thresh			#iou阈值,当best_iou大于阈值时,损失系数置0,默认为0


[route]         # 用来合并前面若干层的输出,作为一个新层,其本质上就是一个复制操作
layer           # 将多个层输出拼接在一起,如果为负数,则表示该层的前几层
# 例如输入层1:26*26*256   输入层2:26*26*128  则route layer输出为:26*26*(256+128)

 

 

 

 

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子都吃不起!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值