训练暗网立即完成
Posted
技术标签:
【中文标题】训练暗网立即完成【英文标题】:Training darknet finishes immediately 【发布时间】:2017-09-21 16:42:58 【问题描述】:我想使用 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 保持温暖。
这是训练暗网的预期方式吗? 如何正确使用预训练的权重,而无需中断训练?
是否有任何设置可以创建检查点或了解进度?
【问题讨论】:
我已经通过反复试验将最大批次调整为:1333889 在这个值下它不会立即完成,尽管它似乎永远挂起,没有完成。这可能是什么? 【参考方案1】:在您的训练命令末尾添加-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 等大型数据集上训练的检测网络的权重。
【讨论】:
希望对您有所帮助:-)【参考方案2】:这是一个老问题,所以我希望你现在能得到答案,但这是我的问题,以防万一。
在使用暗网大约一个月后,我遇到了人们在论坛上询问/发布的大部分障碍。在您的情况下,我很确定这是因为已经针对最大批次数训练了权重,并且当在暗网中读取预训练的权重时假设训练已经完成。
相关个人经验:当我使用其中一个预训练的权重文件时,它从迭代 40101 开始,一直运行到 40200 才中断。
如果您有自定义数据,我会坚持从头开始训练,但如果您想再次尝试预训练的权重,您可能会发现更改 cfg 文件中的最大批次数会有所帮助。
【讨论】:
如果你从头开始训练,如何重新训练/添加另一个类?我遇到了再培训的问题。 我也有海报原始问题,虽然增加 max_batches 没有帮助。有什么你能想到的吗?谢谢,这让我疯狂了好几天!【参考方案3】:另外,如果使用 AlexeyAB/darknet,他们可能会遇到 -clear 选项的问题, 在检测器.c 中:
if (clear) *nets[k].seen = 0
应该是:
if (clear) *nets[k].seen = 0;*nets[k].cur_iteration = 0;
否则训练循环将立即退出。
【讨论】:
【参考方案4】:将暗网/Makefile 中的 OpenCV 编号修改为 0
OpenCV=0
【讨论】:
以上是关于训练暗网立即完成的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Keras .h5 模型转换为暗网 yolo.weights 格式?
Yolov4.conv.137 在 Yolov4 暗网中是啥意思?
使用 io 完成端口时,WriteFile 是不是会在完成时立即发布完成数据包
当我使用 CUDA=1 `make` 暗网时,`/usr/bin/ld: cannot find -lcuda`发生。如何在没有root权限的情况下修复它