-
Notifications
You must be signed in to change notification settings - Fork 0
/
tools.py
58 lines (49 loc) · 2.03 KB
/
tools.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import os
import sys
import glob
from keras import backend as K
def rescale_list(input_list, size, images=False):
# Either scale list down if input length is less than size or pad with 0s.
if len(input_list) == 0:
print('tools.py, rescale_list: Input list is empty.')
sys.exit()
if len(input_list) > size:
# Skip frames to get to correct length
skip = len(input_list) // size
output = [input_list[i] for i in range(0, len(input_list), skip)]
else:
output = input_list
for _ in range(len(input_list), size):
if not images:
output.append([0 for __ in range(len(input_list[0]))])
else:
output.append(os.path.join('data', 'black.png'))
return output[:size]
def get_frames(path):
images = sorted(glob.glob(os.path.join(path, '*png')))
return images
# Custom F1 metric @Paddy and @Kev1n91 on StackOverflow
def f1(y_true, y_pred):
def recall(y_true, y_pred):
"""Recall metric.
Only computes a batch-wise average of recall.
Computes the recall, a metric for multi-label classification of
how many relevant items are selected.
"""
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
recall = true_positives / (possible_positives + K.epsilon())
return recall
def precision(y_true, y_pred):
"""Precision metric.
Only computes a batch-wise average of precision.
Computes the precision, a metric for multi-label classification of
how many selected items are relevant.
"""
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
precision = precision(y_true, y_pred)
recall = recall(y_true, y_pred)
return 2*((precision*recall)/(precision+recall+K.epsilon()))