我正在按照维基上指定的步骤训练SSD模型到train SSD on custom dataset。我有大约60k图像与背景,也是一个标签,以消除误报。 (请注意,我没有任何只包含背景标签的图像。)创建lmdb文件进行培训和测试,没有任何问题。当我开始培训时,我收到以下错误:
bbox_util.cpp:1066] Check failed: background_label_id != label (0 vs. 0) Found background label in the dataset.
*** Check failure stack trace: ***
@ 0x7f00cfcef5cd google::LogMessage::Fail()
@ 0x7f00cfcf1433 google::LogMessage::SendToLog()
@ 0x7f00cfcef15b google::LogMessage::Flush()
@ 0x7f00cfcf1e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7f00d057ed71 caffe::GetGroundTruth<>()
@ 0x7f00d03f5f7e caffe::MultiBoxLossLayer<>::Forward_cpu()
@ 0x7f00d0541537 caffe::Net<>::ForwardFromTo()
@ 0x7f00d05418a7 caffe::Net<>::Forward()
@ 0x7f00d05db510 caffe::Solver<>::Step()
@ 0x7f00d05dbf9e caffe::Solver<>::Solve()
@ 0x40bcf4 train()
@ 0x4077c8 main
@ 0x7f00ce486830 __libc_start_main
@ 0x408099 _start
@ (nil)
我搜索了same issue on git repo但没有提供的解决方案。
这是我用于训练的脚本:train_ssd.py产生错误的文件:bbox_util.cpp
链接到源文件:src/caffe
如何在没有任何问题的情况下启动数据集中带标签背景的培训(以消除误报)?
首先,在当前的Caffe-SSD实现中,类ID等于0是不可能的,因为它是为后台保留的。从技术上讲,你可以使用另一个类id,但它会不一样。
我经常使用SSD,从未听说过背景的明确标注。此外,我认为这没有任何意义,因为背景的概念与显着对象根本不同(例如,在非最大抑制时)。
消除误报是培训目标的一部分(减少误报,增加真阳性率,减少假阴性等)。因此,让您的模型在目标数据集上进行适当的训练可以帮助您解决这个问题。
如果你的动机是从没有类的注释对象的图像中采样背景样本:你可能会引入一个辅助类来实现这一点,然后放弃它/忽略它的检测。但是,通常SSD没有负样本量的问题。实际上,存在一个限制负样本比率的超级参数,以便不抑制正对象样本。默认值为3:1(neg / pos),但您可以将其放大以查看这是否有助于您完成任务。