def train_markov(training_data, training_labels, training_files, eval_data, eval_labels): global hmm_models global hidden_states print('Init training markov') cls = 0 while True: list_data = list() list_files = list() for index in range(len(training_data)): if training_labels[index] == cls: seq_list = training_data[index] file = training_files[index] list_data.append(seq_list) list_files.append(file) if len(list_data) == 0: break else: model_path = os.path.join(ClassHMM.model_hmm_folder_action, 'model{0}.pkl'.format(cls)) hmm_model = ClassHMM(model_path) print('Training model {0}'.format(cls)) hmm_model.train(list_data, hidden_states) hmm_models.append(hmm_model) cls += 1 print('Models trained') eval_markov(eval_data, eval_labels)
def main(): print('Initializing main function') # Withdrawing tkinter # Loading model dirs list_folder_data = [ ('/home/mauricio/CNN/Classes/Door', 0.05), ('/home/mauricio/CNN/Classes/Tires', 0.05), ('/home/mauricio/CNN/Classes/Walk', 0.05), ] list_hmm = [] for folder_data in list_folder_data: label_name = get_label_from_folder(folder_data[0]) full_model_dir = os.path.join(hnn_model_folder, '{0}.pkl'.format(label_name)) list_hmm.append(ClassHMM(full_model_dir)) # Initializing instances instance_pose = ClassOpenPose() instance_nn = ClassNN.load_from_params(nn_model_dir) option = input('Select 1 to train, 2 to eval hmm, 3 to preprocess: ') if option == '1': print('Train hmm selection') train_hmm(list_folder_data, list_hmm, instance_nn, instance_pose) elif option == '2': eval_hmm(list_folder_data, list_hmm, instance_nn, instance_pose) elif option == '3': recalculate = False pre_process_images(instance_pose, list_folder_data, recalculate) else: print('Invalid argument: {0}'.format(option))
def classify_markov(): global hmm_models print('Init classification using markov') training_data = list() training_labels = list() training_files = list() eval_data = list() eval_labels = list() eval_files = list() # Loading classes for index, item in enumerate(list_folder_data): folder = item['folderPath'] label = item['label'] num_file = 0 list_paths = list() for root, _, files in os.walk(folder): for file in files: full_path = os.path.join(root, file) ext = ClassUtils.get_filename_extension(full_path) if ext == '.json': list_paths.append(full_path) total_samples = len(list_paths) total_train = int(total_samples * 80 / 100) # Shuffle samples random.Random(seed).shuffle(list_paths) for full_path in list_paths: list_key_poses = list() with open(full_path, 'r') as f: json_txt = f.read() json_data = json.loads(json_txt) list_poses = json_data['listPoses'] for pose in list_poses: list_key_poses.append(pose['keyPose']) if num_file < total_train: training_data.append(list_key_poses) training_labels.append(label) training_files.append(full_path) else: eval_data.append(list_key_poses) eval_labels.append(label) eval_files.append(full_path) num_file += 1 print('Total training: {0}'.format(len(training_data))) print('Total eval: {0}'.format(len(eval_data))) res = input('Press 1 to train. Press 2 to eval - Press 3 to train iter: ') if res == '1': train_markov(training_data, training_labels, training_files, eval_data, eval_labels) elif res == '2': # Pre-loading models for i in range(len(list_folder_data)): model_path = os.path.join(ClassHMM.model_hmm_folder_action, 'model{0}.pkl'.format(i)) hmm_model = ClassHMM(model_path) hmm_models.append(hmm_model) eval_markov(eval_data, eval_labels) elif res == '3': train_markov_iter(training_data, training_labels, training_files, eval_data, eval_labels) else: raise Exception('Option not implemented: {0}'.format(res))
def train_markov_iter(training_data, training_labels, training_files, eval_data, eval_labels): global hmm_models global hidden_states print('Init training markov iteration') selected_models = list() max_precision = 0 for _ in range(iterations): # Reset iterations hmm_models.clear() cls = 0 while True: list_data = list() list_files = list() for index in range(len(training_data)): if training_labels[index] == cls: seq_list = training_data[index] file = training_files[index] list_data.append(seq_list) list_files.append(file) if len(list_data) == 0: break else: model_path = os.path.join(ClassHMM.model_hmm_folder_action, 'model{0}.pkl'.format(cls)) hmm_model = ClassHMM(model_path) print('Training model {0}'.format(cls)) hmm_model.train(list_data, hidden_states) hmm_models.append(hmm_model) cls += 1 print('Models trained') precision = eval_markov(eval_data, eval_labels) if precision > max_precision: selected_models.clear() # Copy list no reference for model in hmm_models: selected_models.append(model) max_precision = precision # Saving selected models hmm_models = selected_models for model in selected_models: model.save_model() print('Evaluating model for final precision: {0}'.format(max_precision)) eval_markov(eval_data, eval_labels) print('Evaluating model second chance') eval_markov(eval_data, eval_labels) print('Done!')
def train_hmm(training_list_cls, training_cls_labels, validate_list_cls, validate_cls_labels, eval_list_poses, eval_labels, option, base_data): print('Train HMM') # Iterating approach iterations = 10 selected_models = list() max_precision = 0 for _ in range(iterations): cls = 0 hmm_models = list() while True: list_data = list() for index in range(len(training_list_cls)): if training_cls_labels[index] == cls: list_poses = training_list_cls[index] list_cls = list() for pose in list_poses: list_cls.append(pose['class']) list_data.append(list_cls) if len(list_data) == 0: break else: model_path = os.path.join(ClassHMM.model_hmm_folder_action, 'model_{0}.pkl'.format(cls)) hmm_model = ClassHMM(model_path) print('Training model {0}'.format(cls)) hmm_model.train(list_data, hidden_states) hmm_models.append(hmm_model) cls += 1 # Eval Markov precision = eval_markov(validate_list_cls, validate_cls_labels, hmm_models) if precision > max_precision: selected_models.clear() for model in hmm_models: selected_models.append(model) max_precision = precision # Saving selected models hmm_models = selected_models for model in selected_models: model.save_model() precision = eval_markov(validate_list_cls, validate_cls_labels, hmm_models) real_precision = eval_markov(eval_list_poses, eval_labels, hmm_models) print('Precision: {0}'.format(precision)) print('Max precision: {0}'.format(max_precision)) print('Real Precision: {0}'.format(real_precision)) # Evaluating current actions for folder_info in list_classes: folder = folder_info['folderPath'] for root, _, files in os.walk(folder): for file in files: full_path = os.path.join(root, file) if '_{0}_partialdata'.format(base_data) in full_path: process_file_action(full_path, option, hmm_models=hmm_models, accuracy=real_precision)
def train_hmm(training_list_cls, training_cls_labels, validate_list_cls, validate_cls_labels, eval_list_actions, eval_labels, option: Option, base_data_1, base_data_2): print('Initializing training HMM') hmm_models = list() hidden_states = 6 # Training using iterations iterations = 5 selected_models = list() max_precision = 0 for _ in range(iterations): hmm_models.clear() for index in range(len(list_classes)): # Creating model for each class model_path = os.path.join(ClassHMM.model_hmm_folder_activities, 'model{0}.pkl'.format(index)) hmm_model = ClassHMM(model_path) # Get sequences for class: list_data = list() for idx_label, label in enumerate(training_cls_labels): if label == index: list_actions = training_list_cls[idx_label] seq = get_seq_hmm(list_actions) list_data.append(seq) print('Training model {0}'.format(index)) hmm_model.train(list_data, hidden_states) hmm_models.append(hmm_model) res = eval_markov(validate_list_cls, validate_cls_labels, hmm_models) print('Precision for model. {0}'.format(res['precision'])) if res['precision'] > max_precision: selected_models.clear() for model in hmm_models: selected_models.append(model) max_precision = res['precision'] # Saving selected models hmm_models = selected_models for model in selected_models: model.save_model() precision = eval_markov(validate_list_cls, validate_cls_labels, hmm_models)['precision'] real_precision = eval_markov(eval_list_actions, eval_labels, hmm_models)['precision'] print('Precision: {0}'.format(precision)) print('Max precision: {0}'.format(max_precision)) print('Real Precision: {0}'.format(real_precision)) apply_classifier(option, base_data_1, base_data_2, hmm_models=hmm_models, accuracy=precision, real_accuracy=real_precision)
def class_method(): print('Class Method') seq1 = [[3, 2, 3, 2, 3], [1, 2], [0, 1, 0, 1, 0]] seq2 = [[3, 3, 3, 2, 2], [1, 1], [2, 2, 2, 3, 3]] model_1_path = '/home/mauricio/models/hmm/train1.pkl' model_2_path = '/home/mauricio/models/hmm/train2.pkl' model_1 = ClassHMM(model_1_path) model_2 = ClassHMM(model_2_path) hidden_states = 6 model_1.train(seq1, hidden_states) model_2.train(seq2, hidden_states) seq_test = [3, 2, 3, 2, 3] score1 = model_1.get_score(seq_test) score2 = model_2.get_score(seq_test) print('Score 1: {0} - Score 2: {1}'.format(score1, score2)) seq_test_2 = [4, 2, 3, 2, 3] score1 = model_1.get_score(seq_test_2) score2 = model_2.get_score(seq_test_2) print('Score 1: {0} - Score 2: {1}'.format(score1, score2)) seq_test3 = [3, 3, 3, 3, 3] score1 = model_1.get_score(seq_test3) score2 = model_2.get_score(seq_test3) print('Score 1: {0} - Score 2: {1}'.format(score1, score2)) print('Done!')