def from_raw_file(cls, model_filename, additional_model_dict, logger): """ Construct from raw libsvm model file. :param model_filename: :param additional_model_dict: must contain keys feature_names, norm_type and optional slopes and intercepts :param logger: :return: """ # assert additional_model_dict assert 'feature_names' in additional_model_dict assert 'norm_type' in additional_model_dict norm_type = additional_model_dict['norm_type'] assert norm_type == 'none' or norm_type == 'linear_rescale' if norm_type == 'linear_rescale': assert 'slopes' in additional_model_dict assert 'intercepts' in additional_model_dict train_test_model = cls(param_dict={}, logger=logger) train_test_model.model_dict.update(additional_model_dict) model = svmutil.svm_load_model(model_filename) train_test_model.model_dict['model'] = model return train_test_model
def from_raw_file(cls, model_filename, additional_model_dict, logger): """ Construct from raw libsvm model file. :param model_filename: :param additional_model_dict: must contain keys feature_names, norm_type and optional slopes and intercepts :param logger: :return: """ # assert additional_model_dict assert 'feature_names' in additional_model_dict assert 'norm_type' in additional_model_dict norm_type = additional_model_dict['norm_type'] assert norm_type == 'none' or norm_type == 'linear_rescale' if norm_type == 'linear_rescale': assert 'slopes' in additional_model_dict assert 'intercepts' in additional_model_dict train_test_model = cls(param_dict={}, logger=logger) train_test_model.model_dict.update(additional_model_dict) model = svmutil.svm_load_model(model_filename) train_test_model.model_dict['model'] = model return train_test_model
def _from_info_loaded(cls, info_loaded, filename, logger, optional_dict2): # override TrainTestModel._from_info_loaded train_test_model = cls( param_dict={}, logger=logger, optional_dict2=optional_dict2) train_test_model.param_dict = info_loaded['param_dict'] train_test_model.model_dict = info_loaded['model_dict'] if issubclass(cls, LibsvmNusvrTrainTestModel): # == special handling of libsvmnusvr: load .model differently == model = svmutil.svm_load_model(filename + '.model') train_test_model.model_dict['model'] = model return train_test_model
def from_file(cls, filename, logger=None, optional_dict2=None): with open(filename, 'rb') as file: info_loaded = pickle.load(file) model_type = info_loaded['model_dict']['model_type'] model_class = TrainTestModel.find_subclass(model_type) train_test_model = model_class(param_dict={}, logger=logger, optional_dict2=optional_dict2) train_test_model.param_dict = info_loaded['param_dict'] train_test_model.model_dict = info_loaded['model_dict'] if issubclass(model_class, LibsvmNusvrTrainTestModel): # == special handling of libsvmnusvr: load .model differently == model = svmutil.svm_load_model(filename + '.model') train_test_model.model_dict['model'] = model return train_test_model
def _run_on_asset(self, asset): # Override Executor._run_on_asset(self, asset), which runs a # FeatureAssembler, collect a feature vector, run # TrainTestModel.predict() on it, and return a Result object # (in this case, both Executor._run_on_asset(self, asset) and # QualityRunner._read_result(self, asset) get bypassed. vmaf_fassembler = self._get_vmaf_feature_assembler_instance(asset) vmaf_fassembler.run() feature_result = vmaf_fassembler.results[0] # ===================================================================== try: svmutil except NameError: from vmaf import svmutil # SVR predict model = svmutil.svm_load_model(self.SVM_MODEL_FILE) ordered_scaled_scores_list = [] for scores_key in self.SVM_MODEL_ORDERED_SCORES_KEYS: scaled_scores = self._rescale( feature_result[scores_key], self.FEATURE_RESCALE_DICT[scores_key]) ordered_scaled_scores_list.append(scaled_scores) scores = [] for score_vector in zip(*ordered_scaled_scores_list): vif, adm, ansnr, motion = score_vector xs = [[vif, adm, ansnr, motion]] score = svmutil.svm_predict([0], xs, model)[0][0] score = self._post_correction(motion, score) scores.append(score) result_dict = {} # add all feature result result_dict.update(feature_result.result_dict) # add quality score result_dict[self.get_scores_key()] = scores return Result(asset, self.executor_id, result_dict)
def from_file(cls, filename, logger=None, optional_dict2=None): with open(filename, 'rb') as file: info_loaded = pickle.load(file) model_type = info_loaded['model_dict']['model_type'] if model_type == LibsvmNusvrTrainTestModel.TYPE: train_test_model = LibsvmNusvrTrainTestModel( param_dict={}, logger=logger, optional_dict2=optional_dict2) train_test_model.param_dict = info_loaded['param_dict'] train_test_model.model_dict = info_loaded['model_dict'] # == special handling of libsvmnusvr: load .model differently == model = svmutil.svm_load_model(filename + '.model') train_test_model.model_dict['model'] = model else: model_class = TrainTestModel.find_subclass(model_type) train_test_model = model_class( param_dict={}, logger=logger, optional_dict2=optional_dict2) train_test_model.param_dict = info_loaded['param_dict'] train_test_model.model_dict = info_loaded['model_dict'] return train_test_model
def _run_on_asset(self, asset): # Override Executor._run_on_asset(self, asset), which runs a # FeatureAssembler, collect a feature vector, run # TrainTestModel.predict() on it, and return a Result object # (in this case, both Executor._run_on_asset(self, asset) and # QualityRunner._read_result(self, asset) get bypassed. vmaf_fassembler = self._get_vmaf_feature_assembler_instance(asset) vmaf_fassembler.run() feature_result = vmaf_fassembler.results[0] # ===================================================================== # SVR predict model = svmutil.svm_load_model(self.SVM_MODEL_FILE) ordered_scaled_scores_list = [] for scores_key in self.SVM_MODEL_ORDERED_SCORES_KEYS: scaled_scores = self._rescale(feature_result[scores_key], self.FEATURE_RESCALE_DICT[scores_key]) ordered_scaled_scores_list.append(scaled_scores) scores = [] for score_vector in zip(*ordered_scaled_scores_list): vif, adm, ansnr, motion = score_vector xs = [[vif, adm, ansnr, motion]] score = svmutil.svm_predict([0], xs, model)[0][0] score = self._post_correction(motion, score) scores.append(score) result_dict = {} # add all feature result result_dict.update(feature_result.result_dict) # add quality score result_dict[self.get_scores_key()] = scores return Result(asset, self.executor_id, result_dict)