computational imaging

J. Hwang·2024년 9월 2일

computational imaging은 이미지 및 비디오를 획득하고 처리하는 방식을 개선하기 위해 컴퓨팅 기술을 사용하는 것이다. 이를 활용하면 low light image enhancement, denoising, super-resolution, deblurring, high dynamic range imaging, stylization, colorization 등의 응용이 가능하다.

computational imaging의 과정을 개괄적으로 살펴보면 (품질이 좋지 않은) image를 input으로 넣고, model에 통과시켜서 (Deep Neural Network 등 사용) 이미지를 복원한 후, ground-truth image와의 loss를 계산해서 학습시킨다.

아래의 항목들은 computational imaging을 수행하기 위해 각 케이스 별로 데이터를 만드는 방법들을 나열한다.

Image Denoising

보통은 Gaussian noise를 가정한다. 원본 이미지에 Gaussian noise를 일부러 가미하여 원본 이미지에서 noise를 제거하는 방법을 학습시킨다.
y=x+ny = x + n
이 때 nn은 Gaussian noise로써 nn~N(0,σ2)N(0, \sigma^2)

Super resolution

low resolution을 high resolution으로 복원하는 기술. 카메라의 구조를 보면 알겠지만 focal length를 조절하면 배율 (얼마나 확대되는지) 을 조절할 수 있다. 같은 대상에 대해 배율을 다르게 한 이미지를 촬영하여 low resolution sample과 high resolution sample로 만들어서 resolution을 향상시키는 방법을 학습시킨다.

Deblurring

blurring에는 두 가지가 있는데 하나는 카메라 혹은 피사체가 움직이면서 발생하는 blurring이고 다른 하나는 렌즈의 초점이 잘못 맞춰져서 생기는 blurring이다.
blur kernel이라는 convolution filter를 이용하여 blur된 이미지를 생성 후 blur를 처리하는 방법을 학습시킨다. 혹은 sharp image를 시간에 따라 accumulate한 것을 blur image로 만들기도 한다. blur kernel을 이용한 경우에는 배경까지도 같이 blur 처리 되는데 비해 sharp image를 accumulate 하는 방식은 피사체만 blur 처리가 된다.

Video motion magnification

영상에서의 움직임을 확대하는 것이다. frame t에서의 위치를 xx라 했을 때 frame t+1에서는 위치가 xx + Δ\DeltaΔ\Delta만큼 변할 것이다. 이 때 움직임을 확대하기 위해 factor α\alpha를 곱해준다. 따라서 magnified frame에서는 위치가 xx + αΔ\alpha\Delta가 될 것이다.


On-demand learning

⚠️ Fixation problem
고정된 정도로만 이미지를 변형시켜 학습시키면 쉬운 작업임에도 불구하고 성능이 나오지 않을 수 있다. overfitting과 유사한 문제이다.

따라서 전략적으로 이미지를 학습시켜야 한다. 그 중 하나가 on-demand learning이다.

  1. 난이도에 따라서 N개의 subtask로 분리한다.
  2. N개의 subtask에 대해서 학습을 진행한다. (난이도 하 → 난이도 상)
  3. 각 epoch마다 각 task의 PSNR을 측정한다.
  4. 그 결과 모델이 특정 난이도에서 잘 되고 안 되고를 파악하고 그를 바탕으로 각 task마다 어느 정도의 sample을 구성할지 결정하고 컨트롤한다. 이렇게 하면 모델이 못 하는 것도 점차 잘 하는 방향으로 학습시킬 수 있다.

Loss function

가장 기본적으로는 pixelwise distance를 이용하여 유사도를 측정하는 L2 loss function 혹은 L1 loss function을 사용한다. 그러나 단순히 L2/L1 loss function 값이 작다고 해서 바람직한 결과를 내는 것은 아니다. 따라서 보다 사람의 관점과 유사한, 바람직한 결과를 낼 수 있는 loss function을 사용할 필요가 있다.

Adversarial Loss

Adversarial Loss를 이해하기 위해서는 먼저 Generative Adversairal Network(GAN)에 대해서 이해해야 한다. GAN은 generator와 discriminator로 구성된다. generator에서 fake data를 만들어내고, discriminator에서는 이 데이터가 fake인지 real인지 구분한다. generator는 discriminator를 속일 수 있도록 더 리얼한 데이터를 만드는 방향으로 학습하고, discriminator는 가짜를 구분할 수 있도록 철저히 학습한다. 이 때 학습에 사용되는 것이 adversarial loss이다.

Perceptual Loss

real-time style transfer와 super-resolution 케이스에서 활용하는 loss function으로, pre-trained classifier의 filter는 사람의 perception과 유사하다는 가정을 이용한 것이다. feature reconstruction loss와 style reconstruction loss 등이 있다.
feature reconstruction loss는 network에서 출력으로 나온 transformed image와 groundtruth target을 pretrained loss network에 통과시켜서 결과로 나온 두 feature map이 동일해야한다는 것을 기준으로 측정하게 된다. (L2 or L1 loss 이용)
style reconstruction은 style target과 transformed image를 pre-trained loss network에 통과시켜서 나온 feature map을 gram metrices라고 하는 것으로 변형시켜 준 후에 gram matrix 상에서 loss를 측정한다.


Extension to video

위에서 배운 이미지 처리 기법을 영상에 적용할 수 있는 방법을 알아보자.
이미지를 frame-by-frame으로 독립적으로 processing해서 재생하면 영상을 만들 수 있기는 하지만, 시간축으로 일관되지 않고 깜빡깜빡 거리는 모습으로 나타난다. (→ flickering problem)
이 때 아래와 같은 기법을 이용하면 시간축으로 smooth하게 움직이는 영상을 얻을 수 있다.
perceptual loss, short term/long term temporal loss를 합쳐 학습한다.

profile
Let it code

0개의 댓글