J'étais sur le point d'écrire ma propre implémentation de la YOLOv3 et j'ai rencontré un problème avec la fonction de perte. L'article original mentionne qu'il utilise l'entropie croisée binaire pour la partie prédiction de classe, ce que j'ai fait.
J'ai essayé de lire certains codes du darknet original, mais je n'ai rien trouvé qui soit lié à la perte de BCE. J'ai également lu d'autres approches utilisant Keras, Pytorch et TensorFlow. Tout le monde semble avoir sa propre opinion sur la fonction de perte. Certains prennent juste MSE pour l'estimation de la largeur et de la hauteur, et le reste avec BCE, certains prennent x,y,w,h avec MSE et le reste avec BCE.
Voici une partie de mon code :
loss_x = self.mse_loss(x[mask], tx[mask])
loss_y = self.mse_loss(y[mask], ty[mask])
loss_w = self.mse_loss(w[mask], tw[mask])
loss_h = self.mse_loss(h[mask], th[mask])
loss_conf = self.bce_loss(pred_conf[conf_mask_false], tconf[conf_mask_false]) + self.bce_loss(pred_conf[conf_mask_true],tconf[conf_mask_true])
loss_cls = (1 / nB) * self.ce_loss(pred_cls[mask],torch.argmax(tcls[mask], 1))
loss = loss_x + loss_y + loss_w + loss_h + loss_conf + loss_cls
Comme la fonction de perte joue un rôle important dans la formation. J'aimerais que quelqu'un puisse m'aider à résoudre ce problème.