이전 글:

2021.05.06 - [논문 읽기] - [CVPR 2021] LIIF: Learning Continuous Image Representation with Local Implicit Image Function (1) - 배경 지식

 

[CVPR 2021] LIIF: Learning Continuous Image Representation with Local Implicit Image Function (1) - 배경 지식

2021.05.04 - [코딩/PyTorch] - PyTorch로 MATLAB imresize (bicubic interpolation) 구현하기 (2) - resampling (interpolation) 잡담: 더보기 Academic 한 관점에서 연구를 하며 힘든 순간 중 하나는 내가 나름..

sanghyun.tistory.com

 

이전 글에도 정리한 것처럼, resampling을 사용하지 않는 이상 CNN 내부에서 이미지의 해상도를 임의로 조작하기는 쉽지 않다.

 

그러면 가장 간단하게 드는 생각이, 아예 resampling을 CNN 내부에서 사용하는 것인데

 

이를 제안한 방법이 Meta-SR이다.

 

이렇게 하면, 허무할 정도로 쉽게 임의의 scale에 대응하는 SR 모델을 구현할 수 있는데

 

나는 이게 뭐가 귀찮다고 무시했는지 모르겠다.

 

물론 novelty가 전혀 없다는 것은 아니고, NN이나 bicubic 같은 handcrafted interpolation 연산을 사용하는 것이

 

sub-optimal 할 수 있으므로 (실험으로 보였다.) resampling kernel 또한 scale에 맞춰 dynamic filter 형식으로 만들어낸다.

 

여담이지만, 나는 제목의 Meta라는 단어를 썩 달갑게 생각하지는 않는데

 

아주 넓은 관점에서의 meta-learning은 맞지만 dynamic filter를 조금 더 강조하는 게 맞지 않았나 싶고

 

실제로 리뷰를 했었다면 그 점을 지적했을 것 같다.

 

일단 자세한건 이후 LIIF와의 비교에서 정리하고.

 

 

아무튼.

 

LIIF는 여러 모로 재밌는 (흥미로운?) 논문인데, 내가 생각하는 독특한 점 중 하나는

 

방법론 자체에 거의 novelty가 없음에도 참신한 writing으로 좋은 리뷰를 받았다는 것이다.

 

(참신한 글은 뭔가 있어 보이기는 하니까.)

 

LIIF에서는 이미지를 neural implicit function으로 나타내고자 하는데,

 

여기서 내가 살짝 헷갈렸던 부분은 implicit function에 대한 정의이다.

 

수학적으로 implicit function (음함수)는 $f(x_1, x_2, \dots, x_n) = 0$으로 표현되는,

 

$y = f(x_1, x_2, \dots, x_n)$처럼 하나의 변수로 정리되지 않는 함수 (explicit function)를 말한다.

 

(물론 재주껏 정리할 수 있는 경우도 있지만.)

 

그런데 요즘 인기를 끌고 있는 neural implicit function 분야 같은 경우, implicit function에 대한 정의가 조금 다르다.

 

논문마다 약간 컨셉이 다르긴 하지만, 기본적으로 discrete 한 데이터 (이미지, voxel 등) $f$ 에서

 

continuous 한 query $(x, y)$에 대한 값 $c$를 반환하는 형태의 formulation을 neural implcit function이라고 하는 것 같았다.

 

즉, 일반적인 이미지는 $c = f(x, y)$가 정수 좌표에 대해서만 정의되어 있지만

 

neural implicit function은 이를 실수 좌표계로 확장하기 위한 수단이라고 볼 수 있다.

 

 

여담이지만 아무리 봐도 수학적인 implicit function의 정의와는 상당한 괴리가 있어 뒷조사(?)를 좀 해보았는데

 

optimization 문제

 

$\text{find}~\Phi: x \mapsto \Phi (x) \\ \text{subject to}~\mathcal{C}(a(x), \Phi(x), \dots) = 0,\\ \forall x \in \Omega, m = 1, \dots, M.$

 

이 있을 때 $\Phi$가 $\mathcal{C}$를 통해 implicit 하게 정의된다는 점에서 implicit function이라는 이름이 붙은 것 같다.

 

(참조: SIREN - Implicit Neural Representations with Periodic Activation Functions)

 

실제 neural network에서 $\mathcal{C}$는 loss function이라고 볼 수 있고,

 

한 마디로 정리하자면 일반적인 CNN 학습과 동일하게

 

neural implicit function을 찾는것은 어떤 데이터 domain $\Omega$에서 loss를 minimize 하는 mapping을 찾는 것이다.

 

굳이 이런식으로 정의를 해야 했는지는 조금 의문이지만

 

공부가 부족해서 완전히 이해를 못하는 것으로 생각하고 일단 넘어간다.

 

 

본론으로 돌아와서,

 

LIIF에서는 임의의 이미지에 대해서 $s = f_\theta (z, x)$를 배우는 것을 목적으로 하는데,

 

$x$는 이미지의 2D 좌표, $f_\theta$는 parametric function (당연히 neural network),

 

그리고 $s$는 해당 좌표에서의 픽셀 값이다.

 

일반적인 이미지는 $x$가 정수 쌍일 때만 정의되지만,

 

implicit function을 학습하는 목적은 이를 실수 domain으로 확장하는 것이기에

 

$x$는 적당한 범위 (이미지 밖은 별 의미가 없으니까). 내의 실수 쌍 아무거나 가능하다.

 

그럼 $z$는 무엇인가 싶은데 image-specific한 prediction을 만들기 위한 일종의 coding이라고 생각하면 될 것 같다.

 

쉽게 말해 $s = f_\theta (z, x)$에서 $s$가 어느 이미지의 픽셀인지를 명시해주는 벡터이다.

 

 

당연한 얘기지만 이런 $z$는 우리가 implicit representation을 얻고 싶은 이미지로부터 얻고,

 

가장 간단한 방법은 CNN feature를 사용하는 것이다.

 

자세한 정리는 조금 뒤에.

 

LIIF에서 주의해야할 notation은 $f_\theta$와 $f_\theta(z, \cdot)$의 차이인데,

 

$f_\theta$의 경우 일반적인 이미지에 대해서 $z$를 받아 implicit representation을 만들어주는 연산이고

 

$f_\theta (z, \cdot)$의 경우 어떠한 이미지 ($z$와 관련된)에 대해 conditioning 된 implicit representation이다.

 

사실 implicit representation은 여러 목적으로 사용이 가능한데, 위의 SIREN 논문에 잘 정리되어 있지만

  • Sample 수가 아주 많은 (고해상도?) discrete data를 compact 하게 나타낼 수 있음
  • Discrete data의 continuous한 representation을 사용하여 여러 수학적인 이점을 취함.
    미분이라든지...
  • 이러한 성질을 이용해 inverse problem을 푸는 데에 discrete data보다 효율적일 수 있음.

등이다.

 

LIIF는 implicit representation을 이용해 image SR 문제를 해결하려고 하는데,

 

엄밀히 말하면 위의 사항 모두와 관계가 있다고 볼 수 있다.

 

기존 SR 방법들과의 차이점은

 

컨셉 자체를 discrete domain에서 continuous domain으로 옮긴 것인데, 어떤 discrete 이미지가 있을 때,

 

해당 이미지의 continous representation을 구하고

 

이를 resampling 하면 SR 결과를 얻을 수 있는 것이 아닌가 하는 발상을 도입한 것이다.

 

 

구체적으로 어떤 방식으로 SR을 수행하는지에 대해 정리하자면,

 

우선 LR 이미지와 타겟 (SR) 영상의 해상도가 주어지면 mapping을 통해 타겟 영상의 모든 픽셀이

 

LR 이미지의 어느 좌표에 대응하는지를 구한다.

 

Mapping은 아래에 따로 정리했다.

 

2021.05.03 - [코딩/PyTorch] - 파이토치 PyTorch로 MATLAB imresize (bicubic interpolation) 구현하기 (1) - 이미지 resizing 배경 지식

 

PyTorch로 MATLAB imresize (bicubic interpolation) 구현하기 (1) - 이미지 resizing 배경 지식

[코드] 일반적으로 Image Super-Resolution (SR) 모델을 학습할 때는 많은 양의 high-resolution (HR) 이미지를 준비한 뒤 이를 임의의 downsampling 방법으로 줄여 input low-resolution (LR)을 만든다. 그 후 이..

sanghyun.tistory.com

당연히 LR 이미지에서 대응되는 좌표는 정수가 아니라 실수일 수 있고, 이를 어떻게 구현하는지가 중요하다.

 

논문에서는 아래와 같은 수식으로 이 과정을 표현하는데,

 

$I^{(i)} (x_q) = f_\theta (z^\ast, x_q - v^\ast)$이다.

 

식이 갑자기 어지러워진 느낌인데, 하나씩 정리하면 $I^{(i)} (x_q)$는

 

continuous representation의 $x_q$ 위치에 대응하는 픽셀 값이다.

 

따라서 $I^{(i)}$는 continuous하게 표현되는 이미지라고 생각하면 될 것 같다.

 

논문에서 $z^\ast$의 정의는 조금 번잡한데, 우선 가지고 있는 $H \times W$ discrete 이미지를

 

feature encoder $E_\phi$에 통과시켜서 2D CNN feature $M \in \mathbb{R}^{H \times W \times D}$를 얻는다.

 

$v^\ast$는 우리가 원하는 query coordinate $x_q$로부터 가장 가까운 포인트의 좌표다.

저자들 말에 의하면 z_11이 x_q가 주어졌을 때 z^*라고 한다. 개인적으로 정말 끔찍한 시각화의 대표적인 예시라고 생각하지만... 출처는 논문.

$\lfloor \cdot \rceil$이 element-wise 반올림 연산이라고 할 때, $v^\ast = \lfloor x_q \rceil$이라고 해도 무방할 듯.

 

$z^\ast$는 $M[v^\ast] \in \mathbb{R}^{D}$이다.

 

즉, $v^\ast$에 해당하는 위치의 feature 값이라고 생각하면 된다.

 

물론, $M$ 자체가 CNN feature이다 보니, $z^\ast$에 어느 정도 context가 반영되어 있는 것은 당연하다.

 

논문 제목 'Local Implicit Image Function'의 local이 상징하는 것도 동일.

 

식을 다시 정리해보면, reference feature $z^\ast$를 기준으로 offset을 구한 뒤 ($x_q - v^\ast$),

 

이를 기반으로 해당 offset에 대응하는 위치의 픽셀 값을 계산하는 방식이다.

 

말로 설명하자면 "이 위치의 feature가 $z^\ast$인데 여기서 $x_q - v^\ast$만큼 떨어진 위치에서는 무슨 색인가?"

 

라고 할 수도 있고.

 

 

아무튼 위의 식을 열심히 이해하고 나면, 그게 끝이다.

 

별거 없다고 생각할 수 있지만 정말로...

 

이렇게 한 픽셀의 색을 구하는 방법을 알면 당연히 모든 픽셀의 색을 구할 수 있고

 

모든 output 픽셀에 대해서 mapping으로 구한 $x_q$ 좌표들을 일일이 넣어서 계산해주고

 

잘 늘어놓으면 SR 결과가 나온다는 얘기다.

 

물론 더욱 좋은 결과를 만들기 위한 몇 가지 테크닉이 존재하는데, 이해하고 나면 상당히 허무하다.

 

특히 네이밍 센스의 경우 (나도 이름을 잘 짓는 편은 아니지만) 있어 보이려고 좀 선을 넘을뻔한 것들이 보이는데 후술.

 

 

가장 먼저 feature unfolding이다.

 

쉽게 말해 $f_\theta$에 $z^\ast$만 넣는 게 아니라,

 

$M$에서 $z^\ast$에 이웃한 (가로세로 대각선) 8방향 feature도 같이 넣겠다는 것이다.

 

같이 들어가는 feature들은 기존 $z^\ast$에 concat 되고, 따라서 $f_\theta$에 들어가는 벡터의 크기가 9배가 된다.

 

아무래도 $z^\ast$가 원래 CNN feature인 만큼 redundancy가 많을 것 같지만...

 

이후 실험 결과를 보면 아주 조금의 성능 향상이 있다고 한다.

 

도대체 이런 대단하지 않은 기법에 왜 feature unfolding이란 이름이 붙었는지 조금 뒤져보니까,

 

공식 코드에서 구현상의 편의를 위해 해당 기법과 관련한 부분에

 

PyTorch의 nn.functional.unfold 함수를 사용해서라는 결론이 나왔다...

 

아무튼 별거 아닌 테크닉 #1.

 

 

두 번째는 local ensemble이다.

 

상당히 헷갈리는 표현이라고 생각하는데, 일단 논문에 정리된 식은 이렇다.

 

$I^{(i)}(x_q) = \sum_{t \in \left\{ 00, 01, 10, 11 \right\}}{ \frac{S_t}{S} \cdot f_\theta (z^\ast_t, x_q - v^\ast_t) }.$

 

위에 첨부된 그림과 함께 보면 좋은데,

 

우선 $\left\{ 00, 01, 10, 11 \right\}$는 각각 $x_q$를 기준으로 좌상, 우상, 좌하, 우하의 $z^\ast$를 표현하기 위한 인덱스이다.

 

$S_t$는 $x_q$를 기준으로 $z^\ast_t$가 만드는 사각형을 4 분할한다고 할 때, $z^\ast_t$의 반대 방향에 있는 사각형의 넓이이며

 

$S = \sum_t{S_t}$인 normalization factor이다.

 

논문에서는 이렇게 하면 만들어진 이미지의 smoothness를 보장하는 데에 도움을 준다고 한다.

 

설명이 쓸데없이 어렵게 되어있지만, 사실 저렇게 기준 포인트의 반대방향의 넓이를 contribution factor로 쓰는 것은

 

bilinear interpolation과 동일하므로, 어렵지 않게 이해할 수 있다.

 

4개의 $f_\theta$ 값을 구하고, 원하는 위치에서 bilinear interpolation 된 값을 쓴다 라고 하면 간단했을 텐데...

 

오히려 본문에서는 bilinear interpolation 얘기가 쏙 빠져있어 이게 뭔가 새로운 방법인가 하는 착각을 불러일으킨다.

 

실험에서 약간의 성능 향상이 있기는 한 걸로 나타났다.

 

아무튼 별거 아닌 테크닉 #2.

 

 

마지막으로 cell decoding이다.

 

이 또한 상당히 있어 보이는 이름인데, 쉽게 말해 output 이미지의 크기를 $2 \times 2$ (맞나?)로 normalize 할 때

 

(저 근본 없어 보이는 크기는 좌표계를 -1 ~ 1로 normalize 해서 나온다.)

 

$f$에 output 픽셀의 크기를 같이 넣어준다는 것이다.

 

cell은 output pixel에 대응하는 것 같고,

 

decoding은 implicit representation을 통해 픽셀 값을 얻는 과정을 그렇게 표현한 것 같다.

 

가령 output 이미지가 $400 \times 300$이라면 $[\frac{2}{400}, \frac{2}{300}]$을 $x$와 함께 넣어준다는 뜻.

cell decoding 설명. 출처는 논문.

여담이지만 이 부분만 다른 사람이 쓴 것 같은 게, notation이 이전 섹션과는 약간 다르다.

 

검수할 때 빼먹은 듯?

 

그건 별개로 두더라도, 내가 생각하는 cell decoding의 가장 큰 문제는

 

Meta-SR 등에서 이미 제안된 기법임에도 불구하고 완전 새로운 이름을 붙이고 citation을 하지 않아

 

마치 자신들이 cell decoding이라는 새로운 테크닉을 개발한 것처럼 보이게 한다는 점이다.

 

비교는 다음 포스트에 정리해야지.

 

암튼 이것까지 해서 별거 아닌 테크닉 #3까지가 LIIF method의 일부이다.

잡담:

더보기

Academic 한 관점에서 연구를 하며 힘든 순간 중 하나는

 

내가 나름 기발하다고 생각했던 발상이 이미 논문으로 나와 있는 경우다.

 

지금까지 생각해 낸 아이디어 중 70% 정도는 아마 이렇게 묻히지 않았나 싶다.

 

나머지 30% 중, 귀찮음, 시간 없음, 그냥 안 함 등의

 

이유로 실제로 구현까지 가는 아이디어는 전체의 10% 정도?

 

흥미롭게도 이렇게 남겨진 20%의 아이디어들은 누군가가 곧 정리해서 논문으로 내버린다.

 

그럴 때 드는 생각은 크게 2가지인데,

  1. 별로 못 쓴 논문인 경우에는 내가 얼른 할 걸.
  2. 잘 쓴 경우에는 고래싸움에 괜히 뛰어들지 않기를 잘했다.

간단히 말해 "내 좋을 대로 생각한다"라는 의미이지만

 

아무튼 비슷한 분야를 연구하는 사람들 (에디슨 vs. 테슬라?)은 역사적으로도 항상 비슷한 생각을 해왔다.

 

 

사실, continuous 한 관점에서의 SR을 생각한 건 2018년 가을이었는데

 

이경무 교수님의 수업 프로젝트 주제를 정하다 보니

 

기존의 SR 알고리즘들이 항상 고정된 스케일만 다루는 것이 조금 아쉽다는 생각이 들었다.

 

그래서 다양한 방법으로 사용 가능한 continuous-scale SR 모델을 만들어보자!라는 proposal을 제출했는데

 

이유는 모르겠지만 다른 것에 꽂혀서 (+ 귀찮아서?) 주제를 바꿨던 기억이 났다.

 

그 직후, Meta-SR이라는 paper가 CVPR 2019에 accept 됐다는 소식을 듣고

 

아쉬운 감정과 다행스러운 감정이 교차했다.

 

 

아무튼.

 

지난 CVPR에는 Meta-SR 등의 arbitrary-scale SR 모델을

 

homography 등의 일반 transformation에 사용할 수 있지 않을까 하는 생각으로

 

SRWarp라는 확장된 개념을 제안했다.

 

솔직히 아주 마음에 드는 결과는 아니었지만 (자기 연구가 아주 마음에 드는 사람이 얼마나 있을까?)

 

뭔가 최대한 빨리 해야겠다는 촉이 와서 서두를 수 있었고, 다행스럽게도 좋은 리뷰를 받아 accept 되었다.

 

이와 동시에 이웃 연구실의 김미정 님이 혹시 이런 건 관심 없으시냐고 논문을 하나 보내주셨는데,

 

그게 이번에 정리해 놓을 LIIF다.

 

(평소에 개인적으로 이야기를 해본 적도 거의 없는데

 

어찌 내 관심 주제를 잘 기억하시고 알려주신 거에 대해 상당히 놀랐고 감사했다.)

 

잘 뜯어보니, Meta-SR이랑 큰 차이는 없음에도 

 

해당 work이 나온 뒤에 내 SRWarp를 내는 것은 꽤 난이도가 있겠구나 하는 생각이 들어서

 

이번에 서두르기를 참 잘했다는 생각이 든다.

 

개인적인 사정으로 가뜩이나 힘들었던 연초를 덕분에 잘 버틸 수 있었던 것 같다.

 

기왕 리뷰도 잘 나왔는데 spotlight이라도 하나 받았으면 더 좋았겠지만.

 

 

개인적으로 생각하는 SR 관련 연구의 최종 목표는 유저가 자유롭게 사용 가능한 application을 개발하는 것이다.

 

이를 위해서는 아직도 많은 관문들이 남아있는데, 그중 하나가 output의 크기를 자유롭게 조절하는 것이다.

 

의외로 딥러닝 쪽 초기 연구인 SRCNN이나 VDSR 등에서는 이러한 고민이 굉장히 적었는데,

 

Bicubic 보간법 등을 사용해 일단 input을 원하는 크기로 조절하고

 

그 후 SR 모델을 적용시키는 접근법을 채택했기 때문이다.

 

예를 들어 $128 \times 128$ input을 $300 \times 300$으로 만들고 싶다면 큰 고민 없이

 

일반적인 resizing 알고리즘으로 input을 $300 \times 300$으로 만든 뒤에 모델을 적용한다는 것이다.

 

물론 효과적인 솔루션이긴 하지만, 여기에는 크고 작은 두 가지의 문제가 있다.

  1. input이 커지면 크기의 제곱에 비례하여 계산량이 올라간다.
    예를 들어 input이 가로세로 3배 커지면 계산량은 제곱인 9배만큼 늘어나는데,
    말도 안 되는 수치라는 걸 알 수 있다.
  2. 아주 치명적인 건 아니지만, 보간법을 미리 사용하는 것 자체가 sub-optimal 하다.
    Bicubic 보간법을 예로 들자면, 0~255 바깥의 값을 만들어내는 경우가 비일비재하며
    input data를 어떤 식으로든 건드는 과정이기 때문에 해당 resizing 알고리즘이
    optimal choice가 아닌 경우에 단점이 될 수 있다.

 

이러한 한계들을 어느 정도 해결해주는 것이 ESPCN에서 제안된 sub-pixel convolution (혹은 pixel shuffle)이다.

 

Sub-pixel convolution. W. Shi, et al., “Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network,” in CVPR 2016.

사실 transposed convolution과 큰 차이는 없다는 주장도 있지만,

 

아무튼 ESPCN 이후로 SR 모델들은 input의 크기를 조절해서 원하는 크기의 output을 만들기보다는

 

특정 레이어를 사용해서 중간 feature의 크기를 조절하는 것으로 훨씬 효율적인 계산을 구현했다.

 

그런데 이런 레이어들은 CNN이 regular 한 grid 위에서 정의되어 있다는 점 때문에 본질적인 한계를 갖는데,

 

정수배의 scale이 아니면 적용하기 힘들다는 것이다.

 

그러니까 효율적인 알고리즘을 구현하고자 새로운 레이어를 개발했는데,

 

이전에 아무렇지도 않게 사용하였던 arbitrary-scale 개념을 쓸 수 없어졌다는 trade-off가 생겨버렸다.

 

그런데 연구의 관점에서는 computation을 절약하는 게 (scale이 클 때는 order of magnitude 수준으로)

 

조금 더 중요하기도 하고, 만약 arbitrary-scale SR 모델이 필요하다면 적당히 사용할 수 있는 대체제가 있기 때문에

 

Sub-pixel convolution은 암묵적인 표준으로 인정받게 되었다.

 

 

여기서 말하는 대체재라는 것은, 만약 $\times r$의 SR 결과가 필요하다면

 

$s \gt r$인 임의의 $\times s$ 모델을 사용해서 우선 적당히 큰 output을 만들고,

 

이를 bicubic 보간법 등으로 줄여서 최종 결과를 얻는 것이다.

 

당연히 어느 정도 잘 작동하지만 근본적인 한계는 있다.

 

SR은 구조상 scale이 커질수록 문제의 난이도가 급격히 어려워진다.

 

예를 들어 $\times 4$와 $\times 8$은 단순히 2배의 scale 차이가 난다고 생각할 수도 있지만,

 

$\times 4$ 모델은 하나의 픽셀로부터 16개의 픽셀을 생성해야 하는 반면

 

$\times 8$ 모델은 그보다 48개나 많은 64개의 픽셀을 생성해야 한다.

 

이 말은 곧 $\times 8$ 모델의 성능에는 어느 정도 한계가 있을 수밖에 없다는 뜻이고

 

만약 $\times 2.5$의 결과가 필요한데 $\times 8$ 모델을 적용하고 이를 축소시키고자 하면,

 

애초에 $\times 8$ 모델이 생각보다 쓸만한 결과를 만들지 못할 수도 있다.

 

Meta-SR paper에서는 조금 더 다양한 셋업에서 이러한 SR 후 resizing 파이프라인이

 

sub-optimal 하다는 것을 실험적으로 보였다.

 

 

다시 말해, $\times 2.5$의 결과가 필요하면 해당 scale을 고려하여 모델을 학습하는 것이

제일 좋은 결과를 준다는 것인데, 여기서 또 고려할 사항들이 생긴다.

  • 모델이 임의의 scale로 확장된 순간, 기존의 딥 러닝 기반 SR 방법들에서 일반적으로 채택하던
    하나의 모델 = 하나의 scale의 가정이 깨지게 된다.
    별다른 이유가 있는 것은 아니고, $\times 2.5, \times 2.51, \times 2.52, \cdots$ 모델들을 일일이 만들어 놓을 수는 없으니까.
  • 그러면 이제 하나의 모델이 여러 (임의의) scale을 처리할 수 있어야 할 텐데,
    당연히 이 방법을 우선 고민해야 하고
  • 애초에 임의의 scale 개념이 일반적인 CNN에서는 straightforward하지 않은 개념인데,
    이를 어떻게 다룰지도 고민을 해야 한다.

LIIF에서는 이러한 요소들을 'implicit function'이라는 개념을 통해서 한방에 해결한다.

 

사실 이런 문제에 대한 솔루션을 처음으로 내놓은 것은 Meta-SR이고

 

의외로 Meta-SRLIIF를 꼼꼼히 비교해보면 writing이나 설명하는 관점이 많이 다를지언정

 

실제 아이디어를 구현하는 방식에는 큰 차이가 없는 것을 알 수 있다.

 

자세한 얘기는 다음 포스트에 정리하도록 하고,

 

일단 Meta-SRLIIF의 근간이 되는 배경 지식을 좀 정리할 필요가 있는데, 아래 포스트들을 참고.

 

2021.05.03 - [코딩/PyTorch] - PyTorch로 MATLAB imresize (bicubic interpolation) 구현하기 (1) - 이미지 resizing 배경 지식

2021.05.04 - [코딩/PyTorch] - PyTorch로 MATLAB imresize (bicubic interpolation) 구현하기 (2) - resampling (interpolation)

 

 

+ Recent posts