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)
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')
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