返回列表

[31st Place] Object Detection approach

432. Shopee - Price Match Guarantee | shopee-product-matching

开始: 2021-03-09 结束: 2021-05-10 商品理解 数据算法赛
[第31名] 目标检测方法

[第31名] 目标检测方法

作者: Guillermo García Cobo | 比赛排名: 第31名 | 发布时间: 2021-05-11

大家好!

首先,我想祝贺大家在这次比赛中展现出的惊人才能。此外,我要感谢我的队友(MiguelPabloCarlos)在这一路走来教会我的所有东西,这让我在第一次参加 Kaggle 比赛中就获得了银牌!最后,我想特别祝贺我的队友 Alejandro Lanaspa,在获得这枚银牌后,他成功晋升为 Kaggle Master!说了这么多,让我们深入探讨本帖的主要目的:

我创建这个主题是为了分享我的团队在这次比赛中使用的方法之一,也是我负责实现的部分:目标检测(Object Detection)。顾名思义,该方法基于检测每张产品图片中的对象,旨在为不同元素之间提供另一个比较项。

从技术角度来看,我们使用了 YOLOv5m 作为模型。该模型的实现库可以在这里找到;我们努力使用离线的预训练模型,以便在提交期间可用(参见我为此目的创建的数据集)。关于该模型提供的信息,其输出不仅仅是对象列表。实际上,它会产生以下数据:

  1. 检测到的对象名称。
  2. 每次检测的置信度。
  3. 检测到每个对象的边界框坐标。

为 Shopee 训练集生成此数据的示例代码可以在这个笔记本(列表格式)和这个笔记本(独热格式)中找到。我还将这些笔记本的输出上传到了这个数据集,以便大家可以直接使用,无需执行任何操作。

现在,让我们分析从这些项目中获得了哪些进一步的细节:

  1. 这是显而易见的输出,但多亏了它,我们可以筛选出与比赛相关的对象。默认情况下,模型尝试检测 80 种不同类型的对象,这些对象列在这里。在这个列表中,你可以发现彼此截然不同的对象,从“棒球棒”到“大象”,这些显然与本次应检测的内容无关。在观察结果并计算了不同的统计数据(具有对象的元素数量、不同组的数量、具有对象的组的完整性百分比……完整的分析请参阅这个笔记本)后,我们确定其中最相关的两个是“人”(在展示服装的人物图片中)和“瓶子”(在化妆品和食品项目中)。

  2. 虽然一开始我们考虑只包含模型非常确定的对象,但我们发现它遗漏了一些以较低置信度检测到的重要对象。此外,为了在下一点末尾描述的算法中拥有尽可能多的选择,我们倾向于设置较低的置信度水平,这显然会输出更多检测到的对象。

  3. 从坐标中获得了以下信息:

    • 通过这些坐标,我们实际上拥有了一个矩形的四个顶点。多亏了这一点,可以通过计算该矩形的面积来估计检测对象的大小。之后,较大的对象可以被赋予更高的优先级。
    • 在为图像中的不同对象分配重要性时要考虑的另一个因素是它们是否居中。事实上,被宣传的产品(我们更感兴趣的那些)通常位于图像的中间。基于此,计算一个对象距离图片中心有多远会很有趣。这可以用现有的信息完成吗?当然可以!用更直观的方式来说,我们要寻找的值是下图中红线的长度:
      距离示意图
    • 一旦我们了解了对象有多大以及有多居中,除了利用这些信息来优先考虑某些对象外;它还可以用于去除背景噪声,只关注被宣传的产品。基于这个想法,我们采取的一种方法是从图像中裁剪出最重要的检测对象。为了选择这个重要对象,我们获取了最大和最居中的对象,一个简单的算法会考虑最大对象的居中程度和最居中对象的大小来选择
同比赛其他方案