IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Darknet中cfg文件参数详解 -> 正文阅读

[人工智能]Darknet中cfg文件参数详解

YOLO中cfg文件参数详解

1. cfg文件参数解释

YOLO v3为例详细解释cfg文件各参数的含义:

[net]	#[xxx]开始的行表示网络的一层,其后的内容为该层的参数配置,[net]为特殊的层,配置整个网络
# Testing	#测试模式  #初始batch参数要分为两类,分别为训练集和测试集,不同模式相应放开参数
batch=1
subdivisions=1
# Training	#训练模式 每次前向图片的数目=batch/subdivisions
# batch=64	#batch:一批训练样本的样本数量. 每batch个样本更新一次参数

# subdivisions=16	#关于batch与subdivision:在训练输出中,训练迭代包括8组,这些batch样本又被平均分成subdivision=8次送入网络参与训练,以减轻内存占用的压力
			#batch越大,训练效果越好,subdivision越大,占用内存压力越小
			#batch/subdivisions作为一次性送入训练器的样本数量
			#如果内存不够大,将batch分割为subdivisions个子batch
			#(subdivisions相当于分组个数,相除结果作为一次送入训练器的样本数量)
			 #注意:上面这两个参数如果电脑内存小,则把batch改小一点,batch越大,训练效果越好
			 #Subdivisions越大,可以减轻显卡压力(分组数目越多,每组样本数量则会更少,显卡压力也会相应减少)
			 	
width=416	 #网络输入的宽
height=416	 #网络输入的高
channels=3	 #网络输入的通道数
			 #这三个参数中,要求width==height, 并且为32的倍数,大分辨率可以检测到更加细小的物体,从而影响precision
			 #以上三个参数为输入图像的参数信息 width和height 影响网络对输入图像的分辨率,从而影响precision,只可以设置成32的倍数(由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。)
			 
momentum=0.9	#动量,影响梯度下降到最优的速度,一般默认0.9
				#DeepLearning中最优化方法中的动量参数,这个值影响着梯度下降到最优值得速度 
				#注:SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力

decay=0.0005	#权重衰减正则系数,防止过拟合, 正则项往往有重要意义
				#增加样本的数量,改变基础样本的状态. 增加样本整体的数量减少过拟合
angle=0	#旋转角度,从而生成更多训练样本 
saturation = 1.5	#调整饱和度,从而生成更多训练样本
exposure = 1.5	#调整曝光度,从而生成更多训练样本
hue=.1	#调整色调,从而生成更多训练样本

learning_rate=0.001	#学习率 ,决定了权值更新的速度. 学习率大,更新的就快,但太快容易越过最优值; 而学习率太小又更新的慢,效率低.
					#一般学习率随着训练的进行不断更改,先高一点,然后慢慢降低,一般在0.01--0.001
					#学习率决定着权值更新的速度,设置得太大会使结果超过最优值,直接错过最优值,震荡回去,太小会使下降速度过慢,导致收敛过慢。
					#如果仅靠人为干预调整参数,需要不断修改学习率。刚开始训练时可以将学习率设置的高一点,而一定轮数之后,将其减小。
					 #在训练过程中,一般根据训练轮数设置动态变化的学习率。
					 #[基本训练守则]
					 #刚开始训练时:学习率以 0.01 ~ 0.001 为宜。
					 #一定轮数过后:逐渐减缓
					 #接近训练结束:学习速率的衰减应该在100倍以上。
					 
					 
burn_in=1000	#学习率控制的参数,在迭代次数小于burn_in时,其学习率的更新有一种方式,大于burn_in时,才采用policy的更新方式
max_batches = 500200	#迭代次数,1000次以内,每训练100次保存一次权重; 1000次以上,每训练10000次保存一次权重; 训练达到max_batches后停止学习
policy=steps	#学习率策略,学习率下降的方式
				#这个是学习率调整的策略,有policy:constant, steps, exp, poly, step, sig, RANDOM,constant等方式
				#constant: 保持学习率为常量,caffe里为fixed
				#steps: 比较好理解,按照steps来改变学习率
				
steps=400000,450000	 #学习率变动步长 #Steps和scales相互一一对应, 这两个参数是设置学习率的变化, 根据batch_num调整学习率
scales=.1,.1	#学习率变动因子
				#如迭代到40000次时,学习率衰减十倍; 45000次迭代时,学习率又会在前一个学习率的基础上衰减十倍

[convolutional]	#卷积层
batch_normalize=1	 #BN,  是否做BN归一化操作
filters=32	#卷积核数目,  输出特征图的数量
size=3	#卷积核尺寸
stride=1	#做卷积运算的步长
pad=1	 #如果pad为0,padding由padding参数指定
		 #如果pad为1,padding大小为size/2,padding应该是对输入图像左边缘拓展的像素数量
activation=leaky	#激活函数类型: logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair

# Downsample	#以下为训练网络结构

[convolutional]
batch_normalize=1
filters=64
size=3
stride=2
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=32
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[shortcut]	#shotcut层配置说明。shortcut部分是卷积的跨层连接,就像Resnet中使用的一样
			 #借鉴了resnet网络的shortcut方式可以加深网络
			 #输入与输出:输入与输出一般保持一致,并且不进行其他操作,只是求差。
			 #处理操作:res层来源于resnet,为了解决网络的梯度弥散或者梯度爆炸的现象,提出将深层神经网络的逐层训练改为逐阶段训练,将深层神经网络分为若干个子段,每个小段包含比较浅的网络层数,然后用shortcut的连接方式使得每个小段对于残差进行训练,每一个小段学习总差(总的损失)的一部分,最终达到总体较小的loss,同时,很好的控制梯度的传播,避免出现梯度消失或者爆炸等不利于训练的情形。			 
			 
from=-3	#参数from是?3,意思是shortcut的输出是通过与先前的倒数第三层网络相加而得到, 跨越连接
activation=linear

# Downsample

[convolutional]
batch_normalize=1
filters=128
size=3
stride=2
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=64
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

# Downsample

[convolutional]
batch_normalize=1
filters=256
size=3
stride=2
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear


[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

# Downsample

[convolutional]
batch_normalize=1
filters=512
size=3
stride=2
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear


[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear


[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear


[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear


[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear


[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

# Downsample

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=2
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

[shortcut]
from=-3
activation=linear

######################

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]	# YOLO层前面一层卷积层配置说明
size=1
stride=1
pad=1
filters=255	#每一层前的最后一个卷积层中的 filters=num(yolo层个数)*(classes+5) ,5的意义是4个坐标加1个置信率,论文中的tx,ty,tw,th,c
			#classes为类别数,COCO为80,num表示YOLO中每个cell预测的框的个数,YOLOV3中为3
			#自己使用时,每一个[region/yolo]层前的最后一个卷积层中的 filters=num(yolo层个数)*(classes+5),此处的值一定要根据自己的数据集进行更改,例如你识别4个类,则:filters=3*(4+5)=27,三个fileters都需要修改
activation=linear


[yolo]	 # YOLO层配置说明。在yoloV2中yolo层叫region层,yolo2,3各自叫法不同     
mask = 6,7,8	#训练框
				#使用anchor的索引,如果mask的值是0,1,2,这意味着使用第一,第二和第三个anchor,因为检测层的每个单元预测3个box
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326	#总共有三个检测层,共计9个anchor
					#1.anchors是可以事先通过cmd指令计算出来的,是和图片数量,width,height以及cluster相关的预选框,可以手工挑选,也可以通过k-means算法从训练样本中聚类。
					#2.预测框的初始宽高,第一个是w,第二个是h,总数量是num*2
					
classes=80	 #类别数目  #ctrl+f搜 yolo, 总共会搜出3个含有yolo的地方
num=9	 #每个grid cell预测几个box,和anchors的数量一致
		 #当想要使用更多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝试调大object_scale
		 #每个grid预测的BoundingBox num/yolo层个数
jitter=.3	#通过抖动来防止过拟合,jitter就是crop的参数
			#利用数据抖动产生更多数据,YOLOv2中使用的是crop,filp,以及net层的angle,flip是随机的,crop就是jitter的参数,tiny-yolo-voc.cfg中jitter=.2,就是在0~0.2中进行cr
ignore_thresh = .7	#ignore_thresh 指得是参与计算的IOU阈值大小。当预测的检测框与ground true的IOU大于ignore_thresh的时候,参与loss的计算,否则,检测的框不参与损失计算
					#目的是控制参与loss计算的检测框的规模,当ignore_thresh过于大,接近于1的时候,那么参与检测框回归loss的个数就会比较少,同时也容易造成过拟合;而如果ignore_thresh设置的过于小,那么参与计算的数量规模就会很大。同时也容易在进行检测框回归的时候造成欠拟合
					 #参数设置:一般选取0.5-0.7之间的一个值,之前的计算基础都是小尺度(13*13)用的是0.7,(26*26)用的是0.5。这次先将0.5更改为0.7
truth_thresh = 1
random=1	#多尺度训练:如果显存小,设置random=0,关闭多尺度训练
			#random设置成1,可以增加检测精度precision,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致
			#提示:当打开随机多尺度训练时,前面设置的网络输入尺寸width和height其实就不起作用了,width会在320到608之间随机取值,且width=height,每10轮随机改变一次,一般建议可以根据自己需要修改随机尺度训练的范围,这样可以增大batch,可以自行尝试!
[route]	#路由层    进行多尺度训练
layers = -4	#当属性只有一个值时,它会输出由该值索引的网络层的特征图
			#在我们的示例中,它是?4,所以层级将输出路由层之前第四个层的特征图
			 #当图层有两个值时,它会返回由其值所索引的图层的连接特征图
			 #在我们的例子中,它是?1,61,并且该图层将输出来自上一层(-1)和第61层的特征图,并沿深度的维度连接

[convolutional]	#一层卷积层的配置说明
batch_normalize=1	#是否进行BN处理,1为是,0为不是 
filters=256	#卷积核个数,也是输出通道数
size=1	 #卷积核尺寸
stride=1	#卷积步长
pad=1	#卷积时是否进行0 padding,padding的个数与卷积核尺寸有关,为size/2向下取整,如3/2=1
activation=leaky	#网络层激活函数
					#size=3 卷积核尺寸3*3配合padding且步长为1时,不改变feature map的大小
					#size=3 卷积核尺寸为3*3,配合padding且步长为2时,feature map变为原来的一半大小
[upsample]
stride=2

[route]
layers = -1, 61



[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=512
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=512
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=512
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear


[yolo]	# YOLO层配置说明
mask = 3,4,5
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=80
num=9	#每个grid cell预测几个box,和anchors的数量一致
		#当想要使用更多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝试调大object_scale
jitter=.3	#利用数据抖动产生更多数据,YOLOv2中使用的是crop,filp,以及net层的angle,flip是随机的, jitter就是crop的参数,tiny-yolo-voc.cfg中jitter=.3,就是在0~0.3中进行crop决定是否需要计算IOU误差的参数,大于thresh,IOU误差不会夹在cost function中
ignore_thresh = .7
truth_thresh = 1
random=1	#多尺度。如果为1,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致

[route]
layers = -4

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[upsample]
stride=2

[route]
layers = -1, 36



[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=256
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=256
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=256
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear


[yolo]
mask = 0,1,2
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=80
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1

2. 参考文献

  1. 深度学习:学习率learning rate 的设定规律
  2. yolov3中yolov3-voc.cfg文件中参数理解
  3. yolo—参数解释之cfg文件参数
如果文章对你有帮助,请记得点赞与关注,谢谢!

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 19:55:33  更:2021-07-04 19:56:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/31 1:08:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码