我正在研究张量流(使用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)
????????
对吗?我不明白如何进行盒子位置学习。
还有,我的学习监视器被捕获了。
真的,真的我听不懂。 请帮助我!
答案 0 :(得分:1)
对象检测包括分类和回归,也就是说,我们不仅必须正确地对图像上的对象进行分类,而且还需要正确定位对象。
尽管某些对象检测框架的确看起来像回归模型(YOLO,SSD),但损失函数并不像L2损失那么简单。实际上,损失函数由两部分组成:分类损失crossentropy
和定位损失regression
,此处L2损失通常用于regression
损失。
这是一些常见物体检测模型的损失函数。