Pixel-wise implicit neural representation for video 모델인 NVP에서, 압축 성능을 향상시킬 수 있는 새로운 아이디어를 생각해내야 한다... '압축 성능'이라 하면, 결국 어느 정도의 PSNR score를 유지하며 BPP 값을 최대한 떨어뜨려야 한다. 물론 동일한 BPP 값, 즉 같은 parameter 수로 더 높은 PSNR score를 얻어낼 수도 있겠지만, PSNR score는 어느 정도 수준으로 수렴할 것이기 때문에 모델의 parameter 수를 최소화하는 것이 핵심이겠다.
그럼 모델을 하나씩 뜯어가며 개선사항이 있을지 생각해보자고.
차원의 2D latent code는 -level multi-resolution structure로 구성되어 있다. 논문에서는 으로 설정하였으므로 , , ..., 개의 latent code들이 존재하며, 각 layer에서의 latent vector는 가장 인접한 이들을 linearly interpolate하여 구한다. 이런 2D grid가 xy, xt, yt 각각의 평면에 대해 정의되는 것이고.
1. 2D latent grid를 size로 크게 하나만 정의해두고 (혹은 ) latent vector는 해당 grid의 latent code를 선택적으로 사용하여 구한다면 multi-layer로 구성하지 않아도 되지 않을까? 가장 dense하게는 모든 latent code를 사용하고, 그 다음엔 의 grid만, 그 다음은 의 grid만 사용하는 식으로 말이다. 성능이 많이 떨어지려나..?
반면 차원의 3D latent code는 만큼 정의되어 input coordinate와 가장 인접한 개의 code들을 concatenate하여 latent vector를 구성한다.
2. 무조건 정사각형, 정육면체 형태의 latent grid를 선언하지 말고 video의 resolution, frame 수에 맞도록 조절하면 더 compact하게 정보를 저장할 수 있지 않을까?
차원의 2D latent vector와 차원의 3D latent vector를 concatenate한 최종 latent vector를 -layer MLP에 대입한다. Latent vector 가 입력되는 modulator는 LeakyReLU를, time 가 입력되는 synthesizer는 SirenNet을 사용하는데, 여기선 크게 손볼 수 있는 부분이 없는 것 같다.
모델 구조 상으로는 앞선 두 가지 말고는 생각이 나질 않는다. 그 외의 학습 방법에 있어 개선시켜볼 수 있는 점은...
3. L2 loss에서 L1+SSIM loss로 바꾼다면? Frame-wise representation 논문에서는 대부분 L1-SSIM loss를 사용하던데, 여기서도 pixel-wise지만 training dataset을 1,245,184개의 random points의 batch 단위가 아니라 frame 단위로 입력한다면 더 빠른 수렴속도를 기대해볼 수 있지 않을까?
++ 말고는... Motion flow 같은 다른 개념을 도입해야 할 것 같은데, 이건 다른 후속 논문들을 읽어봐야 할 것 같다.