【问题标题】:haar cascade positive example image sizinghaar 级联正例图像大小
【发布时间】:2017-03-21 10:30:17
【问题描述】:

我在为自定义对象识别制作 haar 级联方面迈出了第一步。我花了一些时间获取大量数据并编写了一些预处理脚本来将视频转换为帧。我的下一步是裁剪感兴趣的对象,以创建一些积极的训练示例。我有几个问题我真的在网上四处寻找答案 - 我有点困惑:-

我读到我的目标应该是保持纵横比相同 - 这是否意味着与原始帧相同或对于我想用于正训练示例的所有图像(即来自完全不同视频的帧)

Size - 纵横比和大小显然不一样。所以我需要再次确保我的阳性样本的高度和宽度都相同(我很确定它们应该是,但认为值得仔细检查)。

同样在尺寸方面 - 我遇到过一些博客推荐例如 24 x 24 H x W - 如果我想要检测的对象不是正方形怎么办(在我的情况下,它是一个高度大约是其两倍的矩形)例如塑料瓶的宽度)。我是保持大小不变​​还是应该将其转换为 24 x 24?

负样本 - 这些都应该是相同的纵横比和/或大小吗?

我知道这可能是一个非常低级/愚蠢的问题,但是目前还不清楚这里的最佳做法是什么!

我在这里遇到了其他几个答案,但我觉得他们提供的答案并不令人满意,并且该领域在过去几年中取得了长足的进步

谢谢

【问题讨论】:

    标签: algorithm opencv machine-learning computer-vision haar-classifier


    【解决方案1】:

    正样本在训练所需的 .vec 文件中生成。 createsamples 二进制文件将创建这样一个 .vec 文件,并自动将您定义的对象区域(在 .txt 文件中定义)缩放为目标格式。您所有的正样本对象区域都应该具有大致相同的纵横比(因为自动缩放会破坏它们)。

    目标尺寸应该是你想要检测一个物体的最小尺寸(但如果太小就没有相关的特征了),它的纵横比应该是你的物体区域的纵横比。

    例如:您有很多带有杯子的图片。图像分辨率各不相同,但每个杯子的纵横比(仅图像内的杯子区域,而不是所有背景)是 1:2(宽度:高度)。因此,您要么裁剪所有图像以仅保留杯子和最小背景,然后将整个裁剪图像写入 txt 文件,然后将裁剪图像的全尺寸 roi 发布到那里,或者您选择杯子的 ROI,添加完整尺寸图像到 txt 文件并在那里发布该 roi 区域。您可以选择一个目标尺寸,例如 20x40 或 10x20 或您认为可以训练的任何 1:2 纵横比。

    负样本应保持原样,训练将自动选择和搜索这些样本的子图像。只需确保其中没有杯子(根据示例)。

    通过在正样本中的对象上绘制黑框并将生成的图像也用作负样本来获得更多负样本,我取得了一些不错的结果,但这可能取决于您的特殊任务。

    作为一个更具体的例子,我从维基媒体获取了两张杯子图片。 1. 2.

    第一张图片有 1 个杯子,第二张图片有 2 个杯子。我选择在训练期间不使用手柄并选择 0.85 (1:1.176 w:h) 的纵横比 现在您可以选择将 ROI 写入 .txt 文件,例如

    image1.jpg 1 653 154 1295 1523
    image2.jpg 2 1068 406 1551 1824 3036 1159 852 1004
    

    或者您可以先将图像裁剪为以下内容:

    然后像这样创建一个txt文件:

    cropped_image1_cup1.jpg 1 0 0 1295 1523
    cropped_image2_cup1.jpg 1 0 0 1551 1824
    cropped_image2_cup2.jpg 1 0 0 852 1004
    

    两者都应该创建相同的 .vec 文件(如果裁剪没有创建任何工件,例如额外的 jpeg 压缩 - 最好使用 png ;))。

    然后,您可以选择目标尺寸为 20x24,例如(纵横比 1:1.2)。编写一个脚本或工具来修复标记的输入图像中的纵横比是很好的,因此不使用完美纵横比标记对象会更容易和更直观,而是按原样标记它们并通过调整 ROI 进行后处理以适应纵横比(如有必要,在左/右或顶部/底部添加一些额外的背景)。或者忽略纵横比差异,如果你可以接受一些变形。

    【讨论】:

    • 您好,谢谢 - 这是一个非常有用的回复。我将返回并实施建议的更改!我在第一个实例中继续运行它,但它最终在 20 的第 15 阶段挂起。我只是想找出如何从它实现的阶段编译 xml!
    • 获得更多正面(和负面)实际上根本不是问题 - 我设法获得了大量数据,但我知道第一次运行循环会使我的笔记本电脑停机一段时间有点,所以我只是想获得一些概念证明。我认为下一个理性的做法是添加更多的正面和负面,然后在云端做事。
    • 还可以回复:图像尺寸我读到 haars 不能缩小所以我的想法是选择更小尺寸的图像并让算法放大如果我将东西移动到云端,我也可以尝试 CNN也看看效果如何
    • 是的,负数应该变化很大(除非你的目标任务背景是不变的),如果可能的话,更多的正数。在我非常专业的任务中,我总共使用了 15000 张正片和 60000 张负片图像,每个阶段使用了 13000 张正片和 26000 张负片
    • 好的,所以在用例中,我认为我的目标背景不会保持不变,但会非常相似——也就是说,在这种情况下,它只是证明了这个概念并继续前进。我认为第一次去我对结果很满意,是的,我认为我肯定需要通过云计算:) 感谢您的反馈,这很有趣。如果你有博客,请告诉我!
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2017-08-31
    • 1970-01-01
    • 2014-06-28
    • 2015-12-21
    相关资源
    最近更新 更多