我想使用yolo体系结构来检测对象。在使用自定义数据对网络进行培训之前,我遵循以下步骤在Pascal数据上对其进行培训:https://pjreddie.com/darknet/yolo/
说明很清楚。但在最后一步之后
./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23
立即停止训练,并宣布权重已写入backups/目录。
起初,我认为训练前的训练太好了,很快就能达到停止训练的标准。因此,我使用了./darknet detect命令,在其中一个测试图像上使用了这些权重,data/dog。什么都没找到。
如果我不使用任何预先训练过的重量,网络就会训练。我编辑了cfg/yolo-vo.cfg以便使用
# Testing
#batch=1
#subdivisions=1
# Training
batch=32
subdivisions=8现在的训练过程已经运行了许多小时,并使我的gpu温暖。
这是训练暗网的目的吗?我如何正确地使用预先训练过的重量,而不只是训练中断?
是否有任何设置来创建检查点,或了解进展情况?
发布于 2017-08-03 03:01:29
这是一个老问题,所以我希望你现在有答案,但这是我的,以防万一有帮助。
在使用了大约一个月的黑网之后,我遇到了人们在论坛上询问/发布的大多数障碍。在你的例子中,我很肯定这是因为权值已经被训练成最大的批次数,当预先训练的重量被读到暗网时,假设训练已经完成了。
相关的个人经历:当我使用一个预先训练过的权值文件时,它从迭代40101开始,一直运行到40200,然后被切断。
如果您有自定义数据,我会坚持从头开始训练,但是如果您想再次尝试预先训练的权重,您可能会发现更改cfg文件中的最大批次会有所帮助。
发布于 2018-08-28 02:01:26
在培训命令的末尾添加-clear 1将清除此模型在以前的培训中看到的图像的统计信息。然后,您可以微调您的模型上的新数据(集)。
您可以在void train_detector(char *datacfg, char *cfgfile, char *weightfile, int *gpus, int ngpus, int clear)的https://github.com/pjreddie/darknet/blob/b13f67bfdd87434e141af532cdb5dc1b8369aa3b/examples/detector.c上找到关于函数签名的用法的更多信息。
我怀疑增加最大迭代次数是个好主意,因为学习速率通常与当前的迭代#相关。我们通常增加迭代的最大值,当我们想要恢复以前的训练任务时,因为达到了迭代的最大值而结束,但是我们相信,如果迭代次数更多,就会得到更好的结果。
FYI,当您有一个小的数据集时,从零开始或从分类网络中进行关于它的培训可能不是一个好主意。您可能仍然希望重用检测网络中的权重,这些权重是在大数据集(如Coco或ImageNet )上进行培训的。
发布于 2020-03-10 21:57:54
此外,如果使用AlexeyAB/darknet,它们可能会遇到-clear选项的问题,在检测仪中:
if (clear) *nets[k].seen = 0 真正应该是:
if (clear) {*nets[k].seen = 0;*nets[k].cur_iteration = 0;}否则,训练循环将立即退出。
https://stackoverflow.com/questions/43597602
复制相似问题