训练暗网立即完成

时间:2017-04-24 20:58:03

标签: machine-learning neural-network computer-vision darknet

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

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

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

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

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:6)

在训练命令的末尾添加-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

我怀疑增加最大迭代次数是一个好主意,因为学习率通常与当前的迭代次数相关。当我们要恢复由于达到最大迭代次数而结束的先前训练任务时,通常会增加最大迭代次数,但是我们相信,如果迭代次数越多,结果就会越好。

仅供参考,当您拥有小的数据集时,从头开始或通过分类网络对其进行培训可能不是一个好主意。您可能仍想重用来自在大型数据集(如Coco或ImageNet)上训练的检测网络的权重。

答案 1 :(得分:4)

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

在使用暗网大约一个月之后,我遇到了人们在论坛上提出/发布的大多数障碍。在你的情况下,我非常肯定,因为权重已经针对最大批次数进行了训练,并且当在暗网中读取预训练的权重时,假定的训练已经完成。

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

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

答案 2 :(得分:2)

如果使用AlexeyAB / darknet,则-clear选项可能会出现问题, 在detector.c中:

if (clear) *nets[k].seen = 0 

真的应该是:

if (clear) {*nets[k].seen = 0;*nets[k].cur_iteration = 0;}

否则,训练循环将立即退出。

答案 3 :(得分:0)

将您的Darknet / Makefile中的OpenCV编号修改为0

OpenCV = 0