所以我开始实施Gupta等人的论文“自然图像中文本定位的合成数据”。我遇到了一个严重的问题。
网络架构是一个完全卷积网络。最后一层基本上是NxNx7 Tensor(想象一下矩阵,其中每个单元格保存7个值)。每个单元格保持P和C值。 P是关于应该回归的边界框的6个参数,C是置信度。
现在我想在这一层上实现平方损失。由于论文指出最后一层的每个单元都是预测,如果预测器的位置确实应该包含一个边界框,则应该对该预测器(或单元)中的所有参数应用损失。如果它不应该包含一个边界框,那么只回归置信度C就足够了。
所以我应该在TensorFlow中动态定义单独的损失,我怎么能这样做?
答案 0 :(得分:0)
您可以使用tf.cond,并编写类似
的内容loss = tf.cond(is_there_sthg_label, lambda: tf.add(loss1, loss2), lambda: loss2)
编辑:
抱歉,我没有正确理解你的问题。如果存在边界框,则可以在NxN
上创建大小为[i, j]
且值为True(在运行时)的掩码,否则为false。然后计算每个单元格的损失,得到形状loss1
的张量loss2
和NxN
,然后
#loss1 is the loss on the confidence only, loss2 is the loss on P
loss_tensor = loss1 + tf.multiply(loss2, tf.cast(mask, loss2.dtype))
total_loss = reduce_sum(loss_tensor)
(如果你当然有批次,这仍然有效)