Как применять ZCA Отбеливание при выводе CNN? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь осуществить отбеливание ZCA для маленькой CNN.Входные данные будут 72x72x3 (HWC) BGR-изображения.

Пока что моя функция отбеливания от Pascal Timshels отвечает на ZCA-отбеливание :

def zca_whitening_matrix(X):
  """
  Function to compute ZCA whitening matrix (aka Mahalanobis whitening).
  INPUT:  X: [M x N] matrix.
    Rows: Variables
    Columns: Observations
  OUTPUT: ZCAMatrix: [M x M] matrix
  """
  # Covariance matrix [column-wise variables]: Sigma = (X-mu)' * (X-mu) / N
  sigma = np.cov(X, rowvar=True) # [M x M]
  # Singular Value Decomposition. X = U * np.diag(S) * V
  U,S,V = np.linalg.svd(sigma)
    # U: [M x M] eigenvectors of sigma.
    # S: [M x 1] eigenvalues of sigma.
    # V: [M x M] transpose of U
  # Whitening constant: prevents division by zero
  epsilon = 1e-6
  # ZCA Whitening matrix: U * Lambda * U'
  ZCAMatrix = np.dot(U, np.dot(np.diag(1.0/np.sqrt(S + epsilon)), U.T)) # [M x M]
  return ZCAMatrix

Для изображенияВ процессе предварительной обработки я делаю следующее:

data = data / 255.0 # data.shape = (batch_size, H * W * C)
data_norm = data - data.mean(axis=0)
ZCA_M = zca_whitening_matrix(data_norm)
xZCA = np.dot(ZCA_M, data_norm)
xZCA = (xZCA - xZCA.min()) / (xZCA.max() - xZCA.min())

Теперь этот код работает для пакетов в обучении.Насколько я понимаю, каждый рассчитывает матрицу отбеливания zca для всего обучающего набора и отбеливает все данные.

Поскольку эта матрица зависит от размера пакета, как применить эту матрицу к выводу позже (точно для одногокартина) ?Я просто усредняю ​​это?Или я здесь неправильно понимаю что-то фундаментальное ...

Спасибо за ответы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...