Skip to content

Commit 1692995

Browse files
committed
updated reporting function for Classification times
1 parent 8d0d403 commit 1692995

2 files changed

Lines changed: 47 additions & 25 deletions

File tree

experiments/custom/classifier.py

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import multiprocessing as mp
1010
import time
1111
import pickle
12+
import numpy as np
1213

1314
from utils.configloader import PATH_TO_CLASSIFIER, TIME_WINDOW, FRAMERATE
1415
from experiments.custom.featureextraction import (
@@ -153,39 +154,53 @@ def example_feat_classifier_pool_run(input_q: mp.Queue, output_q: mp.Queue):
153154

154155

155156
def simba_feat_classifier_pool_run(input_q: mp.Queue, output_q: mp.Queue):
156-
feature_extractor = SimbaFeatureExtractorStandard14bp(TIME_WINDOW)
157-
# feature_extractor = SimbaFeatureExtractor(TIME_WINDOW)
157+
#feature_extractor = SimbaFeatureExtractorStandard14bp(TIME_WINDOW)
158+
feature_extractor = SimbaFeatureExtractor(TIME_WINDOW)
158159
classifier = SiMBAClassifier() # initialize classifier
160+
report = False
161+
ft_list = []
162+
clf_list = []
159163
while True:
160164
skel_time_window = None
161165
feature_id = 0
162166
if input_q.full():
163167
skel_time_window, feature_id = input_q.get()
164168
if skel_time_window is not None:
165-
start_time = time.time()
169+
start_time_feat = time.time()
166170
features = feature_extractor.extract_features(skel_time_window)
167-
# end_time = time.time()
168-
# print(
169-
# "Feature extraction time: {:.2f} msec".format(
170-
# (end_time - start_time) * 1000
171-
# )
172-
# )
173-
171+
end_time_feat = time.time()
172+
start_time_clf = time.time()
174173
last_prob = classifier.classify(features)
174+
end_time = time.time()
175175
output_q.put((last_prob, feature_id))
176-
# end_time2 = time.time()
177-
# print(
178-
# "Classification time: {:.2f} msec".format(
179-
# (end_time2 - end_time) * 1000
180-
# )
181-
# )
176+
177+
if report:
178+
feat_time = ((end_time_feat - start_time_feat) * 1000)
179+
clf_time = ((end_time-start_time_clf)*1000)
180+
print("Feature Extraction time: {:.2f} msec".format(feat_time))
181+
print("Classification time: {:.2f} msec".format(clf_time))
182+
print("Total time: {:.2f} msec".format((end_time-start_time_feat)*1000))
183+
print("Current probability: {:.2f}".format(last_prob))
184+
print("Feature ID: "+ str(feature_id))
185+
#skip first 10 to ignore numba jit initial slowness in stats
186+
if feature_id > 10:
187+
ft_list.append(feat_time)
188+
clf_list.append(clf_time)
189+
print("Avg. feature extraction time: {:.2f} +/- {:.2f} msec".format(np.mean(ft_list), np.std(ft_list)),
190+
"Avg. classification time: {:.2f} +/- {:.2f} msec".format(np.mean(clf_list), np.std(clf_list)),
191+
f"Classfication Cycles: {len(ft_list)}")
192+
182193
else:
183194
pass
184195

185196

186197
def bsoid_feat_classifier_pool_run(input_q: mp.Queue, output_q: mp.Queue):
187198
feature_extractor = BsoidFeatureExtractor()
188199
classifier = BsoidClassifier() # initialize classifier
200+
report = False
201+
ft_list = []
202+
clf_list = []
203+
189204
while True:
190205
skel_time_window = None
191206
feature_id = 0
@@ -199,11 +214,19 @@ def bsoid_feat_classifier_pool_run(input_q: mp.Queue, output_q: mp.Queue):
199214
last_prob = classifier.classify(features)
200215
output_q.put((last_prob, feature_id))
201216
end_time = time.time()
202-
print("Feature Extraction time: {:.2f} msec".format((end_time_feat - start_time_feat) * 1000))
203-
print("Classification time: {:.2f} msec".format((end_time-start_time_clf)*1000))
204-
print("Total time: {:.2f} msec".format((end_time-start_time_feat)*1000))
205-
print("Current motif: ", *last_prob)
206-
print("Feature ID: "+ str(feature_id))
217+
if report:
218+
feat_time = ((end_time_feat - start_time_feat) * 1000)
219+
clf_time = ((end_time-start_time_clf)*1000)
220+
print("Feature Extraction time: {:.2f} msec".format(feat_time))
221+
print("Classification time: {:.2f} msec".format(clf_time))
222+
print("Total time: {:.2f} msec".format((end_time-start_time_feat)*1000))
223+
print("Current motif: ", *last_prob)
224+
print("Feature ID: "+ str(feature_id))
225+
ft_list.append(feat_time)
226+
clf_list.append(clf_time)
227+
print("Avg. feature extraction time: {:.2f} +/- {:.2f} msec".format(np.mean(ft_list), np.std(ft_list)),
228+
"Avg. classification time: {:.2f} +/- {:.2f} msec".format(np.mean(clf_list), np.std(clf_list)),
229+
f"Classfication Cycles: {len(ft_list)}")
207230
else:
208231
pass
209232

experiments/custom/featureextraction.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,11 +1302,11 @@ def boxcar_center(a, n):
13021302
return moving_avg
13031303

13041304
def adp_filt_pose(pose_estimation):
1305-
"""Adapted from adp_filt function in BSOID"""
1305+
"""Adapted from adp_filt function in BSOID
1306+
THIS FUNCTION IS DEPRECATED"""
13061307
currdf = np.array(pose_estimation)
13071308
datax = currdf[:, :, 0]
13081309
datay = currdf[:, :, 1]
1309-
# TODO: Adapt filter to work without workaround and skeleton
13101310
# data_lh = currdf[:, :, 2]
13111311
data_lh = np.full_like(datax, 0.9)
13121312
currdf_filt = np.zeros((datax.shape[0], (datax.shape[1]) * 2))
@@ -1343,8 +1343,7 @@ def adp_filt_pose(pose_estimation):
13431343
#data, p_sub_threshold = adp_filt_pose(input_array)
13441344

13451345
# new version to filter data (filtering is handled upstream):
1346-
##input_array = np.array(input_array) # converted to np.array
1347-
data = self.handle_nan(input_array) # still a deque
1346+
data = self.handle_nan(input_array) # still a deque but will turn into np.array
13481347
data = np.array([data])
13491348
# TODO: Update to match new time_window calculation and filtering
13501349
win_len = np.int(np.round(0.05 / (1 / self._fps)) * 2 - 1)

0 commit comments

Comments
 (0)