我可以将此损失函数用于YOLO 吗
def myLoss(y_actual,y_pred):
a = tf.keras.losses.BinaryCrossentropy()(y_actual[:,:,:,0],y_pred[:,:,:,0])
b = tf.keras.losses.MeanSquaredError()(y_actual[:,:,:,1:], y_pred[:,:,:,1:]*y_actual[:,:,:,:1])
loss= a + b
return loss
其中y_actual=[Pc,bx,by,bw,bh,c1,c2,c3]
Pc=c1、c2、c3中的一个存在于特定网格中的概率,
bx、by、bw、bh是特定网格的边界框参数,
c1、c2和c3是我想要预测的3个类别,例如:类别3的0,0,1
我在某个地方读到,当Pc_actual=0时,损失不关心边界框和类预测,所以我将它们与Pc_actual相乘,这样当Pc_actual为0时,对应于这些项的损失为0。
如果我错了,请纠正我
当Pc_actual=0
时,损失不关心边界框和类预测,而是关心Pc_pred
的结果,因为你也需要模型学习它,所以当Pc_actual=0
时,损失函数应该是(Pc_actual - Pc_pred)**2
,以在模型预测有对象而没有对象时惩罚模型。