Made evaluation compatible with Caffe-like decoding

Signed-off-by: Jim Martens <github@2martens.de>
This commit is contained in:
2019-08-11 15:17:33 +02:00
parent 6ce6e4a195
commit 4a8d072b97

View File

@ -61,7 +61,7 @@ def get_number_gt_per_class(labels: Sequence[Sequence[Sequence[int]]],
def prepare_predictions(predictions: Sequence[Sequence[Sequence[Union[int, float]]]], def prepare_predictions(predictions: Sequence[Sequence[Sequence[Union[int, float]]]],
nr_classes: int) -> \ nr_classes: int) -> \
List[List[Tuple[int, float, float, int, int, int, int]]]: List[List[Tuple[int, float, int, int, int, int]]]:
""" """
Prepares the predictions for further processing. Prepares the predictions for further processing.
@ -73,27 +73,38 @@ def prepare_predictions(predictions: Sequence[Sequence[Sequence[Union[int, float
list of predictions per class list of predictions per class
""" """
results = [list() for _ in range(nr_classes + 1)] results = [list() for _ in range(nr_classes + 1)]
# index positions for bounding box coordinates
xmin = 2
ymin = 3
xmax = 4
ymax = 5
for i, batch_item in enumerate(predictions): for i, batch_item in enumerate(predictions):
image_id = i image_id = i
for box in batch_item: for box in batch_item:
if len(box) == 7:
# entropy is in box list
xmin += 1
ymin += 1
xmax += 1
ymax += 1
class_id = int(box[0]) class_id = int(box[0])
# Round the box coordinates to reduce the required memory. # Round the box coordinates to reduce the required memory.
confidence = box[1] confidence = box[1]
entropy = box[2] xmin = round(box[xmin])
xmin = round(box[3]) ymin = round(box[ymin])
ymin = round(box[4]) xmax = round(box[xmax])
xmax = round(box[5]) ymax = round(box[ymax])
ymax = round(box[6]) prediction = (image_id, confidence, xmin, ymin, xmax, ymax)
prediction = (image_id, confidence, entropy, xmin, ymin, xmax, ymax)
# Append the predicted box to the results list for its class. # Append the predicted box to the results list for its class.
results[class_id].append(prediction) results[class_id].append(prediction)
return results return results
def match_predictions(predictions: Sequence[Sequence[Tuple[int, float, float, int, int, int, int]]], def match_predictions(predictions: Sequence[Sequence[Tuple[int, float, int, int, int, int]]],
labels: Sequence[Sequence[Sequence[int]]], labels: Sequence[Sequence[Sequence[int]]],
iou_func: callable, iou_func: callable,
nr_classes: int, nr_classes: int,
@ -169,7 +180,6 @@ def match_predictions(predictions: Sequence[Sequence[Tuple[int, float, float, in
# Create the data type for the structured array. # Create the data type for the structured array.
preds_data_type = np.dtype([('image_id', np.int32), preds_data_type = np.dtype([('image_id', np.int32),
('confidence', 'f4'), ('confidence', 'f4'),
('entropy', 'f4'),
('xmin', 'f4'), ('xmin', 'f4'),
('ymin', 'f4'), ('ymin', 'f4'),
('xmax', 'f4'), ('xmax', 'f4'),