训练暗网立即完成

我想使用yolo架构进行对象检测 . 在使用我的自定义数据训练网络之前,我按照以下步骤在Pascal VOC数据上进行训练:https://pjreddie.com/darknet/yolo/

说明非常清楚 . 但是在最后一步之后

./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23

darknet立即停止训练并宣布权重已写入 backups/ 目录 .

起初我认为预训练太好了,并且会立刻达到停止标准 . 所以我在其中一个测试图像 data/dog 上使用了 ./darknet detect 命令和这些权重 . 什么都没找到 .

如果我不使用任何预训练的重量,网络确实训练 . 我编辑了cfg / yolo-voc.cfg来使用

# Testing
#batch=1
#subdivisions=1
# Training
batch=32
subdivisions=8

现在训练过程已经运行了好几个小时,并且保持我的gpu温暖 .

这是训练暗网的预定方式吗?如何才能正确使用预训练重量,而无需训练中断?

是否有任何设置来创建检查点,或了解进度?

回答(2)

2 years ago

这是一个老问题,所以我希望你现在得到你的答案,但这是我的,以防它有所帮助 .

在使用darknet大约一个月后,我遇到了人们在论坛上提出/发布的大部分障碍 . 在你的情况下,我很确定这是因为已经对最大批次数进行了训练,并且当在暗网中读取预训练的重量时,假定训练已完成 .

相关的个人经验:当我使用其中一个预训练的重量文件时,它从迭代40101开始并在切断之前运行到40200 .

如果您有自定义数据,我会坚持从头开始训练,但如果您想再次尝试预先训练的权重,您可能会发现更改cfg文件中的最大批量有帮助 .

2 years ago

在训练命令结束时添加 -clear 1 将清除此模型在之前训练中看到的图像数量 . 然后,您可以在新数据(集)上微调模型 .

您可以在https://github.com/pjreddie/darknet/blob/b13f67bfdd87434e141af532cdb5dc1b8369aa3b/examples/detector.c找到函数签名 void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear) 中有关用法的更多信息

我怀疑增加最大迭代次数是一个好主意,因为学习率通常与当前的迭代次数相关联 . 当我们想要恢复之前因为达到最大迭代次数而结束的训练任务时,我们通常会增加最大迭代次数,但我们相信通过更多迭代,它会产生更好的结果 .

仅供参考,当您拥有一个小型数据集时,从头开始或从分类网络进行培训可能不是一个好主意 . 您可能仍希望重新使用在Coco或ImageNet等大型数据集上训练的检测网络中的权重 .