자동 엔코더에 아핀 변환 포함

소개



지난번 의 계속입니다.
이전 기사에서는 이미지의 임의 점의 좌표 $(u, v)$를 입력으로 받아 이미지 값을 출력하는 신경망 모델을 구현했습니다.
이것을 오토엔코더의 디코더부로서 사용하는 것으로, 해상도에 의존하지 않는 화상 표현을 실시할 수 있습니다.
이번에는 이 디코더에 입력하는 좌표치에 아핀 변환을 적용하는 것을 생각합니다.
각 입력 이미지에 대해 적절한 아핀 변환 매개 변수를 사용할 수 있으면 이미지의 잠재 표현이 개선될 것으로 기대할 수 있습니다.

구현(github)

구현



이번에도 VAE를 베이스로 해, 인코더/디코더 모두 전 결합으로서 실장했습니다.
  • 인코더 출력 : 잠재 변수 $ z $의 평균/분산 + 아핀 변환 매개 변수
  • 디코더 입력 : 잠재 변수 $ z $ + 이미지의 좌표 값 $ (u, v) $

  • 됩니다.

    아핀 변환의 파라미터는
  • 스케일 계수 scale
  • 회전 각도 theta
  • 평행 이동량 (tx, ty)

  • 했다.
    디코더에 입력하는 좌표치 $(u, v) $에 이 아핀 변환을 적용해 두는 것으로, 확대/축소/회전/평행 이동된 화상이 디코더로부터 출력되는 것입니다.

    출력



    잠재 차원 수를 8로 하여 MNIST를 학습합니다.

    다음 단위 수로 실험합니다.
  • 인코더: [28*28 -> 512 -> 392 -> 256 -> 8+8+4]
  • 디코더: [2+8 -> 32 -> 64 -> 32 -> 1]
  • python3 train.py --gpu 0 --epoch 100 --batchsize 128 --model affine3x
    

    그리고 100 에포크 학습시킨 출력 결과가 아래와 같습니다.

    원본 데이터


    출력


    아핀 변환을 억제 한 원시 디코더 출력


    미묘한 차이입니다만, 잘 비교하면 원시 데이터에서는 크기나 각도가 갖추어져 있는 것을 알 수 있습니다.
    이 확대/축소, 회전 각도, 평행 이동량의 정보를 잠재 변수로부터 분리할 수 있었다는 것입니다.
    잠재 변수 손실 (gaussian_kl_divergence)의 최종 값을 보면,

    아핀 변환 있음"main/z_loss": 1.8669424057006836,
    아핀 변환 없음"main/z_loss": 2.214595079421997,
    되어 있어 잠재 표현이 향상되고 있는 것을 확인할 수 있습니다.

    좋은 웹페이지 즐겨찾기