tensorflow / models

Models and examples built with TensorFlow
Other
76.94k stars 45.79k forks source link

How can I measure the test results after training, like calculate each class precision and recall? #8314

Open natures66 opened 4 years ago

natures66 commented 4 years ago

I trained the model on my own dataset, then I modified the object_detection_test.ipynb to my_test_tutorial.py for my test images. But I found this code just for draw predict bounding box, how I change it to draw ground truth box and calculate the precison and recall of every class?

`# Imports import time

start = time.time() import numpy as np import os import six.moves.urllib as urllib import sys import tarfile import tensorflow as tf import zipfile import cv2

from collections import defaultdict from io import StringIO from matplotlib import pyplot as plt from PIL import Image

os.chdir('D:\models-master\models\research\object_detection')

sys.path.append("..")

from utils import label_map_util

from utils import visualization_utils as vis_util

MODEL_NAME = 'D:\models-master\models\research\object_detection\myoutput'

PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'

PATH_TO_LABELS = os.path.join('D:\models-master\models\research\object_detection\mydata', 'mylabelmap.pbtxt')

NUM_CLASSES = 5

detection_graph = tf.Graph() with detection_graph.as_default(): od_graph_def = tf.GraphDef() with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid: serialized_graph = fid.read() od_graph_def.ParseFromString(serialized_graph) tf.import_graph_def(od_graph_def, name='')

label_map = label_map_util.load_labelmap(PATH_TO_LABELS) categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True) category_index = label_map_util.create_category_index(categories)

def load_image_into_numpy_array(image): (im_width, im_height) = image.size return np.array(image.getdata()).reshape( (im_height, im_width, 3)).astype(np.uint16)

PATH_TO_TEST_IMAGES_DIR = 'D:\models-master\models\research\object_detection\myimages\test_images' os.chdir(PATH_TO_TEST_IMAGES_DIR) TEST_IMAGE_PATHS = os.listdir(PATH_TO_TEST_IMAGES_DIR)

IMAGE_SIZE = (12, 8)

output_path = ('D:\models-master\models\research\object_detection\mytestout\')

with detection_graph.as_default(): with tf.Session(graph=detection_graph) as sess:

    image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')

    detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')

    detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
    detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')
    num_detections = detection_graph.get_tensor_by_name('num_detections:0')
    for image_path in TEST_IMAGE_PATHS:

        image = Image.open(PATH_TO_TEST_IMAGES_DIR + '\\' + image_path)

        image_np = load_image_into_numpy_array(image)

        image_np_expanded = np.expand_dims(image_np, axis=0)

        (boxes, scores, classes, num) = sess.run(
            [detection_boxes, detection_scores, detection_classes, num_detections],
            feed_dict={image_tensor: image_np_expanded})

        vis_util.visualize_boxes_and_labels_on_image_array(
            image_np,
            np.squeeze(boxes),
            np.squeeze(classes).astype(np.int32),
            np.squeeze(scores),
            category_index,
            use_normalized_coordinates=True,
            line_thickness=8)

        cv2.imwrite(output_path + image_path.split('\\')[-1], image_np)

end = time.time() print("Execution Time: ", end - start)`

sglvladi commented 4 years ago

You can use the COCO evaluation metrics to evaluate your trained model. Notes on how to do this can be found here and here.

natures66 commented 4 years ago

You can use the COCO evaluation metrics to evaluate your trained model. Notes on how to do this can be found here and here.

so can I measure my trained model by using eval.py just change images of eval to images of test?