Bonjour,
Dans le cadre de ma thèse je construis un modèle de détection d'objets dans des images en utilisant FasterRCNN en PyTorch.
Pour les logs j'utilise tensorboard dans lequel j'enregistre les valeurs de loss et d'AP.
A l'heure actuelle mon code tourne mais il me sort des valeurs de 'map' systématiquement nulles. Pour implémenter les map j'ai utilisé torchmetrics.detection.mean_ap. Connaissez vous cet outil ?
Je vous transmet ici mon code de train. Est-ce la bonne manière de l'implémenter ? :
la fonction d'évaluation est la suivante :
from torchmetrics.detection.mean_ap import MeanAveragePrecision
eval_metric = MeanAveragePrecision()
j'appelle cette fonction pendant l'entraînement après chaque époque :
def validate(valid_data_loader, model):
109 print('Validating')
110 global val_itr
111 global val_loss_list
112 global epoch
113 # initialize tqdm progress bar
114 prog_bar = tqdm(valid_data_loader, total=len(valid_data_loader))
115
116 for i, data in enumerate(prog_bar):
117 images, targets = data
118
119 images = list(image.to(DEVICE) for image in images)
120 targets = [{k: v.to(DEVICE) for k, v in t.items()} for t in targets]
121
122 with torch.no_grad():
123 loss_dict = model(images, targets)
124
125 losses_list = [loss for loss in loss_dict.values()]
126 losses = sum(losses_list)
127 loss_value = losses.item()
128
129 writer.add_scalar("Loss_val/loss", loss_value, val_itr)
130 writer.add_scalar("Loss_val/loss_classifier", losses_list[0], val_itr)
131 writer.add_scalar("Loss_val/loss_box_reg", losses_list[1], val_itr)
132 writer.add_scalar("Loss_val/loss_objectness", losses_list[2], val_itr)
133 writer.add_scalar("Loss_val/loss_rpn_box_reg", losses_list[3], val_itr)
134
135 # Evaluation part :
136 model.eval()
137 with torch.no_grad():
138 preds = model(images)
139 # pdb.set_trace()
140 # eval_metric(preds, targets)
141
142 eval_metric.update(preds, targets)
143
144
145 # pdb.set_trace()
146 model.train()
147
148 val_itr += 1
149
150 # update the loss value beside the progress bar for each iteration
151 prog_bar.set_description(desc=f"Loss: {loss_value:.4f}")
152
153 scores = eval_metric.compute()
154 mean_ap = scores['map']
155 mean_ap50 = scores['map_50']
156 mean_ap75 = scores['map_75']
157 mean_ar1 = scores['mar_1']
158 mean_ar10 = scores['mar_10']
159 mean_ar100 = scores['mar_100']
160
161 writer.add_scalar("Eval/map",mean_ap ,epoch)
162 writer.add_scalar("Eval/map_50",mean_ap50 ,epoch)
163 writer.add_scalar("Eval/map_75",mean_ap75 ,epoch)
164 writer.add_scalar("Eval/mar_1",mean_ar1 ,epoch)
165 writer.add_scalar("Eval/mar_10",mean_ar10 ,epoch)
166 writer.add_scalar("Eval/mar_100",mean_ar100 ,epoch)
167 return None
pour plus d'information, voici mon mail : leonard.martinez@universite-paris-saclay.fr
De plus, je ne retrouves plus le notebook de la séquence 7 à ce propos. Pourriez vous m'indiquer lequel il s'agit ?
Bien cordialement,
Léo MARTINEZ