Esempio n. 1
0
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))
Esempio n. 3
0
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))
Esempio n. 4
0
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)
Esempio n. 7
0
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!')