예제 #1
0
    def _load_net(self):
        # Load feature extractor
        feature_extractor = feature_extractors.StridedInflatedEfficientNet()
        checkpoint = engine.load_weights(self.feature_extractor_weights)
        feature_extractor.load_state_dict(checkpoint)
        feature_extractor.eval()

        # Load a logistic regression classifier
        gesture_classifier = LogisticRegression(
            num_in=feature_extractor.feature_dim, num_out=30)
        checkpoint = engine.load_weights(self.gesture_classifier_weights)
        gesture_classifier.load_state_dict(checkpoint)
        gesture_classifier.eval()

        # Combine both models
        self.net = Pipe(feature_extractor, gesture_classifier)
    gender = args['--gender'] or None
    camera_id = args['--camera_id'] or 0
    path_in = args['--path_in'] or None
    path_out = args['--path_out'] or None
    title = args['--title'] or None
    use_gpu = args['--use_gpu']

    # Load feature extractor
    feature_extractor = feature_extractors.StridedInflatedMobileNetV2()
    checkpoint = engine.load_weights(
        'resources/backbone/strided_inflated_mobilenet.ckpt')
    feature_extractor.load_state_dict(checkpoint)
    feature_extractor.eval()

    # Load fitness activity classifier
    gesture_classifier = LogisticRegression(
        num_in=feature_extractor.feature_dim, num_out=81)
    checkpoint = engine.load_weights(
        'resources/fitness_activity_recognition/mobilenet_logistic_regression.ckpt'
    )
    gesture_classifier.load_state_dict(checkpoint)
    gesture_classifier.eval()

    # Load MET value converter
    met_value_converter = calorie_estimation.METValueMLPConverter()
    checkpoint = torch.load(
        'resources/calorie_estimation/mobilenet_features_met_converter.ckpt')
    met_value_converter.load_state_dict(checkpoint)
    met_value_converter.eval()

    # Concatenate feature extractor with downstream nets
    net = Pipe(feature_extractor,
예제 #3
0
        path_in,
        f"features_train_num_layers_to_finetune={num_layers_to_finetune}"),
                                        label_names,
                                        label2int,
                                        num_timesteps=num_timesteps)
    valid_loader = generate_data_loader(os.path.join(
        path_in,
        f"features_valid_num_layers_to_finetune={num_layers_to_finetune}"),
                                        label_names,
                                        label2int,
                                        num_timesteps=None,
                                        batch_size=1,
                                        shuffle=False)

    # modeify the network to generate the training network on top of the features
    gesture_classifier = LogisticRegression(
        num_in=feature_extractor.feature_dim, num_out=len(label_names))
    if num_layers_to_finetune > 0:
        net = Pipe(custom_classifier_bottom, gesture_classifier)
    else:
        net = gesture_classifier
    net.train()

    if use_gpu:
        net = net.cuda()

    lr_schedule = {0: 0.0001, 40: 0.00001}
    num_epochs = 60
    best_model_state_dict = training_loops(net, train_loader, valid_loader,
                                           use_gpu, num_epochs, lr_schedule)

    # Save best model