如何在 Tensorflow 框架中将 L2-Loss 函数用于对象检测 CNN?

How can I use L2-Loss function for Object-detection CNN in Tensorflow framework?

我正在研究 tensorflow(正是使用 CNN 进行对象检测)

我已经研究过分类,但是对象检测是回归问题,所以我对损失函数和整个网络实现感到困惑。

在分类问题中,我应该使用-

tf.nn.softmax_cross_entropy_with_logits(logits=result, labels=Y)

(结果是我的 CNN 输出张量)

但是在回归问题中,比如语义分割和对象检测,我发现我必须使用 l2-loss 函数。

tf.nn.l2_loss(t=结果)

我不知道如何使用此功能,因为我无法使用 tf.argmax 功能。

[源代码1]分类,使用softmax和tf.argmax

cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=result, labels=Y))
print("* Cross Entropy SIZE : " + str(cross_entropy))

Result_argmax = tf.argmax(tf.nn.softmax(result), 1)
Label_argmax = tf.argmax(Y, 1)
print("* Result Argmax : ", Result_argmax)
print("* Label Argmax : ", Label_argmax)

ay = tf.argmax(tf.nn.softmax(result), 1)
ly = tf.argmax(tf.nn.softmax(Y), 1)
correct_prediction = tf.equal(Result_argmax, Label_argmax)
print("* tf.argmax : " + str(Result_argmax))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

train_step = tf.train.AdamOptimizer(0.0001 * batchsize).minimize(cross_entropy)

这太简单了,我完全明白了。

[源代码2]回归,使用了l2_loss函数

l2_loss = tf.reduce_mean(tf.nn.l2_loss(t=result))
print("** L2 Loss SIZE : " + str(l2_loss))
train_step = tf.train.AdamOptimizer(0.0001 * batchsize).minimize(l2_loss)

????????

对吗?我无法理解如何进行盒子位置学习。

另外,还有我的学习监控被捕获了。

真的,真的看不懂。 请帮助我!

(最后,这是我拍摄的会话图像。)

物体检测包括分类和回归,也就是说,我们不仅要对图像上的一个物体进行正确的分类,还需要对物体进行正确的定位。

虽然有些目标检测框架确实看起来像回归模型(YOLO,SSD),但是损失函数并不像L2损失那么简单。实际上,损失函数由两部分组成,crossentropy loss用于分类,regressionloss用于定位,这里通常使用L2 loss作为regression loss。

下面是一些常见物体检测模型的损失函数。

SSD model.

YOLO model