다음은 아래 "Lecture 18. Videos"에 대한 요약 및 필기 내용을 정리한 것입니다. 틀린 내용이 있다면 댓글 부탁드립니다 🙌
Lecture 18의 내용은 비디오 데이터를 처리하고 이해하기 위한 딥러닝 모델에 대해 심도 있게 다루고 있습니다. 주요 내용은 다음과 같습니다:
Video Tensor:
Time x RGB Channel(3) x Height x Width
으로 사용할 때도 있고, RGB Channel(3) x Time x Height x Width
으로 사용할 때도 있습니다.Image vs Video:
이미지 분류 task:
객체를 인식
하고 분류하는 것입니다.비디오 분류 task:
시간에 따라 변화하는 행동을 인식
하고, 이를 분류하는 것입니다.계산 복잡성과 메모리 문제:
비디오 데이터는 매우 크기 때문에 GPU 메모리에 적재하고 처리하는 것이 어렵습니다.
이를 처리하기 위해 프레임 속도를 줄이거나 해상도를 낮추는 등의 전처리 과정이 필요합니다.
단일 프레임 CNN 분류기(Single Frame CNN):
지연 융합(Late Fusion):
초기 융합(Early Fusion):
Reshape 수행
: (T x 3 x H x W) ▶ (3T x H x W)3D CNN (Slow Fusion):
3D CNN을 사용해 공간 및 시간 정보를 여러 층에 걸쳐 점진적으로 융합합니다.
CNN의 각 층에서 3D 컨볼루션과 3D 풀링을 사용하여 공간적, 시간적 정보를 동시에 처리합니다. 이 접근법은 느리지만 지속적으로 시간 정보를 결합해 성능이 뛰어나며, 특히 움직임이 중요한 비디오에서 효과적입니다.
Late Fusion
3 x 20 x 64 x 64
텐서입니다. 여기서 3은 채널 수(RGB), 20은 프레임 수(Time), 64 x 64는 공간적 해상도(Image Size)입니다.Late Fusion
)마지막 Global Average Pooling에서 한 번에 결합
됩니다.Early Fusion
3 x 20 x 64 x 64
텐서입니다.처음부터 시간 정보를 결합
합니다. (Early Fusion
)3D CNN (Slow Fusion)
3 x 20 x 64 x 64
텐서로 시작합니다.✅ Early Fusion vs 3D CNN
1. Conv2D(3x3, 3*20->12):
- 여기서
3x3
은 필터의 크기이며,3*20
은 결합된 입력 채널의 수(3 RGB 채널 x 10 프레임 = 30),->12
에서 12는 출력 채널(필터)의 수입니다.- 출력 채널이 12개라는 것은, 이 컨볼루션 레이어가 12개의 서로 다른 필터를 학습하고, 각각의 필터가
3x3
크기의 입력 데이터에 적용된다는 의미입니다.- 모든 프레임을 결합하여 한 번에 처리하므로, 시간 축의 정보를 단일 레이어에서 완전히 결합해 버립니다.
2. Conv3D(3x3x3, 3 -> 12):- 이 경우,
3x3x3
필터가 3D 공간(시간 포함)을 통해 이동하면서 입력 데이터를 처리합니다.- 입력 채널이 3개이므로, 이 레이어에는 12개의 필터가 각 3개의 입력 채널에 적용됩니다. 여기서도 출력 채널의 수는 12로, 이는 설계자가 지정한 값입니다.
- 필터가 시간 축을 따라 슬라이드하면서 시간적 특성을 고려하여 정보를 처리합니다.
C3D: 3D CNN의 VGGNet:
C3D는 VGG 네트워크와 유사하게 3x3x3 컨볼루션과 2x2x2 풀링으로 구성된 단순한 3D CNN 아키텍처입니다.
이 모델은 Sports-1M에서 좋은 성능을 보여, 많은 비디오 인식 작업에서 사용되었습니다.
그러나 계산 비용이 매우 높아 실행하기 어려운 단점이 있습니다. (3x3x3 conv is very expensive!)
AlexNet
: 0.7 GFLOPVGG-16
: 13.6 GFLOPC3D
: 39.5 GFLOP (VGG의 약 2.9배!!)🔎 Measuring Motion을 측정할 방법이 있을까? => Optical Flow
✍️ Optical Flow는 연속된 이미지 프레임에서 각 픽셀의 움직임을 추정하는 기술로, 이미지에서의 움직임을 감지하고 그 방향과 속도를 벡터 필드로 표현하여 시각화합니다. 이 기술은 주로 비디오 처리, 동작 인식, 비디오 안정화 등 다양한 분야에서 사용됩니다.
- 기본 개념:
- Optical Flow는 특정 시간 에서의 이미지 와 다음 시간 에서의 이미지 사이에서 각 픽셀이 어떻게 이동했는지를 나타내는 벡터 필드를 계산합니다.
- Optical Flow는 각 픽셀의 이동을 나타내는 벡터 를 생성합니다.
- 이 벡터는 픽셀이 프레임 에서 로 이동할 때 얼마나 움직였는지를 보여줍니다.
- 주요 활용:
움직임 감지
: 비디오에서 특정 물체가 어떻게 움직이는지 추적하는 데 사용됩니다.동작 분석
: 사람의 동작을 분석하고 특정 행동을 인식할 수 있습니다.비디오 안정화
: 프레임 간의 차이를 보정하여 비디오를 안정화할 수 있습니다.- 계산 과정:
프레임 선택
: 연속된 두 프레임을 선택합니다.밝기 차이 계산
: 픽셀의 밝기 변화가 없다는 가정하에, 프레임 간의 픽셀 위치 변화를 계산합니다. 이 과정에서 일반적으로 사용되는 수식은 다음과 같습니다:
- 수식:
벡터 필드 생성
: 계산된 이동 벡터를 기반으로 전체 프레임에 대한 움직임 벡터 필드를 만듭니다.- 시각화:
Optical Flow는 수평 이동 와 수직 이동 를 시각화할 수 있습니다. 이는 동영상에서 물체의 움직임을 파악하는 데 매우 유용합니다.
Separating Motion and Appearance: Two-Stream Networks:
Two-Stream Networks는 동작 인식과 같은 비디오 분석 작업에서 "Motion"과 "Appearance"를 분리하여 처리하는 구조입니다.
여기서 Optical Flow
는 Temporal Stream에서 움직임 정보를 추출하는 데 핵심적인 역할을 합니다.
Two-Stream Network 구조:
두 스트림이 각각 다른 입력 데이터를 사용하므로, 각각의 CNN은 자신에게 주어진 입력 데이터의 특성에 맞는 패턴을 학습하게 됩니다. 이는 두 네트워크가 서로 보완적인 정보를 학습할 수 있게 만드는 중요한 요소입니다.
Spatial Stream
: 단일 프레임을 입력으로 사용하여, 정적인 외형 정보(객체의 모양, 색상, 배경 등)를 학습합니다. 이 스트림은 이미지 분류에서 사용되는 전통적인 CNN 아키텍처와 유사합니다.Temporal Stream
: 연속된 프레임들 간의 Optical Flow를 입력으로 사용하여, 비디오 내의 움직임 정보를 학습합니다. Optical Flow는 특정 프레임 사이의 움직임 벡터 필드이므로, 움직임의 방향성과 속도 정보를 효과적으로 학습할 수 있습니다.Two-Stream Network 계산:
🤔 Q. 왜 Optical Flow의 Input은 2(T-1)인가
Optical Flow 입력의 계산 방식
- T는 비디오에서 선택된 연속된 프레임의 수를 의미합니다.
- T-1은 Optical Flow 벡터 필드를 계산하기 위해 필요한 프레임 쌍의 수를 의미합니다. 예를 들어, T개의 프레임이 있다면, 그 중 두 프레임씩 짝을 지어 T-1개의 Optical Flow를 계산할 수 있습니다.
- Optical Flow는 일반적으로 두 개의 성분으로 구성됩니다: 수평(x) 방향 성분과 수직(y) 방향 성분. 따라서 각 프레임 쌍에서 두 개의 채널이 생성되므로, T-1개의 프레임 쌍에서 총 2*(T-1)개의 채널이 만들어집니다.
2
: Optical Flow가 두 개의 채널(수평 및 수직 성분)로 구성되기 때문입니다.(T-1)
: 연속된 두 프레임 사이에서 Optical Flow를 계산하는데 필요한 프레임 쌍의 수입니다.
Recurrent Neural Network (RNN):
장점:
단점:
비디오 작업에서의 활용:
기존 RNN과 차이: Recurrent Convolutional Network (RCN)에서 정보가 업데이트되는 과정은 기존 RNN과 유사하지만, 중요한 차이점은 행렬 곱셈 (matmul) 대신 2D 합성곱 연산(Convolution)을 사용한다는 점입니다.
Self-Attention:
장점:
단점:
비디오 작업에서의 활용:
장기적인 시간 의존성
과 복잡한 공간적 관계
를 효과적으로 모델링할 수 있습니다.
Nonlocal Block
Nonlocal Block:
Nonlocal Block 구조:
Nonlocal Block
: Nonlocal Block은 1x1x1 컨볼루션을 사용해 입력 텐서에서 쿼리(Query), 키(Key), 값(Value)을 생성합니다. 그런 다음 쿼리와 키 간의 점곱(Dot Product)을 통해 Attention 가중치를 계산하며, 이를 기반으로 입력 텐서를 가중합하여 최종 출력을 생성합니다.Residual Connection
: Nonlocal Block은 Residual Connection을 통해 추가적인 학습 없이도 효과적으로 사용할 수 있습니다. 이는 기존 3D CNN 아키텍처에 쉽게 통합할 수 있으며, 초기 가중치를 설정할 때 마지막 1x1x1 컨볼루션 레이어의 가중치를 0으로 초기화해 블록을 처음에는 항등 함수로 작동하도록 설정할 수 있습니다. 이를 통해 기존 모델의 성능을 유지하면서 Nonlocal Block을 점진적으로 통합할 수 있습니다.Nonlocal Block 역할:
글로벌 문맥 이해
: Non-local block은 비디오 전체에서 발생하는 장기적인 시공간적 의존성을 모델링합니다.
전역적인 특징 학습
: Non-local block은 모든 위치 간의 관계를 계산하여 전체 비디오의 전역적인 특징을 학습합니다.
3D-CNN이 왜 있지?
위 그림에 나와있는 3D CNN은 아래와 같은 역할을 수행합니다:
로컬한 시공간 특징 추출
:계층적(hierarchical) 정보 처리
:이처럼 Spatio-Temporal Self-Attention (Nonlocal Block)
은 3D-CNN
과 Non-local block
의 조합을 통해 비디오 데이터를 계층적으로 처리합니다. 로컬 정보와 글로벌 정보를 모두 활용하여 비디오 이해의 정확성을 높히고, 이를 통해 비디오의 다양한 시공간적 패턴을 효과적으로 분석할 수 있게 됩니다.
2D -> 3D 확장
: I3D 모델의 핵심은 2D CNN의 공간적 필터를 시간 축으로 확장하여 3D CNN을 구성하는 것입니다. 이 확장은 단순히 필터를 복사하는 것이 아니라, 시간 축을 고려해 학습하도록 만듭니다. 이렇게 하면, 영상의 시간적 변화를 캡처할 수 있습니다.전이 학습(Transfer Learning)
: I3D는 ImageNet과 같은 대규모 이미지 데이터셋에서 학습된 2D CNN의 가중치를 초기화하는 데 사용됩니다. 이는 비디오 데이터셋에서 3D CNN을 처음부터 학습하는 것보다 빠르게 수렴하고, 더 높은 성능을 발휘합니다.성능 비교
: 위의 성능 비교 그래프에 따르면, I3D는 전통적인 2D CNN과 비교할 때 비디오 분석에서 매우 우수한 성능을 나타냅니다. 특히, Top-1 정확도에서 큰 향상을 보입니다. 이는 I3D의 구조가 비디오에서의 시간적 특징을 잘 포착할 수 있기 때문입니다.시간적 해상도: SlowFast Network의 주요 특징은 서로 다른 시간적 해상도를 사용하는 두 개의 경로(Slow pathway와 Fast pathway)를 통해 비디오를 분석한다는 것입니다.
Slow Pathway: 낮은 FPS (예: 30 FPS) - 비디오의 전체적인 컨텍스트와 긴 시간 프레임을 학습.
이 경로는 낮은 프레임 속도로 비디오의 전체적인 컨텍스트를 학습하는 데 초점을 맞춥니다.
🔎 낮은 FPS: Slow Pathway는 비디오에서 상대적으로 적은 수의 프레임을 사용하여 비디오를 처리합니다. 예를 들어, 초당 30개의 프레임만 처리한다면, 이는 비디오에서 덜 빈번한 업데이트를 의미합니다.
주로 비디오의 전반적인 구조와 흐름을 이해하기 위해 사용되며, 높은 채널 깊이를 사용하여 강력한 표현을 학습합니다.
일반적으로 α(프레임 속도 비율)는 8로 설정되어, Fast Pathway보다 8배 느린 속도로 비디오를 처리합니다.
Fast Pathway: 높은 FPS (예: 240 FPS) - 비디오의 세부적인 동작과 짧은 시간 내의 변화 포착.
이 경로는 높은 프레임 속도로 세부적인 움직임을 포착하는 데 중점을 둡니다.
🔎높은 FPS: Fast Pathway는 비디오의 세밀한 변화를 포착하기 위해 매우 높은 FPS로 비디오를 처리합니다. 예를 들어, 초당 240개의 프레임을 처리한다면, 이는 짧은 시간 간격 내의 작은 변화도 포착할 수 있음을 의미합니다.
세부적인 동작 패턴을 빠르게 캡처하기 위해 설계되었으며, 상대적으로 적은 채널을 사용하여 가볍게 구성됩니다.
채널 비율 θ는 1/8로 설정되어, Slow Pathway에 비해 적은 채널로 동작합니다.
본 강의는 비디오 데이터를 처리하고 이해하기 위한 다양한 딥러닝 모델을 비교하고, 각각의 모델이 어떤 상황에서 효과적인지에 대해 자세히 설명합니다. 딥러닝이 비디오 분석에 적용되는 방법과 그 한계를 파악하는 데 매우 유용한 자료입니다.