【问题标题】:How to detect multiple classes in one image where no object is an option如何在一个图像中检测多个类,其中没有对象是一个选项
【发布时间】:2020-04-14 04:32:28
【问题描述】:

假设我有道路图像的数据集,我希望它输出一个数组,每个元素的范围为 0-1。首先图像中没有 0-1,其次如果有汽车,则为 0-1,最后如果有自行车,则为 0-1。图像中可能既有自行车也有汽车。如果什么都没有,我的标签会被标记为 [1,0,0],如果同时有汽车和自行车,我的标签会被标记为 [0,1,1]。

我不关心汽车或自行车的坐标。我使用了 vgg16 和我的最后一层输出 3 个带有 sigmoid 函数的输出。我被困在损失函数中。我做了一个自定义的,但我认为我对平方差的使用是错误的,这是我的自定义函数。


def lf(y_true,y_pred):
    square=0
    batchsize=25
    for i in range(batchsize):
        if y_true[i,0]==0: 

            square+= tf.squared_difference(y_true[i,0:3], y_pred[i,0:3])
        else:
            square+= tf.squared_difference(y_true[i,0], y_pred[i,0])





    mean_square= square/batchsize
    return mean_square

因此,如果没有对象(y_true[0]=1),那么猜测汽车或自行车并不重要,我只对第一部分 y_true[0] 承担损失。这是正确的方法还是我应该做二进制交叉熵。我的损失暂时停留在 0.24605921。

【问题讨论】:

    标签: tensorflow keras deep-learning classification conv-neural-network


    【解决方案1】:

    您要解决的问题称为多标签多类图像分类。
    在这种情况下,平方差没有意义。由于您使用的是 Keras,因此您可以使用内置的损失函数 binary_crossentropy
    我还建议您在基本事实标签中只保留两个元素,即 [0,0] 第一个用于汽车,第二个用于自行车。如果模型预测 [0,0],则图像中没有任何内容。在这种情况下,不需要为没有对象保留第三个标签。

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多