Initial commit
This commit is contained in:
111
Tensorflow/tutoriel27-3/map.py
Normal file
111
Tensorflow/tutoriel27-3/map.py
Normal file
@@ -0,0 +1,111 @@
|
||||
import tensorflow as tf
|
||||
import sys
|
||||
import time
|
||||
import cv2
|
||||
import numpy as np
|
||||
import math
|
||||
import common
|
||||
import config
|
||||
import model
|
||||
|
||||
images, labels, labels2=common.read_json('test.json', 10)
|
||||
images=np.array(images, dtype=np.float32)/255
|
||||
labels=np.array(labels, dtype=np.float32)
|
||||
|
||||
model=model.model(config.nbr_classes, config.nbr_boxes, config.cellule_y, config.cellule_x)
|
||||
|
||||
checkpoint=tf.train.Checkpoint(model=model)
|
||||
checkpoint.restore(tf.train.latest_checkpoint("./training/"))
|
||||
|
||||
dataset=tf.data.Dataset.from_tensor_slices((images, labels)).batch(config.batch_size)
|
||||
|
||||
def calcul_map(model, dataset, beta=1., seuil=0.5):
|
||||
grid=np.meshgrid(np.arange(config.cellule_x, dtype=np.float32), np.arange(config.cellule_y, dtype=np.float32))
|
||||
grid=np.expand_dims(np.stack(grid, axis=-1), axis=2)
|
||||
grid=np.tile(grid, (1, 1, 1, config.nbr_boxes, 1))
|
||||
|
||||
index_labels2=0
|
||||
labels2_=labels2*[config.r_x, config.r_y, config.r_x, config.r_y, 1, 1, 1]
|
||||
score=[]
|
||||
tab_nbr_reponse=[]
|
||||
tab_tp=[]
|
||||
tab_true_boxes=[]
|
||||
|
||||
for images, labels in dataset:
|
||||
predictions=np.array(model(images))
|
||||
|
||||
pred_conf=common.sigmoid(predictions[:, :, :, :, 4])
|
||||
pred_classes=common.softmax(predictions[:, :, :, :, 5:])
|
||||
pred_ids=np.argmax(pred_classes, axis=-1)
|
||||
|
||||
x_center=((grid[:, :, :, :, 0]+common.sigmoid(predictions[:, :, :, :, 0]))*config.r_x)
|
||||
y_center=((grid[:, :, :, :, 1]+common.sigmoid(predictions[:, :, :, :, 1]))*config.r_y)
|
||||
w=(np.exp(predictions[:, :, :, :, 2])*config.anchors[:, 0]*config.r_x)
|
||||
h=(np.exp(predictions[:, :, :, :, 3])*config.anchors[:, 1]*config.r_y)
|
||||
|
||||
x_min=x_center-w/2
|
||||
y_min=y_center-h/2
|
||||
x_max=x_center+w/2
|
||||
y_max=y_center+h/2
|
||||
|
||||
tab_boxes=np.stack([y_min, x_min, y_max, x_max], axis=-1).astype(np.float32)
|
||||
tab_boxes=tab_boxes.reshape(-1, config.cellule_y*config.cellule_x*config.nbr_boxes, 4)
|
||||
pred_conf=pred_conf.reshape(-1, config.cellule_y*config.cellule_x*config.nbr_boxes)
|
||||
pred_ids=pred_ids.reshape(-1, config.cellule_y*config.cellule_x*config.nbr_boxes)
|
||||
|
||||
for p in range(len(predictions)):
|
||||
nbr_reponse=np.zeros(config.nbr_classes)
|
||||
tp=np.zeros(config.nbr_classes)
|
||||
nbr_true_boxes=np.zeros(config.nbr_classes)
|
||||
tab_index=tf.image.non_max_suppression(tab_boxes[p], pred_conf[p], 100)
|
||||
for id in tab_index:
|
||||
if pred_conf[p, id]>0.10:
|
||||
nbr_reponse[pred_ids[p, id]]+=1
|
||||
for box in labels2_[index_labels2]:
|
||||
if not box[5]:
|
||||
break
|
||||
b1=[tab_boxes[p, id, 1], tab_boxes[p, id, 0], tab_boxes[p, id, 3], tab_boxes[p, id, 2]]
|
||||
iou=common.intersection_over_union(b1, box)
|
||||
if iou>seuil and box[6]==pred_ids[p, id]:
|
||||
tp[pred_ids[p, id]]+=1
|
||||
|
||||
for box in labels2[index_labels2]:
|
||||
if not box[5]:
|
||||
break
|
||||
nbr_true_boxes[int(box[6])]+=1
|
||||
|
||||
tab_nbr_reponse.append(nbr_reponse)
|
||||
tab_tp.append(tp)
|
||||
tab_true_boxes.append(nbr_true_boxes)
|
||||
|
||||
index_labels2=index_labels2+1
|
||||
|
||||
tab_nbr_reponse=np.array(tab_nbr_reponse)
|
||||
tab_tp=np.array(tab_tp)
|
||||
tab_true_boxes=np.array(tab_true_boxes)
|
||||
|
||||
########################
|
||||
precision_globule_rouge=tab_tp[:, 1]/(tab_nbr_reponse[:, 1]+1E-7)
|
||||
precision_trophozoite=tab_tp[:, 4]/(tab_nbr_reponse[:, 4]+1E-7)
|
||||
|
||||
rappel_globule_rouge=tab_tp[:, 1]/(tab_true_boxes[:, 1]+1E-7)
|
||||
rappel_trophozoite=tab_tp[:, 4]/(tab_true_boxes[:, 4]+1E-7)
|
||||
|
||||
print("F1 score globule rouge", np.mean(2*precision_globule_rouge*rappel_globule_rouge/(precision_globule_rouge+rappel_globule_rouge+1E-7)))
|
||||
print("F1 score trophozoite", np.mean(2*precision_trophozoite*rappel_trophozoite/(precision_trophozoite+rappel_trophozoite+1E-7)))
|
||||
|
||||
precision=(precision_globule_rouge+precision_trophozoite)/2
|
||||
rappel=(rappel_globule_rouge+rappel_trophozoite)/2
|
||||
|
||||
score=np.mean((1+beta*beta)*precision*rappel/(beta*beta*precision+rappel+1E-7))
|
||||
print("SCORE (globule rouge/trophozoite)", score)
|
||||
########################
|
||||
|
||||
precision=tab_tp/(tab_nbr_reponse+1E-7)
|
||||
rappel=tab_tp/(tab_true_boxes+1E-7)
|
||||
score=np.mean((1+beta*beta)*precision*rappel/(beta*beta*precision+rappel+1E-7))
|
||||
|
||||
return score
|
||||
|
||||
score=calcul_map(model, dataset)
|
||||
print("Resultat", score)
|
||||
Reference in New Issue
Block a user