首页 > 解决方案 > 使用 R 在图像存储库中搜索图像

问题描述

我有一个包含 100k+ 图像的存储库(来自非直接来源 - 主要是网络)。请注意,图像仅是服装项目(模特穿着它们或直接服装项目)。

我的目标是单击任何服装项目的图像并在我提到的存储库中搜索相同的图像。如果没有完全匹配,我至少想要最接近的匹配图像。请帮助我了解如何以最准确的方式获得相同的结果(速度/时间不是问题,准确性是最重要的参数)。

- - - - - - -X - - - - - -

到目前为止我已经尝试过:

  1. 我首先在 MicrosoftML 库中使用了 featureize 函数。这会在我的点击和图像存储库上运行一个预训练模型 (RESNET101)
  2. 上面的函数为我提供了两个图像的 2050 个特征。
  3. 我发现了单击和图像存储库之间的欧几里德距离。
  4. 我展示了最接近欧几里得距离的前 10 个图像作为输出。
  5. 请注意,在应用欧几里得距离之前,我已经对数据集应用了以下手动过滤器 - 过滤了源图像和点击图像的品牌和服装类型(衬衫/裤子/毛衣等)

然而,问题在于准确率低得可怜(20%)。此外,还有一些问题 - 即使我从侧面单击图像,它也不会与存储库图像匹配,或者如果图像中有折痕,算法会将其作为模式。

为了让你们更好地了解代码,PFB 特征化:

vec2dat <- rxFeaturize(
  data = fnddat,
  mlTransforms = list(
    loadImage(vars = list(Features = "Image")),
    resizeImage(vars = "Features", width = 224, height = 224),
    extractPixels(vars = "Features"),
    featurizeImage(var = "Features", dnnModel = "resnet101")   
  ))

PFB欧式距离码:

distance <- pdist(vec2dat[,-1],vecdat[,-1])

任何帮助/想法将不胜感激。

- - - - - - - - - - - - -编辑 - - - - - - - - - - - - -

我认为上面的问题似乎更广泛一些。让我把它分解成几个部分:

  1. 除了欧几里得距离之外,我还能尝试增加其他距离吗?
  2. 在 RESNET101 的 2049 个功能中,是否有任何因素我应该给予更多/更少的权重,或者是否有任何我应该忽略的功能?
  3. 有没有其他我可以使用的预训练模型(到目前为止我已经尝试过 Alexnet 和 RESNET101)

请注意,我不想在 R 中设置 CNN,没有为我训练新模型的范围。我想依赖我们可用的预训练模型。

标签: rmachine-learningcomputer-visionconv-neural-network

解决方案


推荐阅读