오늘은 Midway Network: Learning Representations for Recognition and Motion from Latent Dynamics 논문에서 제안하는 image encoder의 self-supervised learning 방법을 살펴보려고 한다.
https://arxiv.org/abs/2510.05558
Midway Network: Learning Representations for Recognition and Motion from Latent Dynamics
Object recognition and motion understanding are key components of perception that complement each other. While self-supervised learning methods have shown promise in their ability to learn from unlabeled data, they have primarily focused on obtaining rich
arxiv.org
Introduction
아래 블로그 글에서도 확인할 수 있듯이, 최근에는 비디오 데이터셋을 활용해 image encoder를 학습하려는 연구가 점점 늘어나고 있다. 이러한 접근은 단순히 하나의 frame에 담긴 정보를 잘 표현하는 것을 넘어, 서로 다른 시점의 frame들로부터 얻은 embedding들 사이에서도 효과적으로 비교와 정렬이 가능한 표현을 학습하는 것을 목표로 한다.
https://seokmin-hardstudy.tistory.com/74
video를 보고 학습한 image encoder가 가져야 할 자질
Video로 학습한 Image Encoder는 무엇이 달라야 하는가? 오늘은 video를 보고 학습한 image encoder가 image만 보고 학습한 image encoder에 비해 어떤 자질을 가져야 하는지에 대해 내 생각을 정리해보고자 한다
seokmin-hardstudy.tistory.com
비디오를 활용해 image encoder를 학습하는 방법에는 여러 가지가 있다. 그중 하나의 대표적인 접근은 frame t의 embedding에 미래 시점 t+k에 대한 어떤 hint를 제공하고, 이를 이용해 t+k의 embedding을 예측하도록 만드는 방식이다.

이 힌트는 다양한 형태로 제공될 수 있다. 예를 들어 (b)와 같이 raw pixel 공간에서의 차이, 즉 optical flow를 사용할 수도 있고, 혹은 (c)처럼 latent space에서 z_t와 z_t+k의 관계를 이용해 차이를 구성할 수도 있다.
(b)의 경우에는 optical flow를 반영하는 latent가 자연스럽게 만들어질 것이다. 직관적으로 보면, z_t에 optical flow에 해당하는 변화를 더하면 z_t+k에 도달하도록 학습시키는 구조이기 때문에, latent에서 변화의 의미가 optical flow로 분명하게 정의된 셈이다.
조심해야 할 것은, z_t와 z_t+k, z_optical flow가 모두 상수로 수렴하는 collapse현상인데, teacher-student self-distillation과 같은 장치를 통해 이러한 문제를 완화할 수 있다.
(b)와 같은 접근의 한계는 latent 공간이 훨씬 더 풍부한 구조를 가질 수 있음에도 불구하고, 표현이 optical flow라는 특정한 형태의 변화에 강하게 맞춰질 가능성이 있기 때문이다. 그 결과, optical flow와 잘 부합하지 않는 downstream task에서는 반드시 최적이라고 보장하기 어렵다.
반면 (c)처럼 latent 공간에서 직접 차이에 대한 힌트를 구성하는 경우, representation이 형성될 수 있는 가능성은 훨씬 넓어진다. 대신 어떤 힌트를 제공해야 하는지에 대한 어려움이 커진다. 예를 들어 힌트를 단순히 z_t+k - z_t로 정의한다면, 모델은 두 시점 사이의 구조를 이해할 필요가 없다. 그냥 z_t에 힌트를 더해 z_t+k를 만들면 되기 때문이다. 이 경우, 극단적으로는 두 embedding이 서로 의미 없는 값이더라도 학습 목표를 만족시킬 수 있다. 따라서 latent에서 접근할 때 핵심은 어떤 힌트를 줄 것인가라기보다는,
z_t+k - z_t라는 차이 벡터가 latent space 안에서 일관된 의미를 갖도록 만드는 것에 가깝다. 이걸 어떻게 강제할 수 있을까?
당장 생각나는 방법은 2개가 있다.
첫 번째는 차이 정보를 bottleneck을 거쳐 전달하도록 만드는 것이다. 결국 모델은 z_t+k - z_t를 어떤 형태로든 압축한 뒤 사용하게 되는데, 이 bottleneck을 충분히 좁게 만들면 단순 복사는 어려워진다. 그 대신 다양한 데이터에서 공통적으로 성립하는 구조적인 정보만이 살아남게 되고, 이를 통해 의미 있는 복원이 이루어지도록 유도할 수 있다.
두 번째는 invariance를 활용하는 방법이다. 예를 들어 동일한 물체가 일정한 방향으로 움직인다면, frame A→B에서의 변화와 B→C에서의 변화가 latent에서도 유사한 방향성과 구조를 가지기를 기대할 수 있다. 하지만 video self-supervised learning에서 이러한 invariance를 명시적으로 정의하거나 안정적으로 학습시키는 일은 생각보다 매우 어렵다. supervision이 없기 때문에 어떤 변화들이 서로 동등한지를 판단하기가 애초에 쉽지 않기 때문이다.
이 논문은 (c)와 같은 latent 기반 접근을 택하면서도, 이러한 어려움을 해결할 수 있는 구조를 제안한다. 이제 그 방법을 하나씩 살펴보도록 하자.
Method

- 먼저 두 프레임 t와 t+1을 각각 image encoder에 통과시켜 feature map을 얻는다.
이 모델은 여러 수준의 representation을 모두 활용하기 때문에, transformer의 각 레이어에서 나오는 출력을 전부 저장해 둔다. - 시간 t에서 얻은 feature들은 이후 **top-down 방식으로 다시 정제(refine)**된다.
아이디어는 높은 레벨의 semantic 정보가 낮은 레벨 feature에 흘러 내려가도록 만드는 것이다.- 형태는 FPN과 비슷하지만, 방식에는 차이가 있다. 각 레이어에서 현재 레벨 feature(z_l)를 query로 사용하고,
그보다 한 단계 높은 레벨 backward feature(v_l+1)를 key와 value로 사용하는 transformer 기반의 attention을 적용한다.
- 형태는 FPN과 비슷하지만, 방식에는 차이가 있다. 각 레이어에서 현재 레벨 feature(z_l)를 query로 사용하고,
- 먼저 가장 높은 layer에서는 z_t와 z_t+1의 정보를 이용해 motion latent m을 구성한다. 이 motion latent는 두 프레임 사이의 변화를 담는 bottleneck 역할을 하며, 구현적으로는 10개의 learnable token으로 이루어진다. 이 토큰들은 시간 t의 feature, 그리고 t+1의 feature와 함께 attention을 수행하면서 두 시점 사이의 변화를 요약하도록 학습된다.
- 이렇게 얻어진 최상위 motion 정보는 바로 아래 레벨의 예측에 사용된다. motion latent + 시간 t의 feature를 이용해
t+1 시점의 바로 아래 레벨 feature를 예측하고,정답 feature와의 차이에 대해 L2 loss를 적용한다. - 그 다음 레벨부터는 밑 과정이 재귀적으로 반복된다.
- 상위 레벨에서 z_t+1을 예측한 결과와, 실제 정답 z_t+1, 예측할 때 사용했던 motion 정보를 활용해
현재 레벨에서 사용할 motion 표현을 한 번 더 정제(refine)한다. - 정제된 motion과 시간 t의 feature를 이용해 다시 해당 레벨의 t+1 feature를 예측하게 된다.
- 상위 레벨에서 z_t+1을 예측한 결과와, 실제 정답 z_t+1, 예측할 때 사용했던 motion 정보를 활용해
이 모델이 cheating을 안하는 이유
앞에서 이야기했듯, latent 공간에서 차이를 이용하는 방식은 자유도가 큰 대신 언제든 shortcut이 발생할 위험이 있다. 그렇다면 Midway는 어떻게 이 문제를 피할 수 있었을까? 핵심은 모델이 두 시점 사이의 차이를 그대로 전달할 수 없도록 구조적으로 막아 놓았다는 점이다.
먼저, 변화 정보는 반드시 motion latent라는 bottleneck을 통과해야 한다. 이 motion latent는 단 10개의 토큰으로 제한되어 있기 때문에, 이 안에 모든 세부적인 정보를 그대로 담아 보내는 것은 사실상 어렵다. 결과적으로 모델은 단순 복사를 하는 대신, 여러 데이터에서 반복적으로 나타나는 공통적이고 압축 가능한 변화의 구조를 추출해야만 한다. 그렇지 않으면 다양한 상황에서 안정적으로 미래 feature를 복원할 수 없기 때문이다.
Midway는 여기에 multi-level refinement라는 구조를 추가한다. 모션 정보는 한 번 사용되고 끝나는 것이 아니라, 상위 레벨에서 만들어진 뒤 아래 레벨로 내려가면서 계속해서 수정되고 보완된다. 이 과정에서 모델은 단일 레벨의 예측만 맞추는 것이 아니라, 여러 해상도와 추상화 수준에서 동시에 일관된(invariant한) 변화를 설명해야 한다. 만약 motion이 특정 level에서만 통하는 임시적인 값이라면, 아래 단계로 내려갈수록 금방 모순이 발생하고 예측이 틀어질 것이다. 결국 살아남는 motion은 여러 단계에 걸쳐 공통적으로 적용될 수 있는 변화 방향일 수밖에 없다.
구조 자체가 일관된 변화를 선호하도록 압력을 주는 셈이다.
정리하면 Midway가 cheating을 피할 수 있는 이유는 다음과 같다.
- motion 정보는 극도로 작은 통로를 통해서만 전달된다.
- 그 정보는 여러 단계에서 반복적으로 검증된다.
- 결과적으로 특정 장면, level에만 맞는 값이 아니라, 다양한 상황에서 통용되는 안정적인 변화 표현만이 살아남는다.
이러한 설계 덕분에 모델은 단순 복사를 할 수 없고, latent에서 의미 있는 dynamics를 형성하도록 유도된다.
Architecture design detail

미래 시점의 feature를 예측할 때 모델은 시간 t의 정보 v_t와 motion 정보 m을 함께 사용한다. 이때 흥미로운 점은, v_t를 단순한 residual connection으로 바로 더하지 않는다는 것이다. 대신 한 번 gating unit을 통과시켜, 얼마나 반영할지를 조절하도록 만든다.
이러한 설계가 필요한 이유는 변화의 크기 때문이다. 만약 두 프레임 사이의 motion이 작다면, 이전 시점의 feature를 많이 가져오는 것이 도움이 된다. 하지만 움직임이 크거나 시점 변화가 큰 경우에는, v_t가 오히려 잘못된 정보가 될 수도 있다. 특히 큰 변화를 처리해야 할 때는, 이전 feature를 과감하게 버리고 새롭게 형성된 정보를 더 많이 사용해야 할 필요도 있다. gating은 모델이 상황에 따라 이전 정보를 얼마나 유지할지, 얼마나 덮어쓸지를 스스로 결정하게 만드는 것이다. 결과적으로 이 구조는 motion이 작은 경우에는 안정적인 업데이트를 가능하게 하고, motion이 큰 경우에는 과거 정보에 묶이지 않고 충분한 변화를 만들어낼 수 있도록 돕는다.
조금 특이한 점은 m이 gating unit에 안들어간다는건데, 사실 이미지(v_t)만 봐도 어느정도는 동영상 내에서 객체들이 빠르게 움직일지 느리게 움직일지 알 수 있다고 생각하긴 하지만, m이 input으로 안들어가는 것은 좀 의외다.
Experiment

Motion이 실제로 학습되었는지 확인하는 실험
모델이 정말로 두 프레임 사이의 dynamics를 학습했는지를 확인하기 위해, 논문에서는 간단하지만 매우 직관적인 실험을 제시한다.
- 먼저 시간 t의 source와 t+1의 target 사이에서 motion을 추정한다.
- 그 다음, source 이미지의 특정 patch에 인위적으로 noise를 추가한다.
- 이후 동일한 motion을 사용해 target을 다시 예측하고, noise가 없을 때의 예측과 비교하여 어느 위치의 출력이 얼마나 변했는지를 heatmap으로 시각화한다.
만약 motion representation이 올바르게 학습되었다면, source에서 발생한 변화는 target에서도 움직임을 따라 이동한 위치에 영향을 주어야 한다. 즉, heatmap은 단순히 같은 좌표가 아니라, motion이 가리키는 위치에서 강하게 나타나야 한다.
결과 해석
그림을 보면 왼쪽에는 source와 target이 주어지고, source에서 noise를 준 patch가 초록색으로 표시되어 있다.
target 이미지에서도 같은 공간적 좌표의 patch가 초록색으로 표시되어 있는데, 이는 단순한 위치 기준을 보여주기 위한 것이다.
하지만 우리가 진짜로 봐야 하는 것은 heatmap이다. motion이 제대로 학습되었다면, 영향은 단순히 같은 자리에 머무르지 않고 움직임이 도달한 위치에서 강하게 나타나야 한다. 실제로 대부분의 예시에서 heatmap은 이러한 기대를 잘 만족한다. source에서 변화를 준 위치를 따라, target에서의 영향도 함께 이동하는 것을 확인할 수 있다. 흥미로운 점은 오른쪽 아래의 결과이다.
이 경우는 gating을 사용하지 않았을 때의 실험인데, heatmap이 움직임을 제대로 반영하지 못한다. 즉, 모델이 motion을 충분히 활용하지 못하고 과거 feature에 의존하는 경향이 드러난다.
무엇을 의미하는가
이 실험은 모델이 단순히 representation을 복사하는 것이 아니라, 실제로 latent space에서 변화가 어떻게 전달되어야 하는지를 학습했다는 강력한 증거로 볼 수 있다. 다시 말해, motion token이 진짜로 미래 예측에 사용되고 있다는 것을 시각적으로 보여주는 결과이다.
Comment
솔직히 말하면 아직 내 수준에서는 이런 모델 못만들 것 같다... 진짜 대단하다고 생각이 든다. 아이디어는 떠올릴 수 있어도 이걸 구현해서 SOTA를 찍어내고, 진짜 dynamics를 배웠다는걸 보여준다는게 너무 대단한 것 같다 :)
리스펙!!!!!!!