Example #1
0
def _load_feature_extractor():
    global inference_engine
    import torch
    from sense import engine
    from sense import feature_extractors
    if inference_engine is None:
        feature_extractor = feature_extractors.StridedInflatedEfficientNet()

        # Remove internal padding for feature extraction and training
        checkpoint = torch.load('resources/backbone/strided_inflated_efficientnet.ckpt')
        feature_extractor.load_state_dict(checkpoint)
        feature_extractor.eval()

        # Create Inference Engine
        inference_engine = engine.InferenceEngine(feature_extractor, use_gpu=True)
Example #2
0
        print(
            "Warning: if start training, files in the path_out folder will be overwritten."
        )
        while True:
            overwrite_files = input(
                "Enter Y if allow to overwrite files, enter N then the program will stop: "
            )
            if overwrite_files.lower() == "y":
                break
            elif overwrite_files.lower() == "n":
                sys.exit()
            else:
                print('Wrong input')

    # Load feature extractor
    feature_extractor = feature_extractors.StridedInflatedEfficientNet()

    if resume:
        # load the last classifier
        checkpoint_classifier = torch.load(
            os.path.join(path_out, 'last_classifier.checkpoint'))
        checkpoint = torch.load(
            'resources/backbone/strided_inflated_efficientnet.ckpt')
        # Update original weights in case some intermediate layers have been finetuned
        name_finetuned_layers = set(checkpoint.keys()).intersection(
            checkpoint_classifier.keys())
        for key in name_finetuned_layers:
            checkpoint[key] = checkpoint_classifier.pop(key)
    else:
        checkpoint = torch.load(
            'resources/backbone/strided_inflated_efficientnet.ckpt')
Example #3
0
def init_model(transform):
    use_gpu = True
    inference_engine = None
    neural_network = None
    postprocessors = None

    if transform == 'gesture':
        # Load feature extractor
        feature_extractor = feature_extractors.StridedInflatedEfficientNet()
        feature_extractor.load_weights_from_resources(
            'backbone/strided_inflated_efficientnet.ckpt')
        feature_extractor.eval()

        # Load a logistic regression classifier
        gesture_classifier = LogisticRegression(
            num_in=feature_extractor.feature_dim, num_out=30)
        checkpoint = load_weights_from_resources(
            'gesture_detection/efficientnet_logistic_regression.ckpt')
        gesture_classifier.load_state_dict(checkpoint)
        gesture_classifier.eval()

        # Concatenate feature extractor and met converter
        neural_network = Pipe(feature_extractor, gesture_classifier)
        postprocessors = [
            PostprocessClassificationOutput(INT2LAB, smoothing=4)
        ]

    elif transform == 'fitness':
        weight = float(60)
        height = float(170)
        age = float(20)
        gender = 'female'

        # Load feature extractor
        feature_extractor = feature_extractors.StridedInflatedMobileNetV2()
        feature_extractor.load_weights_from_resources(
            'backbone/strided_inflated_mobilenet.ckpt')
        feature_extractor.eval()

        # Load fitness activity classifier
        gesture_classifier = LogisticRegression(
            num_in=feature_extractor.feature_dim, num_out=81)
        checkpoint = load_weights_from_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 = load_weights_from_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
        neural_network = Pipe(
            feature_extractor,
            feature_converter=[gesture_classifier, met_value_converter])

        postprocessors = [
            PostprocessClassificationOutput(INT2LAB, smoothing=8, indices=[0]),
            calorie_estimation.CalorieAccumulator(weight=weight,
                                                  height=height,
                                                  age=age,
                                                  gender=gender,
                                                  smoothing=12,
                                                  indices=[1])
        ]

    if neural_network is not None:
        inference_engine = InferenceEngine(neural_network, use_gpu=use_gpu)
        start_inference(inference_engine)

    return (inference_engine, postprocessors), None