【问题标题】:How to train a model with three images as a single input如何训练具有三个图像作为单个输入的模型
【发布时间】:2019-01-24 12:07:23
【问题描述】:

我想训练 Inceptionv3 模型,我试图给出单个图像的 3 个不同视图并对其进行训练。所以我想在一个提要中提供三张图片作为我的输入。

用例:

我想预测鞋类的类型。在这个问题中,通常会有很多信息以不同的视图呈现,所以只想尝试这种方法。

【问题讨论】:

  • 为什么不单独输入每张图片,平均输出呢?
  • 或将每个输入标记为相同?它会发现它属于同一类。但请注意,对于大角度,cnn 不是 旋转不变性。所以对性能会有一些影响
  • @SaiBot Ankish 这与在单个提要中使用单个图像训练所有不同图像相同。我想要的是在单个提要中制作单个图像的不同视图。

标签: machine-learning deep-learning data-science transfer-learning


【解决方案1】:

简单的方法是将所有 3 个图像分别输入到 Inceptionv3 模型中,然后对所有 3 个输出一起执行一些加权决策。

更好的方法是使用 Inceptionv3 模型作为 3 个输入分支中的一个,而不是使用每个分支的嵌入层(最后一层)并将它们全部与一个完全连接的分类层(使用 softmax 激活)结合起来。这 3 个分支既可以针对特定视图进行训练,也可以与共享权重一起训练(对于这么大的模型,一起训练就可以了)。

顺便说一句,对于鞋型分类任务,我建议使用更简单的模型(Inceptionv3 有点过头了)。

【讨论】:

  • 你能解释一下吗:简单的方法是将所有 3 个图像分别输入到 Inceptionv3 模型中,然后对所有 3 个输出一起执行一些加权决策。它看起来类似于常规训练。一次输入一张图片
  • 训练类似,但在测试期间,您根据 3 个不同视图的输出对单个节目进行分类。
  • 所以我的理解是:我将用它们各自的类标记所有不同的视图并训练模型。那么我怎样才能对所有 3 个输出一起做出一些加权决定
  • 获取 3 张图片的输出。比计算 3 的平均值,或者如果您知道更喜欢哪个视图(以及喜欢多少)计算加权平均值。或者将其用作更简单的分类器模型的输入,该分类器模型可以学习每个视图的权重。
【解决方案2】:

我认为你有不同的行为方式:

  • 删除第一层 inception 并创建您的以支持 3x3 尺寸。
  • 为每个输入使用第一个 inception 块,然后在某个 fc 层(或之前)中连接它们。如果要搜索的功能相似,您可以使用共享参数。

第一种情况将合并所有维度并分散为任何图像提供的信息。 第二个将提取每个图像中的特定特征。

【讨论】:

  • 我知道已经有好几年了,但我很难理解如何将一个块分别用于三个输入。有没有相同的参考?我总共有 10 张图像有类似的问题,我想单独处理它们而不是合并它们,如第 1 点所述。
  • 是的,你可以使用 reshape 轻松完成,下一个伪代码是 pytorch 格式。最初,您应该拥有 Nx10xCxHxW 格式的数据。要通过第一个模型传递所有内容,x = x.reshape(-1, C, H, W)。把它放在一起:output = model(x); output.reshape(N, 10, -1, H, W) 最后把每个部分放在一起,你可以简单地做一个平均:output_mean = output.mean(dim=1)
猜你喜欢
  • 2021-07-19
  • 2021-08-13
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2016-08-16
  • 2018-04-04
  • 2018-10-12
  • 2021-03-24
相关资源
最近更新 更多