Motion Magnification 이란??
영상에서 미세한 움직임을 증폭시켜,
육안으로는 감지하기 어려운 미세한 움직임을 더 잘 볼 수 있게 해주는 기법입니다.
이 기법은 영상에서 작은 진동이나 움직임을 감지하는 데 유용합니다.
예를 들어, 사람의 맥박이 뛰는 모습을 영상에서 더 뚜렷하게 보여줄 수 있으며,
구조물의 미세한 흔들림을 감지하는 데 사용될 수도 있습니다.
이 방법은 Eulerian Video Magnification이라는 알고리즘을 통해 수행되며,
공간적 필터링과 시간적 필터링을 결합하여 움직임을 증폭시킵니다.
기본적으로 영상의 각 픽셀에 대해 움직임을 분석하고, 그 움직임을 증폭시켜 더 뚜렷하게 보이게 합니다.
딥러닝 기반 Motion Magnification의 원리
- 데이터 수집 및 전처리:
- 움직임이 있는 다양한 동영상 데이터셋을 수집하고 전처리합니다.
- 원본 동영상과 그에 대응하는 움직임 증폭 동영상(혹은 관련된 변화)을 학습 데이터로 사용합니다.
- 모델 아키텍처 설계:
- CNN(Convolutional Neural Network)이나 RNN(Recurrent Neural Network) 같은 딥러닝 모델을 사용하여 영상을 분석하고, 프레임 간의 움직임을 추출합니다.
- 예를 들어, U-Net 구조 같은 encoder-decoder 아키텍처가 흔히 사용됩니다. 입력 프레임을 받아서 특징을 추출하고, 이를 증폭된 움직임을 반영한 프레임으로 재구성합니다.
- 모델 학습:
- 원본 동영상과 증폭된 동영상(혹은 생성하고자 하는 결과)을 비교하면서 모델을 학습시킵니다.
- 손실 함수로는 MSE(Mean Squared Error)나 L1 loss 등을 사용하여, 모델이 프레임의 움직임을 증폭하도록 학습합니다.
- 모델 예측:
- 학습된 모델에 새로운 동영상을 입력하면, 모델은 해당 동영상에서 움직임을 감지하고, 미세한 움직임을 증폭한 결과를 생성합니다.
- 후처리 및 결과물 생성:
- 모델이 생성한 증폭된 프레임을 후처리하여 최종 영상을 만듭니다.
- 이 과정에서 필터링이나 색상 보정 등이 추가될 수 있습니다.
참고 사이트
https://axial-momag.github.io/axial-momag/
Synthetic Data(합성 데이터) - Motion Magnification 기술에서 사용
애니메이션 캐릭터의 움직임
애니메이션 캐릭터가 등장하는 장면을 만드는 중입니다.
이 캐릭터가 아주 작은 움직임, 예를 들어 손을 살짝 움직이거나 눈을 깜빡이는 것 같은 움직임을 해야 합니다.
하지만, 이런 작은 움직임을 눈에 잘 띄게 하려면 어떻게 해야 할까요? 이를 위해 우리는 두 가지 작업이 필요합니다.
- 캐릭터와 배경을 분리:
- 먼저, 애니메이션 캐릭터(루피)를 배경(바다)에서 분리합니다.
- 이때 캐릭터는 객체 분할 데이터셋(PASCAL VOC)에서 가져오고,
배경은 다른 이미지 데이터셋(MSCOCO)에서 가져옵니다.
- 움직임을 합성:
- 이제 이 캐릭터를 배경 위에 놓고, 아주 작은 움직임을 추가합니다.
예를 들어, 캐릭터가 조금씩 움직이는 것처럼 보이게 하거나 손이 살짝 흔들리는 것처럼 만드는 것입니다. - 이렇게 만들어진 "원본 프레임(움직임이 거의 없는)"과
"증폭된 프레임(움직임이 강화된)"의 쌍을 사용해 모델을 학습시킵니다.
- 이제 이 캐릭터를 배경 위에 놓고, 아주 작은 움직임을 추가합니다.
학습 데이터 생성:
- 원본(캐릭터의 기본 움직임): 캐릭터가 배경에서 거의 움직이지 않거나, 아주 미세하게 움직입니다.
- 증폭된 데이터(더 뚜렷한 움직임): 같은 캐릭터가 조금 더 눈에 띄게 움직이도록 합성한 이미지입니다.
이렇게 만들어진 데이터 쌍을 사용해 모델은 작은 움직임을 감지하고 증폭하는 방법을 학습하게 됩니다.
즉,
애니메이션에서 캐릭터의 아주 작은 움직임을 더 크게 보이도록 확대하는 것처럼,
인위적으로 생성된 데이터 쌍을 사용하여 딥러닝 모델이 작은 움직임을 더 잘 감지하고 증폭할 수 있도록 훈련하는 과정을 보여주는 것입니다.
근데 왜 분할 데이터셋(PASCAL VOC), 이미지 데이터셋(MSCOCO) 2개를 합성해서 사용할까??
1. 다양한 데이터 확보
- 딥러닝 모델은 다양한 시나리오에서 강력하게 작동하기 위해 많은 양의 데이터를 필요로 합니다.
하지만 실제로 충분히 다양한 움직임 데이터를 수집하는 것은 매우 어렵고 비용이 많이 듭니다. - 합성 데이터를 사용하면 다양한 배경과 움직임을 가진 데이터를 인위적으로 생성할 수 있습니다.
예를 들어, 여러 배경 위에 동일한 객체를 배치하고,
다양한 방향과 크기로 움직이게 함으로써 데이터를 무한히 생성할 수 있습니다.
2. 제어 가능한 움직임
- 합성 데이터를 사용하면 움직임의 크기와 방향을 제어할 수 있습니다.
이는 모델이 특정 움직임 패턴을 더 잘 학습할 수 있게 도와줍니다. - 예를 들어, 세그멘테이션된 객체를 여러 방향으로 움직이게 하여,
모델이 모든 방향의 움직임을 학습하게 할 수 있습니다.
3. 노이즈 없는 학습 데이터 생성
- 실제 데이터를 사용하면 다양한 종류의 노이즈와 방해 요소가 포함될 수 있습니다.
합성 데이터는 이러한 노이즈 없이 순수한 움직임만을 포함하므로, 모델이 더 쉽게 학습할 수 있습니다.
4. 정확한 학습 목표 제공
- 합성 데이터를 사용하면, 입력 데이터와 그에 대응하는 정확한 증폭된 움직임 데이터(타겟)를 함께 제공할 수 있습니다. 이는 모델이 학습 과정에서 무엇을 목표로 해야 하는지 명확히 이해하게 해줍니다.
- 예를 들어, 합성된 "입력"과 "증폭된 결과" 쌍을 사용하여 모델이 원본 움직임과 증폭된 움직임 간의 차이를 학습하도록 합니다.
'AI Naver boost camp > [Week 04] CV 1' 카테고리의 다른 글
Class Activation Mapping (CAM)과 Grad-CAM (0) | 2024.08.29 |
---|---|
ZFNet 딥러닝 모델 시각화와 데이터 증강(Augumentation) 이해 (2) | 2024.08.29 |
댓글