본문 바로가기
AI Naver boost camp/[Week 04] CV 1

딥러닝 Motion Magnification

by AI-BT 2024. 8. 29.
728x90
반응형

Motion Magnification 이란??

영상에서 미세한 움직임을 증폭시켜,
육안으로는 감지하기 어려운 미세한 움직임을 더 잘 볼 수 있게 해주는 기법입니다.

이 기법은 영상에서 작은 진동이나 움직임을 감지하는 데 유용합니다.
예를 들어, 사람의 맥박이 뛰는 모습을 영상에서 더 뚜렷하게 보여줄 수 있으며,
구조물의 미세한 흔들림을 감지하는 데 사용될 수도 있습니다.

 

이 방법은 Eulerian Video Magnification이라는 알고리즘을 통해 수행되며,
공간적 필터링과 시간적 필터링을 결합하여 움직임을 증폭시킵니다.
기본적으로 영상의 각 픽셀에 대해 움직임을 분석하고, 그 움직임을 증폭시켜 더 뚜렷하게 보이게 합니다.


딥러닝 기반 Motion Magnification의 원리

  1. 데이터 수집 및 전처리:
    • 움직임이 있는 다양한 동영상 데이터셋을 수집하고 전처리합니다.
    • 원본 동영상과 그에 대응하는 움직임 증폭 동영상(혹은 관련된 변화)을 학습 데이터로 사용합니다.
  2. 모델 아키텍처 설계:
    • CNN(Convolutional Neural Network)이나 RNN(Recurrent Neural Network) 같은 딥러닝 모델을 사용하여 영상을 분석하고, 프레임 간의 움직임을 추출합니다.
    • 예를 들어, U-Net 구조 같은 encoder-decoder 아키텍처가 흔히 사용됩니다. 입력 프레임을 받아서 특징을 추출하고, 이를 증폭된 움직임을 반영한 프레임으로 재구성합니다.
  3. 모델 학습:
    • 원본 동영상과 증폭된 동영상(혹은 생성하고자 하는 결과)을 비교하면서 모델을 학습시킵니다.
    • 손실 함수로는 MSE(Mean Squared Error)나 L1 loss 등을 사용하여, 모델이 프레임의 움직임을 증폭하도록 학습합니다.
  4. 모델 예측:
    • 학습된 모델에 새로운 동영상을 입력하면, 모델은 해당 동영상에서 움직임을 감지하고, 미세한 움직임을 증폭한 결과를 생성합니다.
  5. 후처리 및 결과물 생성:
    • 모델이 생성한 증폭된 프레임을 후처리하여 최종 영상을 만듭니다.
    • 이 과정에서 필터링이나 색상 보정 등이 추가될 수 있습니다.

 

참고 사이트

https://axial-momag.github.io/axial-momag/

 

Learning-based Axial Video Motion Magnification

Video motion magnification amplifies invisible small motions to be perceptible, which provides humans with spatially dense and holistic understanding about small motions from the scene of interest. This is based on the premise that magnifying small motions

axial-momag.github.io

 


 

Synthetic Data(합성 데이터) - Motion Magnification 기술에서 사용

 

애니메이션 캐릭터의 움직임

애니메이션 캐릭터가 등장하는 장면을 만드는 중입니다.

이 캐릭터가 아주 작은 움직임, 예를 들어 손을 살짝 움직이거나 눈을 깜빡이는 것 같은 움직임을 해야 합니다.

하지만, 이런 작은 움직임을 눈에 잘 띄게 하려면 어떻게 해야 할까요? 이를 위해 우리는 두 가지 작업이 필요합니다.

  1. 캐릭터와 배경을 분리:
    • 먼저, 애니메이션 캐릭터(루피)를 배경(바다)에서 분리합니다.
    • 이때 캐릭터는 객체 분할 데이터셋(PASCAL VOC)에서 가져오고,
      배경은 다른 이미지 데이터셋(MSCOCO)에서 가져옵니다.
  2. 움직임을 합성:
    • 이제 이 캐릭터를 배경 위에 놓고, 아주 작은 움직임을 추가합니다.
      예를 들어, 캐릭터가 조금씩 움직이는 것처럼 보이게 하거나 손이 살짝 흔들리는 것처럼 만드는 것입니다.
    • 이렇게 만들어진 "원본 프레임(움직임이 거의 없는)"과
      "증폭된 프레임(움직임이 강화된)"의 쌍을 사용해 모델을 학습시킵니다.

학습 데이터 생성:

  • 원본(캐릭터의 기본 움직임): 캐릭터가 배경에서 거의 움직이지 않거나, 아주 미세하게 움직입니다.
  • 증폭된 데이터(더 뚜렷한 움직임): 같은 캐릭터가 조금 더 눈에 띄게 움직이도록 합성한 이미지입니다.

이렇게 만들어진 데이터 쌍을 사용해 모델은 작은 움직임을 감지하고 증폭하는 방법을 학습하게 됩니다.

 

즉,

애니메이션에서 캐릭터의 아주 작은 움직임을 더 크게 보이도록 확대하는 것처럼,
인위적으로 생성된 데이터 쌍을 사용하여 딥러닝 모델이 작은 움직임을 더 잘 감지하고 증폭할 수 있도록 훈련하는 과정을 보여주는 것입니다.


근데 왜  분할 데이터셋(PASCAL VOC), 이미지 데이터셋(MSCOCO) 2개를 합성해서 사용할까??

 

1. 다양한 데이터 확보

  • 딥러닝 모델은 다양한 시나리오에서 강력하게 작동하기 위해 많은 양의 데이터를 필요로 합니다.
    하지만 실제로 충분히 다양한 움직임 데이터를 수집하는 것은 매우 어렵고 비용이 많이 듭니다.
  • 합성 데이터를 사용하면 다양한 배경과 움직임을 가진 데이터를 인위적으로 생성할 수 있습니다.
    예를 들어, 여러 배경 위에 동일한 객체를 배치하고,
    다양한 방향과 크기로 움직이게 함으로써 데이터를 무한히 생성할 수 있습니다.

2. 제어 가능한 움직임

  • 합성 데이터를 사용하면 움직임의 크기와 방향을 제어할 수 있습니다.
    이는 모델이 특정 움직임 패턴을 더 잘 학습할 수 있게 도와줍니다.
  • 예를 들어, 세그멘테이션된 객체를 여러 방향으로 움직이게 하여,
    모델이 모든 방향의 움직임을 학습하게 할 수 있습니다.

 

3. 노이즈 없는 학습 데이터 생성

  • 실제 데이터를 사용하면 다양한 종류의 노이즈와 방해 요소가 포함될 수 있습니다.
    합성 데이터는 이러한 노이즈 없이 순수한 움직임만을 포함하므로, 모델이 더 쉽게 학습할 수 있습니다.

 

4. 정확한 학습 목표 제공

  • 합성 데이터를 사용하면, 입력 데이터와 그에 대응하는 정확한 증폭된 움직임 데이터(타겟)를 함께 제공할 수 있습니다. 이는 모델이 학습 과정에서 무엇을 목표로 해야 하는지 명확히 이해하게 해줍니다.
  • 예를 들어, 합성된 "입력"과 "증폭된 결과" 쌍을 사용하여 모델이 원본 움직임과 증폭된 움직임 간의 차이를 학습하도록 합니다.

 

728x90
반응형

댓글