Opencv createsamples 实用程序:紧密边界框会用未裁剪的图像代替正样本吗?

Posted

技术标签:

【中文标题】Opencv createsamples 实用程序:紧密边界框会用未裁剪的图像代替正样本吗?【英文标题】:Opencv createsamples utility: do tight bounding boxes substitute uncropped images for positive samples? 【发布时间】:2014-02-02 12:36:39 【问题描述】:

我有近 1000 张图像要用作 opencv 的正样本,以在 cascadedtrainer 中使用。

我已经阅读了这个出色的教程:http://note.sonots.com/SciSoftware/haartraining.html,以及这个:http://www.computer-vision-software.com/blog/2009/11/faq-opencv-haartraining/,但我无法决定如何处理 createsamples 实用程序的 -w 和 -h 参数以及裁剪我的图片。

我有很多背景内容的大图像 [1300x600],因此实际上需要由级联分类器检测的对象通常占图像的 10% 左右。

是否需要裁剪图像然后使用 OpenCV 的 createsamples 实用程序? 或者我可以省略裁剪部分,因为无论如何,正样本的描述文件包括 x 和 y 坐标以及围绕感兴趣对象的边界框的高度和宽度。我很困惑,因为我在某处读到“背景过多”会破坏表演。当一个人已经为图像中的对象指定了紧密的边界框时,是否存在“背景过多”之类的情况?

我的主要问题是时间,如果它最终不会损害分类器的性能,我希望避免手动裁剪 1000 张图像。


编辑

我实际上做了一些裁剪,下面是我的样本外观的平均分布:

【问题讨论】:

【参考方案1】:

您无需调整样本大小或裁剪样本,但需要使用注释工具创建以下格式的阳性样本列表:

path_to\sample1.png 1 10 10 20 22
path_to\sample2.png 2 10 10 20 22 40 40 30 33
...

这可以解决您担心的所有问题。根据您的示例,创建此文本文件可能会很耗时。

正样本边界框内的背景过多可能会影响模型中弱分类器的有效性,但它在最终级联分类器模型中可能重要也可能不重要。您应该关心的是创建良好的正样本,其中尽可能精确地在边界框内捕获对象。意思是:

    让每个样本与其对应的边界框右上角的相对位置相同,并且 对所有样本具有相同的对象宽度/边界框宽度比率。

换句话说,尝试将边界框中的所有对象居中,并为所有对象添加相同的填充“百分比”,这样当它们被 createsamples 裁剪和调整大小到 vec 文件时,所有对象的位置看起来都相似和大小。

【讨论】:

谢谢!不过,我对一些图像进行了一些裁剪,看看它的效率如何……我编辑了我的问题以添加这些图像。你能看看吗?我只是想知道这些图像是否符合“精确边界框”的两个条件?如果不是,并且如果使用注释工具手动绘制边界框实际上是一个更好的选择,那么我想知道 - 我们不可能正确处理像素,对吧?所以我猜,如果在手动注释中,边界框的大小略有不同,只要它们大致相同就可以了? 使用级联分类器,您的目标应该是匹配所有样本的特定特征,以便它们或多或少地出现在与边界框相同的相对位置。例如,汽车的轮胎必须位于所有样本中的某些位置。这样,训练程序可以更轻松地找到这些共同特征。 边界框的宽高比需要有多精确?如果我们偏离几个像素,分类器是否非常敏感? 这真的是一场妥协游戏:如果你的训练集中一切都很完美,那么你的弱分类器非常强大,但实际上模型无法检测到稍微偏离模型的对象。如果它们未对齐,则您的弱分类器可能不是最佳的,因此在实践中您可能会再次错过一些明显的情况。您需要总体上查看您的数据,并查看您可以对它们做出哪些假设。您所有的汽车都与本文中的样本处于相同的视角吗?然后,您可能会从精确裁剪中受益。如果您看到变化,请稍微放松一下模型。 因此,如果您的训练侧视车,您可能会分别向左或向右,但不是两者兼而有之?

以上是关于Opencv createsamples 实用程序:紧密边界框会用未裁剪的图像代替正样本吗?的主要内容,如果未能解决你的问题,请参考以下文章

opencv_annotation.exeopencv_createsamples.exeopencv_traincascade.exe

Haar-级联对象检测 OpenCV - .xml 文件分类器未正确检测

使用 LBP 训练 Haar 级联的问题

OpenCV 和 C++:Traincascade 错误:一个实际问题

级联分类器训练-----OpenCV

opencv - haar人脸特征的训练