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

时间:2019-05-03 04:12:56

标签: python tensorflow neural-network object-detection loss-function

我正在研究张量流(使用CNN进行精确对象检测)

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

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

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

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

但是在回归问题中,例如sementic-segmentationation和对象检测,我发现我必须使用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)

????????

对吗?我不明白如何进行盒子位置学习。

还有,我的学习监视器被捕获了。

enter image description here

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

(最后,这是我捕获的会话图像。) enter image description here

1 个答案:

答案 0 :(得分:1)

对象检测包括分类和回归,也就是说,我们不仅必须正确地对图像上的对象进行分类,而且还需要正确定位对象。

尽管某些对象检测框架的确看起来像回归模型(YOLO,SSD),但损失函数并不像L2损失那么简单。实际上,损失函数由两部分组成:分类损失crossentropy和定位损失regression,此处L2损失通常用于regression损失。

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

SSD model. enter image description here

YOLO model

enter image description here