コード例 #1
0
    def evaluate(self, batch_size):

        if self.train_generator.n_validation > 0:
            keypoint_generator = self.train_generator(n_outputs=1,
                                                      batch_size=batch_size,
                                                      validation=True,
                                                      confidence=False)

        elif self.train_generator.n_validation == 0:
            warnings.warn(
                "`n_validation` is 0, so the training set will be used for model evaluation"
            )
            keypoint_generator = self.train_generator(n_outputs=1,
                                                      batch_size=batch_size,
                                                      validation=False,
                                                      confidence=False)
        y_pred_list = []
        confidence_list = []
        y_error_list = []
        euclidean_list = []
        for idx in range(len(keypoint_generator)):
            X, y_true = keypoint_generator[idx]

            y_pred = self.predict_model.predict_on_batch(X)
            confidence_list.append(y_pred[..., -1])
            y_pred_coords = y_pred[..., :2]
            y_pred_list.append(y_pred_coords)

            errors = keypoint_errors(y_true, y_pred_coords)
            y_error, euclidean, mae, mse, rmse = errors
            y_error_list.append(y_error)
            euclidean_list.append(euclidean)

        y_pred = np.concatenate(y_pred_list)
        confidence = np.concatenate(confidence_list)
        y_error = np.concatenate(y_error_list)
        euclidean = np.concatenate(euclidean_list)

        evaluation_dict = {
            "y_pred": y_pred,
            "y_error": y_error,
            "euclidean": euclidean,
            "confidence": confidence,
        }

        return evaluation_dict
コード例 #2
0
    def evaluate(self, batch_size):

        if self.data_generator.n_validation > 0:
            keypoint_generator = self.data_generator(n_outputs=1,
                                                     batch_size=batch_size,
                                                     validation=True,
                                                     confidence=False)

        elif self.data_generator.n_validation == 0:
            warnings.warn(
                "`n_validation` is 0, so the training set will be used for model evaluation"
            )
            keypoint_generator = self.data_generator(n_outputs=1,
                                                     batch_size=batch_size,
                                                     validation=False,
                                                     confidence=False)

        metrics = []
        keypoints = []
        for idx in range(len(keypoint_generator)):
            X, y_true = keypoint_generator[idx]
            y_pred = self.predict_model.predict_on_batch(X)
            y_pred = y_pred[..., :2]
            errors = keypoint_errors(y_true, y_pred)
            y_error, euclidean, mae, mse, rmse = errors
            confidence = y_pred[..., -1]
            metrics.append([euclidean, mae, mse, rmse, confidence])
            keypoints.append([y_pred, y_error])

        metrics = np.hstack(metrics)
        keypoints = np.hstack(keypoints)

        euclidean, mae, mse, rmse, confidence = metrics
        y_pred, y_error = keypoints

        evaluation_dict = {
            "y_pred": y_pred,
            "y_error": y_error,
            "euclidean": euclidean,
            "mae": mae,
            "mse": mse,
            "rmse": rmse,
            "confidence": confidence,
        }

        return evaluation_dict