yolo-voc.2.0.cfg 参数解析

本文详细解析了YOLOv2的配置文件参数,包括网络结构、训练策略及数据增强方法等,并介绍了训练log中各项指标的意义,如RegionAvgIOU、Class、Obj、NoObj等,帮助读者理解YOLOv2的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、参数解析

[net]
batch=64         # number of images pushed with a forward pass through the network
subdivisions=8   # 源码中的图片数量int imgs = net.batch * net.subdivisions * ngpus,按subdivisions大小分批进行训练 
height=416       # height of input image
width=416        # width of input image
channels=3       # channel of input image
momentum=0.9     # CNN-梯度下降法中一种常用的加速技术
decay=0.0005     # CNN-防止过拟合

# 对于每次迭代训练,YOLOv2会基于角度(angle),饱和度(saturation),曝光(exposure),色调(hue)产生新的训练图片 
angle=0          # 图片角度变化,单位为度,假如angle=5,就是生成新图片的时候随机旋转-5~5度
saturation = 1.5 # 饱和度变化大小,1到1.5倍
exposure = 1.5   # 曝光变化大小,1到1.5倍
hue=.1           # 色调变化范围,-0.1到0.1 

learning_rate=0.0001  # 学习率 
max_batches = 45000   # 最大迭代次数 
policy=steps          # 调整学习率的policy:CONSTANT, STEP, EXP, POLY,STEPS, SIG, RANDOM
steps=100,25000,35000 # 根据batch_num调整学习率,若steps=100,25000,35000,则在迭代100次,25000次,35000次时学习率发生变化,该参数与policy中的steps对应
scales=10,.1,.1       # 相对于当前学习率的变化比率,累计相乘,与steps中的参数个数保持一致

[convolutional]
batch_normalize=1     # 是否做BN-batch_normalize
filters=32
size=3
stride=1
pad=1
activation=leaky
# 激活函数-activation 包括logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair.

[maxpool]
size=2
stride=2

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

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
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

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
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

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
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

[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

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
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

[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


#######

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

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

# the route layer is to bring finer grained features in from earlier in the network 
[route]
layers=-9

# the reorg layer is to make these features match the feature map size at the later layer;
# The end feature map is 13x13, the feature map from earlier is 26x26x512. 
# The reorg layer maps the 26x26x512 feature map onto a 13x13x2048 feature map so that it can be concate_nated with the feature maps at 13x13 resolution.
[reorg]
stride=2

[route]
layers=-1,-3

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

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

[region]
# anchors: 预测框的初始宽高,第一个是w,第二个是h,总数量是num*2.
# YOLOv2作者说anchors是使用K-MEANS获得,其实就是计算出哪种类型的框比较多,可以增加收敛速度,如果不设置anchors,默认是0.5.
anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
bias_match=1 # 如果为1,计算best iou时,预测宽高强制与anchors一致
classes=20   # 类别数量 
coords=4     # BoundingBox的tx,ty,tw,th,tx与ty是相对于左上角的grid,同时是当前grid的比例,tw与th是宽度与高度取对数
num=5        # 每个grid预测的BoundingBox个数
softmax=1    # 如果为1,使用softmax 
jitter=.2    # 利用数据抖动产生更多数据抑制过拟合.YOLOv2中使用的是crop,filp,以及net层的angle,flip是随机的,crop就是jitter的参数,tiny-yolo-voc.cfg中jitter=.2,就是在0~0.2中进行crop. 
rescore=1    # 决定使用哪种方式计算IOU的误差,为1时,使用当前best iou计算,为0时,使用1计算 

# *_scale是YOLOv1论文中cost function的权重,哪一个更大,每一次更新权重的时候,对应方面的权重更新相对比重更大
object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1

absolute=1
thresh = .6 # 决定是否需要计算IOU误差的参数,大于thresh,IOU误差不会夹在cost function中 
random=0    # 如果为1每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致

二、训练log中各参数的意义

Region Avg IOU:平均的IOU,代表预测的bounding box和ground truth的交集与并集之比,期望该值趋近于1。 
Class:是标注物体的概率,期望该值趋近于1. 
Obj:期望该值趋近于1. 
No Obj:期望该值越来越小但不为零. 
Avg Recall:期望该值趋近1 
avg:平均损失,期望该值趋近于0

mAP定义及相关概念

  • mAP: mean Average Precision, 即各类别AP的平均值
  • AP: PR曲线下面积,后文会详细讲解
  • PR曲线: Precision-Recall曲线
  • Precision: TP / (TP + FP)
  • Recall: TP / (TP + FN)
  • TP: IoU>0.5的检测框数量(同一Ground Truth只计算一次)
  • FP: IoU<=0.5的检测框,或者是检测到同一个GT的多余检测框的数量
  • FN: 没有检测到的GT的数量

三、参考

<think>嗯,我现在要解决在Windows 10下用YOLOv2训练自己的数据时遇到的问题。当我在cmd里输入指令darknet.exe detector train cfg/voc.data cfg/yolo-voc.cfg cfg/darknet19_448.conv.23后,程序显示608x608,创建了6个永久CPU线程,然后就结束进程,没有开始训练。这到底是怎么回事呢? 首先,我需要回忆一下YOLO训练的基本流程。通常,运行训练命令后,应该会加载模型、读取数据,然后开始迭代训练,显示损失值之类的信息。但这里直接结束了,可能是配置问题或者环境问题。 用户提到的输出是608x608,这可能和配置文件有关。YOLOv2默认的图像尺寸是416x416,但有时候会根据不同版本或者配置有所变化。不过用户用的是yolo-voc.cfg,可能这个配置文件里设置的图像尺寸是608x608?需要检查cfg文件里的width和height参数是否正确,是否和预训练模型darknet19_448.conv.23的输入尺寸匹配。比如,如果预训练模型是基于448x448的,但配置文件里设置的是608,这可能导致维度不匹配,程序崩溃。 然后,Create 6 permanent cpu-threads这个提示,可能是指程序试图创建线程但失败了?或者可能是OpenMP或者其他多线程库的问题。但为什么会结束进程呢?也许在Windows环境下,线程创建有问题,或者内存不足导致无法继续。 接下来,我应该考虑可能的解决步骤: 1. 检查配置文件是否正确: - 打开yolo-voc.cfg,确认里面的batch、subdivisions参数是否合理。特别是subdivisions如果设置过大,可能会导致内存不足。 - 检查width和height的值是否符合预训练模型的输入尺寸。比如darknet19_448.conv.23可能期望输入是448x448,而如果cfg里设置的是608,这可能会导致问题。需要调整cfg中的尺寸,或者使用对应的预训练模型。 2. 数据路径是否正确: - 检查voc.data里的路径是否正确指向了训练数据、验证数据、类别名称文件等。特别是路径中的斜杠是否使用正确,Windows下可能需要反斜杠,或者使用双引号包裹路径。如果路径错误,程序可能在加载数据前就崩溃。 3. 内存问题: - 训练YOLO需要较大的显存,如果使用的是CPU模式,可能内存不足。但用户的问题里显示的是创建CPU线程,可能是在CPU上运行?如果是的话,可能需要更大的内存。或者,检查是否编译时启用了GPU支持,如果没有GPU而程序试图用GPU,可能会出错。 4. 编译问题: - 确保darknet.exe是正确编译的,特别是如果使用了GPU或cuDNN,需要正确配置。如果编译时没有启用GPU,而配置文件中设置了GPU=1,这可能导致问题。或者,如果在CPU模式下,检查是否设置了正确的选项。 5. 日志和错误输出: - 是否有更多的错误信息?有时候程序可能在输出后立即关闭,导致看不到错误。可以尝试将命令输出重定向到文件,比如在cmd中使用 > log.txt 2>&1,然后查看log.txt中的内容。 6. 预训练模型是否正确: - 检查darknet19_448.conv.23是否下载正确,文件是否完整。损坏的预训练模型可能导致加载失败。 可能的步骤复现: 用户运行命令后,程序首先解析配置文件,设置输入尺寸为608x608,然后尝试加载预训练模型。但预训练模型的输入层可能与cfg中的尺寸不兼容,导致加载失败,从而终止进程。或者,在初始化过程中,由于内存不足或线程创建失败,导致程序退出。 解决方案尝试: - 修改cfg文件中的width和height为预训练模型对应的尺寸,比如448x448,或者寻找对应608尺寸的预训练模型。 - 检查voc.data中的路径是否正确,特别是train和valid指向的txt文件是否存在,并且里面的图片路径正确。 - 减少batch size或增加subdivisions,以降低内存消耗。 - 确认darknet编译时是否支持GPU,如果使用CPU可能需要设置GPU=0- 检查是否有其他错误提示,比如缺少dll文件,或者CUDA版本不匹配等。 如果用户是在CPU上运行,可能需要在命令后加上 -i 0 参数,强制使用CPU。或者,在配置文件中设置GPU=0。另外,某些版本的Darknet在Windows下可能存在多线程的问题,可以尝试设置OpenMP的线程数,比如在命令前加上set OMP_NUM_THREADS=1,看是否有效。 总结可能的原因: 1. 输入尺寸不匹配导致模型加载失败。 2. 数据路径错误,导致程序无法读取数据而退出。 3. 内存不足,无法分配资源。 4. 编译或环境配置问题,如缺少依赖库或GPU支持不正确。</think>在Windows 10下使用YOLOv2训练时遇到进程直接结束的问题,可能由以下原因导致。请逐步排查: --- ### **1. 输入尺寸与预训练模型不匹配** - **现象**:输出显示`608 x 608`,但预训练模型`darknet19_448.conv.23`是为`448x448`输入设计的。 - **解决方法**: 1. 打开`cfg/yolo-voc.cfg`,检查`width`和`height`参数。 2. 将`width`和`height`从`608`改为`448`,或更换与`608x608`兼容的预训练模型(如`darknet19_608.weights`)。 --- ### **2. 配置文件参数错误** - **检查点**: - **batch/subdivisions**:若显存不足,需减小`batch`或增大`subdivisions`。例如: ```ini batch=64 subdivisions=16 ``` - **GPU设置**:若未启用GPU,需在`.cfg`中设置`GPU=0`或在命令后添加`-i 0`强制使用CPU。 --- ### **3. 数据路径问题** - **验证步骤**: 1. 检查`cfg/voc.data`中以下路径: ```ini train = path/to/train.txt valid = path/to/val.txt names = path/to/classes.names backup = path/to/backup ``` 2. 确保路径使用**双反斜杠**(如`D:\\data\\train.txt`)或**正斜杠**(如`D:/data/train.txt`)。 3. 检查`train.txt`和`val.txt`中的图片路径是否存在。 --- ### **4. 内存或显存不足** - **现象**:内存不足可能导致进程直接崩溃。 - **解决方法**: - 减小`batch`或增大`subdivisions`。 - 关闭其他占用内存的应用程序。 - 使用任务管理器监控内存使用情况。 --- ### **5. 编译或环境问题** - **检查点**: - 确保`darknet.exe`支持GPU(若使用GPU)。 - 若使用CPU,尝试添加`-i 0`参数: ```bash darknet.exe detector train cfg/voc.data cfg/yolo-voc.cfg cfg/darknet19_448.conv.23 -i 0 ``` - 尝试设置OpenMP线程数: ```bash set OMP_NUM_THREADS=1 darknet.exe detector train ... ``` --- ### **6. 日志与调试** - **重定向输出**:将错误信息保存到日志文件: ```bash darknet.exe detector train ... > log.txt 2>&1 ``` 打开`log.txt`查看具体报错(如缺失文件、CUDA错误等)。 --- ### **完整解决流程** 1. **调整输入尺寸**:修改`.cfg`中的`width/height`与预训练模型匹配。 2. **检查数据路径**:确保所有文件路径有效。 3. **降低内存消耗**:调整`batch`和`subdivisions`。 4. **强制使用CPU**:添加`-i 0`参数。 5. **检查日志**:通过`log.txt`定位具体错误。 若仍无法解决,请提供`log.txt`内容进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Digital2Slave

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

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

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

打赏作者

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

抵扣说明:

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

余额充值