david8862 / keras-YOLOv3-model-set

end-to-end YOLOv4/v3/v2 object detection pipeline, implemented on tf.keras with different technologies
MIT License
640 stars 222 forks source link

为了减少量化损失,尝试把yolov3的置信度真值从1变成16 #179

Closed ShihuaiXu closed 3 years ago

ShihuaiXu commented 3 years ago

请问david,我用您的代码和在嵌入设设备上量化后的模型对比,precsion和recall的差别在5-10%,我希望减少部署在嵌入式设备上的量化损失,所以想将yolov3的置信度真值从1设置成16,y_true[l][b, j, i, k, 4] = 16,后处理时再除以16,请问我在loss.py的时候,需要对 confidence_loss = object_mask K.binary_crossentropy(true_objectness_probs, raw_pred[..., 4:5], from_logits=True) + (1 - object_mask) K.binary_crossentropy(object_mask, raw_pred[..., 4:5], from_logits=True) * ignore_mask 这段计算置信度损失的代码做哪些改动,计算loss时应该是加一个softmax或sigomid再做交叉熵损失 还是说直接做回归损失 或者说是否有别的损失函数可以用

david8862 commented 3 years ago

我没有尝试过这种处理方式。YOLO的confidence_loss计算目前基本都是采用binary crossentropy方式,故相应的真值也应使用one-hot形式。在计算loss时,model的predict输出已经经过了sigmoid激活(from_logits=True)

ShihuaiXu commented 3 years ago

原来如此,谢谢david,我再尝试一下