파이썬으로 Homomorphic Filtering 하기
import cv2 # For OpenCV modules (For Image I/O and Contour Finding) import numpy as np # For general purpose array manipulation import scipy . fftpack # For FFT2 #### imclearborder definition def imclearborder ( imgBW , radius ): # Given a black and white image, first find all of its contours imgBWcopy = imgBW . copy () contours , hierarchy = cv2 . findContours ( imgBWcopy . copy (), cv2 . RETR_LIST , cv2 . CHAIN_APPROX_SIMPLE ) # Get dimensions of image imgRows = imgBW . shape [ 0 ] imgCols = imgBW . shape [ 1 ] contourList = [] # ID list of contours that touch the border # For each contour... for idx in np . arange ( len ( contours )): # Get the i'th contour cnt = contours [ idx ] # Look at each point in the contour for pt in cnt : rowCnt = pt [ 0 ][ 1 ] colCnt = pt [ 0 ][ 0 ] # If this is within the radius of th...

몇가지 다른 알고리즘과 비교할때 성능이 좋게 나온다.
답글삭제( aCAE = adversarial Convolutional AutoEncoder, Pd = DCGAN, GANr = Reference GAN )
학습 절차:
답글삭제먼저 내부의 max V(D,G)란 최종 출력값 V를 최대로 하는 D를 선정한다.
그러니까 G는 일단 고정시켜 놓은 상태에서 D를 변화시키면서 그중에서 V를 최대로 하는 놈을 선택하는 것이다.
다른 말로 표현하면 G를 고정시킨 상태에서 D를 고른(학습한)다.
+로 결합된 위의 식에서 +의 왼쪽은 D(x)를 High(확률label=1)로 학습하고, 오른쪽은 D(G(x))를 0으로 학습하는 것이다.
다음으로 min부분을 보면 이번에는 D를 고정시키고 V(D,G)를 최소로 하는 G를 고른(학습한)다.
이번에는 D를 고정하는 것이므로 +표시로 연결된 두개의 항중에서
왼쪽은 신경쓰지 말고 오른쪽을 최소로 하는 걸 고른(학습한)다.
이러한 방식으로 min max를 번갈아 가면서 계속 수행한다.(번갈아 가면서 라는 방식은 수식에 나타나지 않는다.)
LSGAN은 기존GAN의 likelihood방식을 사용하지 않고 MSE를 사용한다.
답글삭제MSE를 사용할 경우 특징은 마지막 Layer에 sigmoid같은 놈을 사용할 필요가 없다는 것이다.
그래서, 기존의 GAN보다 성능이 많이 좋아졌다고 하는데...
외계인은 수시로 출몰한다.
Semi Supervised GAN(SGAN), Auxiliary Class GAN(ACGAN), Conditional GAN(CGAN), InfoGAN ...
답글삭제Latent Variable만을 가지고 학습을 시킬때 발생하는 문제가 mode가 고르게 분포되어 학습되지 않고,
붕괴되어 단지 몇가지 종류만 학습이 이루어지고 나머지는 외계인이 된다는 것이다. (Mode Collapse)
모드가 붕괴되어 몇가지로 뭉치지 않고 고루 흩어질 수 있도록 강제시키는 방법으로 사용하는 것이 Latent Variable외에
다른 정보를 Latent Variable에 Attach시키는 방법이다.
이 방식도 여러가지로 연구가 되어서 방식이 아래처럼 다양한다.
갠 모델 수식이 수렴한다는걸 수학적으로 증명이 가능하다고 한다.
답글삭제beGAN by TF: https://github.com/carpedm20/BEGAN-tensorflow.git
답글삭제구글이 만듬, 현재까진 언니들 얼굴이 가장 깨끗하다.
Network을 구성할때 G와 D의 용량이 잘 균형을 이뤄야 한다.
삭제기존 GAN은 D가 쉽게 이기는 경향이 있는데, 이걸 해결하기 위해
Equilibrium 컨셉을 도입하도록 한 것이다.
갠의 문제점들:
답글삭제지금까지 발표된 GAN의 문제점을 나열해 보면
1) 학습이 너무 어렵다. 그래서 많은 trick이 제시되었지만 그래도 어렵다.
2) 학습 환경 설정을 위한 parameter를 선택하는 것도 중요하다.
3) 생성된 이미지의 분포를 조절하는 것이 어렵다.
4) Discriminator와 Generator의 수렴속도를 조절하는 것도 어렵다. (D가 학습초기에 너무 쉽게 이겨 버리는 문제 !)
5) 모델이 뭉쳐버리는 문제
6) Regularizer를 사용하는 방식으로 위의 문제를 아주 조금 경감시킬수는 있다.
BeGAN 의 특징들:
답글삭제BEGAN은 다음과 같은 업적을 이루었다.
1) 단순하지만 강인한 아키텍쳐를 가지고 있고, 빠르고 안정적으로 수렴하는 표준 학습절차를 제시한다.
2) Discriminator의 힘이 Generator와 균형을 이루는 평형상태 개념을 도입했다.
3) 이미지의 다양성과 Visual Quality를 Trade-Off로 조정할 수 있다.
4) 수렴여부를 근사적으로 측정할 수 있다. (지금까지 유일하게 WGAN에서 측정법이 제시된 적이 있다.)
DCGAN이 이미지에 최초 적용되고,
답글삭제Discriminator를 에너지함수의 형태로 모델링한 EBGAN이 발표되었다.
EBGAN은 안정적으로 수렴하고, 학습이 쉬울뿐아니라 학습환경설정(hyper-parameter)에도 강인한 특성을 보였다.
(지금까지 발표된 GAN중에서 Google이 인정하는 GAN은 EBGAN ?)
삭제EBGAN은 Discriminator를 AutoEncoder로 구현하였다.
WGAN은 수렴을 측정하는 수단을 적용하였고, 학습속도는 느리지만, 안정적이고 Mode Coverage도 좋다.
답글삭제SimGAN:
답글삭제Apple 에서 나온 최초의 논문이다. ( 2016년 12월 )
이제는 Apple도 논문을 공개하기로 한 건가?
그래픽 분야의 진보로, 값비싼 Label을 만들지 않고, simulation에 의해 synthetic image로 학습을 진행할 수 있게 되었다.
하지만 합성 이미지로는 원하는 성능을 내기 힘들수 있다.
이러한 Gap을 줄이기 위해 Simulated+Unsupervised (S+U) 러닝을 소개한다.
이 모델의 목적은 simulation으로 만들어낸 data의 품질을 실제이미지 처럼 높이는 것이다.
당근 Label에 해당하는 정보는 유지된다. 합성이미지를 입력으로 사용한다.
개발이 끝난 BeGAN-pyTorch:
답글삭제https://github.com/HiiYL/BEGAN-PyTorch.git