Search
💗

DeblurGANv2(ICCV 2019)

Abstract

DeblurGAN-v2라는 single image motion deblur를 위한 새로운 end-to-end GAN을 제시하며, 이는 최첨단 디블러링 효율성, 품 및 유연성을 상당히 향상시킵니다.
DeblurGAN- v2는 double-scale discriminator가 있는 relativistic conditional GAN을 기반으로 한다.
처음으로, 우리는 DeblurGAN-v2 Generator의 핵심 빌딩 블록으로 Feature pyramid network(FPN)을 deblurring에 도입했습니다.
그것은 성능과 효율성 사이의 균형을 탐색하기 위해 다양한 백본으로 유연하게 작동할 수 있다.
sophisticated 백본(예: Inception-ResNet-v2)의 플러그인은 최첨단 디블러링으로 이어질 수 있다.
한편, 가벼운 백본(예: MobileNet 및 그 변형 )을 통해 DeblurGAN-v2는 가장 가까운 경쟁사보다 10-100배 빠르게 도달하며, 최첨단 결과를 유지하면서 실시간 비디오 블러를 제거함을 의미한다.
우리는 DeblurGAN-v2가 deblurring 품질과 효율성 측면에서 여러 인기 있는 벤치마크에서 매우 경쟁력 있는 성과를 얻는다는 것을 보여줍니다. 게다가, 우리는 일반적인 이미지 복원 작업에도 효과적이라는 것을 보여준다.

Introduction

사람이 들고 찍는 카메라 / 움직이는 객체 찍은 low frame rate videos
real world blurs : unknown, spatially varying blur kernels, further complicated by noise or other artifacts
GAN의 여러 복원분야에서의 뛰어난 성능
v1성능 좋앗음
v2에서 deblurring 뛰어난 성능과 함께 효율적인 inference 에 집중

innovations

Framework Level
새로운 cGAN framework
generator로 FPN 적용 - 원래 detection에서 사용되던 것으로, image restoration에 적용한 것은 처음
FPN
discriminator로는
내부에 least-square loss가 적용된 relativistic discriminator
global (image) 와 local(patch)를 모두 평가하는 두 열이 있는 relativistic discriminator
채택
Backbone Level
위의 프레임워크는 Generator backbone에 구애받지 않지만, 선택은 deblurring quality과 효율성에 영향을 미칠 것이다.
SOTA deblurring quality를 뒤쫓기 위해 정교한 Inception-ResNet-v2backbone을 적용해봤다
더 효율적이기 위해 MobileNet을 적용하고 더 나아가 그것의 depth-wise separable convolutions로 ( MobileNet-DSC) 변형을 생성했다 → extremely compact in size, fast in inference
Experiment Level
광범위한 실험 수행
세개의 유명한 벤치마크로 SOTA performance보여줌. PSNR, SSIM, perceptual quality
효율성면에서 MobileNet-DSC를 적용한 DeblurGANv2는 DeblurGAN보다 11배 빠르고 [33(DeepDeblur), 45(SRN_Deblur)]보다는 100배 빠르며 모델사이즈는 4MB밖에 되지 않는다. → 실시간 비디오 deblurring의 가능성을 보여준다
우리는 또한 실제 흐릿한 이미지에 대한 deblurrng subjective 연구를 제시합니다.
마지막으로, 우리는 extra flexibility로 일반적인 이미지 복원에서 모델의 잠재력을 보여줍니다.

Related work

2.1. Image Deblurring

2.2. GAN

latent code zz 뿐 아니라 observed image도 input으로 함께 받는 cGAN
D → fake 0, real 1
mode-collapse나 gradient vanishing/explosion때문에 최적화가 어려운 GAN 의 일반적인 Loss ( MinMaxLoss)
vanishing gradients를 고치고 학습을 안정화시키기 위해 Least Squares GANs discriminator가 smoother and non-saturating gradient를 제공하기 위한 loss를 제안했다.
⇒ log type loss는 빠르게 saturate한다 왜냐면 x와 decision boundary 사이의 거리를 고려하지 않기 때문이다. 대조적으로 L2 Loss는 그 distance에 대해 비례하는 gradient를 제공하므로 boundary에서 더 멀리 떨어진 fake samples는 더 큰 penalties를 받는다
제안된 loss function은 Pearson χ2\chi^2 divergence 또한 최소화한다. 그리고 그것은 training stability를 더 낫게 한다.
LSGAN의 objective function
간단하게 LSGAN의 목적은 pg+pdatap_g+p_{data} ( g가 근사하는 분포, data 분포의 합)와 2pg2p_g 사이의 Pearson χ2\chi^2 divergence를 최소화 하는 것. 궁극적으로는 기존의 GAN의 방향과 동일하다
GAN의 또 다른 관련 발전은 Relativistic GAN
relativistic discriminator는 주어진 real data가 얼마나 randomly sampled fake data보다 realistic한지 확률을 측정
mini batch에 포함된 데이터의 절반이 fake라는 priori knowledge를 설명할 수 있음
relativistic discriminators는 DeblurGAN v1에 쓰였던 WGAN-GP를 포함한 다른 GAN과 비교해 학습에 있어 더 안정적이고 계산적으로도 효율적이라는 것을 보여준다.

3. DeblurGAN-v2-architecture

IBI_B(blurred image) → G → ISI_S( sharp iimage )

3.1. Feature Pyramid Deblurring

deblurring 혹은 다른 task들을 위한 CNN들은 대부분 ResNet-like 구조
대부분의 SOTA 방법들은 다른 level의 blurs를 다루고, 다른 scale의 input image pyramid 로 multi-stream CNNs를 이용했다
이는 시간과 메모리가 많이 필요함
FPN을 image deblurring(더 일반적으로는 restoration, enhancement)에 사용하는 아이디어를 소개하며, 처음 시도로 알고있다
이 새로운 접근을 여러 scale의 features를 결합하기위한 lighter weight alternative 로 다룬다
FPN은 원래 detection을 위해 디자인됐다
여러개의 피쳐맵레이어를 생성한다. 다른 semantics를 encode하고 더 좋은 퀄리티의 정보를 포함한.
FPN
우리의 아키텍쳐는 FPN 백본을 포함한다. 다른 스케일의 5개의 마지막 피쳐맵을 그로부터 가져온다
그 피쳐들은 나중에 1/4 input size로 업샘플되고 다른 levels에서 semantic information을 포함한 하나의 텐서로 합쳐진다(concatenated)
우리는 추가적으로 두개의 업샘플링 그리고 conv 레이어들을 추가한다 네트워크 끝에→ 원래 사이즈로 복원하고 artifacts를 줄이기 위해
input에서 output으로의 direct skip connection도 적용해 학습이 residue에 집중할 수 있도록 함
input image들은 [-1 1]로 normalize된다.
또한 tanh activation layer를 통해 output도 같은 range로 보존한다.
multi-scale feature aggregation 기능 외에도, FPN은 정확도와 속도 사이의 균형을 맞춥니다: 실험 부분을 참조하십시오.

3.2. Choice of Backbones : Trade-off between Performance and Efficiency

new FPN-embeded architecture은 feature extractor 백본 선택에 관대하다
default로 ImageNet-pretrained backbones를 사용해 더 semantic-related features를 뽑아냈다
하나의 옵션으로 Inception-ResNet-v2를 사용했다
또한 SE-ResNeXt같은 백본들도 비슷하게 효과적이었다
효율적인 복원 모델의 요구는 최근 모바일 온디바이스 이미지 향상의 일반적인 필요성으로 인해 점점 더 많은 관심을 끌었다.
이 방향의 예로 삼기위해 MobileNet v2 백본을 하나의 옵션으로 선택
depthwise separable conv로 전체네트워크를 대체해 시도했고 이는 MobileNet-DSC로 표시. 매우 가볍고 효율적인 image deblurring

3.3. Double-Scale RaGAN-LS Discriminator

LSGAN의 cost function에 relativistic “wrapping”을 적용해 새로운 RaGAN-LS loss를 적용했다
G에 대해 이 식을 최적화시키는 방향으로 학습된다
WGAN-GP objective를 사용하는 것보다 학습을 특히 더 빠르고 더 안정적이게 만들었다.
경험적으로 생성된 결과가 더 높은 perceptual quality를 포함하며 전체적으로 더 sharp한 output을 만들어낸다고 결론지었다
Extending to Both Global and Local Scales
70x70크기의 patch를 다루는 PatchGAN은 더 sharper한 result를 생성한다는 것을 증명했다(full image를 보는 discriminator보다)
parchGAN 아이디어는 DeblurGAN에 적용되었었다
그러나 우리는 매우 non-uniform blurred된 이미지에는 특히 복잡한 객체의 움직임이 포함됐을 경우에는 “global” scales가 여전히 필수다라는 것을 알았다
global and local features모두를 사용하기위해 double-scale discriminator를 제안한다
하나의 local branch( 패치 레벨을 다룸 )과 또 다른 global branch( full input image를 받는 )로 이뤄져있다
Overall Loss Function
이미지 복원 GAN을 학습시키기 위해, training단계에서 어떠한 metric으로 복원된이미지와 원래 이미지를 비교해야 한다.
하나의 보통의 옵션은 pixel-space loss LPL_P 이다. ( L1 distance혹은 L2 distance )
이것을 사용하는 것은 oversmoothened pixel space output을 야기하는 경향이 잇다.
perceptual distance를 “content” lossLX L_X로 사용하는 것을 제안
L2에 비교하여 VGG19의 conv3_3 featuremap에서 유클리디안 loss를 계싼
우리는 이 prior wisdoms를 통합
LadvL_{adv} : global and local discriminator losses를 포함
LPL_P : MSE loss - color와 texture 왜곡을 보정하는 것을 돕는다
좀 더 이해하기 위해 코드를 살펴봤다
train.py에서 self.criterionG, criterionD = get_loss(self.config['model']) 이렇게 loss를 가져오고, 저 get_loss함수는 return content_loss, disc_loss 논문대로라면 content_loss는 PerceptualLoss클래스로 정의되고, 이 클래스의 get_loss함수는 ( 클래스 함수 ) loss = fake와 real의 vgg19 conv3_3에서의 featuremap 출력끼리의 MSELoss()결과 return 0.006 * torch.mean(loss) + 0.5 * nn.MSELoss()(fake, real) 이후 train.py Trainer 클래스의 _run_epoch함수에서 loss_content = self.criterionG(outputs, targets) loss_adv = self.adv_trainer.loss_g(outputs, targets) loss_G = loss_content + self.adv_lambda * loss_adv 이렇게되면서 논문의 식과 같아진다 self.adv_trainer = self._get_adversarial_trainer(self.config['model']['d_name'], netD, criterionD) double_gan이 default -> return GANFactory.create_model('DoubleGAN', net_d, criterion_d) DoubleGAN의 loss_g함수는 return (self.criterion.get_g_loss(self.patch_d, pred, gt) + self.full_criterion.get_g_loss(self.full_d, pred,gt)) / 2 RelativisticDiscLoss에서 get_g_loss는 errG = (torch.mean((self.pred_real - torch.mean(self.fake_pool.query()) + 1) ** 2) + torch.mean((self.pred_fake - torch.mean(self.real_pool.query()) - 1) ** 2)) / 2 return errG 로 real과 fake의 Least Square error를 반환한다. loss_G는 이렇게 논문의 식과 같아진다! disc_loss는 논문대로라면 RelativisticDiscLossLS() 클래스로 정의되어야한다 이후 Trainer 클래스 _update_d 함수에서 loss_D = self.adv_lambda * self.adv_trainer.loss_d(outputs, targets) DoubleGAN의 loss_d함수는 return (self.criterion(self.patch_d, pred, gt) + self.full_criterion(self.full_d, pred, gt)) / 2 patch_d로 정의된 patch discriminatorsms RelativisticDiscLossLS로 들어가 patch_d의 예측을 기반으로 self.loss_D = (torch.mean((self.pred_real - torch.mean(self.fake_pool.query()) - 1) ** 2) + torch.mean((self.pred_fake - torch.mean(self.real_pool.query()) + 1) ** 2)) / 2 return self.loss_D 이렇게 patch D에서의 least square error 그리고 full discriminator도 self.full_criterion = copy.deepcopy(criterion) 이기 때문에 같은 값이지만 full image를 보는 full D에서의 예측값을 기반으로 계산한 값을 반환한다. 그래서 결국에 loss_D는 adv_lambda라는 작은 값 (default 0.001)이 곱해진 patchD와 fullD의 LS loss값의 합을 return하게되며 이는 논문의 설명과 같다
Python
복사

3.4. Training Datasets

4. Experimental evaluation

4.1. Implementation Details

Tesla-P100
150epoch lr 10e-4, 그 후 150epoch 동안은 lr이 linear하게 10e-7까지 줄어듬
3epoch동안 backbone freeze 후에 모든 weight unfreeze해서 다시 training
unpretrained 부분은 random gaussian 으로 초기화
수렴까지 5일걸림
모델은 모두 convolutional이라서 사이즈가 다른 이미지에 적용가능합니다

Subjective Evaluation on Lai Dataset

Lai dataset은 서로 다른 퀄리티와 해상도의 현실세계의 블러된 이미지들이 모여있어서 이 real images는 clean/sharp 부분이 없다. 따라서 full-reference quantitiv evaluation 이 불가능하다.
실제 이미지들에서 성능을 비교하기 위해 다음 subjective survey를 수행했다.
점수를 매기기 위해 Bradly-Terry model을 적용했다고 한다