https://www.kaggle.com/c/shopee-product-matching
Shopee是东南亚和**的领先电子商务平台,本次主办多模型商品匹配竞赛。使用深度学习和传统机器学习的结合分析图像和文本信息,以比较相似度,预测哪些商品是相同的产品。
- 赛题涵盖的知识点:
- 图像/文本编码
- 度量学习损失
- 信息检索中的集成学习
- 如果单纯使用图像和文本特征排序,只能得到非常基础的分数,则需要根据赛题数据进行训练,并进行进一步处理。
-
本次竞赛我们的方案是
- CNN模型(主导)匹配商品图像,使用NFNet和Swin Transformer双模型 + ArcFace检测头对图片做检索匹配。
- 使用TF-IDF对商品标题做了做检索匹配
- 图像phash值,匹配完全相同的图像。
- 使用简单的embedding concat融合方式输出最终匹配结果。
-
上分过程
- 0.7(图像特征), 0.64(文本特征)
- 拼接图像和文本特征 -> normalize: 0.724 -> 动态阈值调整: 0.743
- normalize -> 拼接图像和文本特征: 0.753
- 所有数据训练: 0.757
- union comb, img, txt matches & tune threshold: 0.776
-
多模态 比赛会同时用到CV和NLP的模型,需要参赛者两者都比较了解,但以CV为主。
-
图像尺寸 我们在比赛过程中发现了大部分图像尺寸都在640x640,于是我们先在小尺寸上验证模型的可行性,然后再使用640的大尺寸得到最终结果。
-
arcface Arcface原来使用于人脸识别,也可以用于本次比赛图像检索,我们参赛后发现论坛上大部分选手都使用了,于是我们也使用,并发现效果较好。 可惜我们最后没有时间对Arcface调参,不然可以得到更好的效果。
-
三种匹配方式ensemble难题 因为我们有三种匹配方式(cv/nlp/phash),但cv分数对三种融合的阈值极其敏感,所以在最终ensemble阶段严重依赖于public LB。
-
2小时运行时间 本次竞赛只给了我们2小时的infere时间,所以我们不能像往常的比赛一样5fold * n_models,所以我们需要挑出每个模型在5fold中最好的一个,融合后进行提交。
-
测试数据远多于训练数据。 比赛训练数据约35,000张,私有测试数据约有70,000张。这样的分布会产生一个问题,无法建立有效的验证集,导致无法使用CV得分正确估计LB得分。因为70,000张数据中会出现更多的图片相似但不属于同一类别的情况,所以在infer阶段,LB得分对相似度匹配的阈值极其敏感,需要多次提交来确认。
-
代码 代码有train和inference。train是训练阶段的代码,inference是推理阶段的代码。 将train出来的模型,上传的kaggle,再在kaggle上使用inference代码即可得出结果。 代码提供ipynb版和py版,两者一致
-
数据集 本次比赛没有使用外部数据集,请至kaggle官网下载相关数据。 https://www.kaggle.com/c/shopee-product-matching/data
-
额外lib 请讲lib文件夹下的zip文件都解压到train.ipynb中libdir下,以便运行。
Shopee是东南亚和**的领先电子商务平台,本次主办多模型商品匹配竞赛。使用深度学习和传统机器学习的结合分析图像和文本信息,以比较相似度,预测哪些商品是相同的产品。我用CNN模型(主导)匹配商品图像,使用NFNet和Swin Transformer双模型 + ArcFace检测头对图片做检索匹配,用TF-IDF对商品标题做了做检索匹配,图像phash值,匹配完全相同的图像。使用简单的embedding concat融合方式输出最终匹配结果。