[Deep Learning] 동영상 데이터 분석: 3D CNN과 수화 인식 실습

2026. 1. 29. 14:35·개념 정리 step2/멀티모달(Multi-modal)

오늘은 이미지라는 '공간'에 '시간'의 축을 더해 데이터를 분석하는 비디오 데이터 분석 기법을 알아보고, 실제 미국 수화(ASL) 데이터를 분류하는 모델을 만들어 보겠습니다.

1. 동영상 데이터

일반적인 이미지는 $H(높이) \times W(너비) \times C(채널)$의 3차원 구조입니다. 하지만 동영상은 여기에 $T(시간/프레임 수)$라는 차원이 하나 더 추가됩니다.

  • 공간적 정보: 각 프레임 속 객체의 위치, 모양, 색상
  • 시간적 정보: 프레임 사이에서 일어나는 객체의 움직임, 변화, 흐름

이 두 가지를 동시에 파악해야 "사람이 손을 흔든다" 또는 "수화로 '안녕'이라고 말한다"는 맥락을 이해할 수 있습니다.


2. 동영상 분석 기법 세가지

동영상 데이터를 처리하기 위해 주로 사용하는 세 가지 핵심 기법입니다.

① 3D CNN (Three-Dimensional Convolutional Neural Networks)

시계열 분석에서 사용하는 3D CNN은 동영상 데이터를 단순히 독립된 이미지 프레임으로 보지 않고, 공간(가로·세로) + 시간 축(프레임 순서)을 함께 고려하여 특징을 추출하는 방법입니다. 즉, 2D CNN이 한 장의 이미지에서 주변 픽셀 간의 상관관계를 분석하는 것과 달리, 3D CNN은 연속된 여러 프레임을 동시에 입력으로 받아 움직임, 변화, 흐름과 같은 시간적 패턴까지 학습할 수 있습니다. 이러한 특성 덕분에 사람의 행동 인식, 제스처 분석, 스포츠 장면 분석처럼 동영상의 연속성과 동작 맥락이 중요한 문제에서 효과적으로 활용됩니다.

  • 특징: 공간 정보와 시간 흐름을 한 번에 학습합니다.
  • 용도: 행동 인식, 제스처 분석 등 연속성이 중요한 작업.

② 이미지 합성 (2D CNN 변형)

이미지 합성(2D CNN 변형) 기법은 동영상의 모든 프레임을 시간 축으로 직접 처리하지 않고, 여러 장의 프레임을 하나의 이미지로 합쳐 2D CNN으로 분석하는 방식입니다. 예를 들어, N개의 연속된 프레임을 채널 단위로 이어 붙여 입력하면 기존 RGB(3채널) 대신 N채널 이미지를 구성할 수 있으며, 이를 통해 CNN이 공간적 특징을 추출하면서 제한적으로 시간적 변화를 반영하게 됩니다. 이 방법은 3D CNN에 비해 연산량과 메모리 사용이 크게 줄어들어 효율적이며, 시간적 흐름보다 정적인 장면 정보가 중요한 경우 유리하지만, 프레임 간의 세밀한 움직임이나 시계열적 맥락을 충분히 반영하지 못한다는 한계가 있습니다.

  • 장점: 연산량이 적고 가볍습니다.
  • 단점: 프레임 간의 미세한 시간적 선후 관계를 완벽히 파악하기 어렵습니다.

③ Attention 기법

Attention 기법을 활용한 동영상 처리는 모든 프레임을 동일하게 다루는 대신, 각 프레임의 중요도를 학습하여 가중치를 다르게 부여하는 방식입니다. 즉, 동영상 전체 길이 중에서 특정 순간이 전체 의미나 분류 결과를 크게 좌우할 수 있는데, Attention은 이런 중요한 프레임에 더 많은 비중을 두어 분석합니다. 이 과정에서 모델은 각 프레임에서 추출된 특징들을 종합하고, 의미 있는 프레임은 강조하고 덜 중요한 프레임은 억제하여 최종적인 표현을 생성합니다. 이러한 방식은 긴 동영상에서도 핵심 장면을 효과적으로 포착할 수 있어, 행동 인식, 영상 요약, 이상행동 탐지 같은 응용에 특히 강력하게 활용됩니다.


3. 실습: WLASL 데이터셋으로 수화 인식 모델 만들기

이번 실습에서는 미국 수화 단어 데이터셋인 WLASL(World-Level American Sign Language)을 활용했습니다.

https://www.kaggle.com/datasets/risangbaskoro/wlasl-processed

 

WLASL (World Level American Sign Language) Video

12k processed videos of Word-Level American Sign Language glossary performance

www.kaggle.com

Step 1. 데이터 준비 및 필터링

데이터셋의 모든 단어를 다 쓰기엔 양이 방대하므로, 영상 개수가 5개 이상인 클래스만 필터링하여 학습의 효율성을 높였습니다.

# 최소 5개 이상의 데이터를 가진 클래스만 추출
max_cnt = 5
new_annotations = []
for annot in annotations:
    cls_cnt = class_map[annot['gloss']]
    if cls_cnt >= max_cnt:
        # 데이터 정제 및 리스트업
        ...

Step 2. 커스텀 데이터셋 구축 (VideoDataset)

비디오 데이터는 프레임 수가 제각각입니다. 이를 모델에 넣기 위해 고정된 프레임 수(예: 12프레임)로 샘플링하는 과정이 필수적입니다.

  • 프레임이 부족하면? 마지막 프레임을 복사해서 채웁니다.
  • 프레임이 넘치면? 랜덤하게 12장을 선택합니다.

Step 3. 모델 설계 (R3D_18)

직접 VGG 스타일의 3D 모델을 설계해 볼 수도 있지만, 성능을 위해 사전 학습된 r3d_18 모델을 가져와 전이 학습(Transfer Learning)을 수행했습니다.

from torchvision.models.video import r3d_18, R3D_18_Weights

# 사전 학습된 3D ResNet 모델 로드
model = models.video.r3d_18(weights=R3D_18_Weights.DEFAULT)
# 최종 출력 레이어를 우리 데이터셋의 클래스 개수에 맞게 수정
model.fc = nn.Linear(512, len(class_list))

Step 4. 학습 시 주의사항 (Permute)

PyTorch의 2D CNN은 (Batch, C, H, W)를 받지만, 3D CNN 모델은 (Batch, C, T, H, W) 형태를 원합니다. 따라서 데이터 로더에서 나온 프레임 순서를 바꿔주는 작업이 꼭 필요합니다.

# [Batch, T, C, H, W] -> [Batch, C, T, H, W]
images = images.permute(0, 2, 1, 3, 4)

4. 마무리

이번 실습에서는 데이터 용량과 학습 시간 관계상 높은 정확도를 기록하지는 못했습니다. (비디오 학습은 정말 많은 컴퓨팅 자원이 필요하네요!)

하지만 단순히 정지된 이미지를 넘어, 시간이라는 차원을 딥러닝이 어떻게 처리하는지 흐름을 파악한 것에 큰 의미를 둡니다.

'개념 정리 step2 > 멀티모달(Multi-modal)' 카테고리의 다른 글

[생성형 AI] GAN와 DCGAN 개념 정리와 실습  (0) 2026.01.31
[멀티 모달] 오토인코더(Autoencoder): 비지도 학습과 생성 모델의 기초  (0) 2026.01.30
[Deep Learning] Vision Transformer(ViT) Multi-Branch 구현 실습  (0) 2026.01.23
[NLP] KLUE-BERT 기반 멀티레이블 혐오 표현 분류 실습  (0) 2026.01.22
[Deep Learning] 트랜스포머(Transformer): NLP 아키텍처 정리  (0) 2026.01.19
'개념 정리 step2/멀티모달(Multi-modal)' 카테고리의 다른 글
  • [생성형 AI] GAN와 DCGAN 개념 정리와 실습
  • [멀티 모달] 오토인코더(Autoencoder): 비지도 학습과 생성 모델의 기초
  • [Deep Learning] Vision Transformer(ViT) Multi-Branch 구현 실습
  • [NLP] KLUE-BERT 기반 멀티레이블 혐오 표현 분류 실습
고니3000원
고니3000원
공부 내용 정리, 자기발전 블로그 입니다. 기존 네이버 블로그에서 티스토리로 이전했습니다. https://blog.naver.com/pak1010pak
  • 고니3000원
    곤이의 공부 블로그
    고니3000원
  • 전체
    오늘
    어제
    • 분류 전체보기 (178) N
      • 1. AI 논문 + 모델 분석 (20)
        • AI 논문 분석 (13)
        • AI 모델 분석 (7)
      • 2. 자료구조와 알고리즘 (16)
        • 2-1 자료구조와 알고리즘 (13)
        • 2-2 강화학습 알고리즘 (3)
      • 3. 자습 & 메모(실전, 실습, 프로젝트) (25)
        • 3-1 문제 해석 (4)
        • 3-2 메모(실전, 프로젝트) (14)
        • 3-3 배포 실전 공부 (7)
      • 4. [팀] 프로젝트 및 공모전 (14)
        • 4-1 팀 프로젝트(메모, 공부) (1)
        • 4-2 Meat-A-Eye (6)
        • 4-3 RL-Tycoon-Agent (3)
        • 4-4 구조물 안정성 물리 추론 AI 경진대회(D.. (4)
      • 5. [개인] 프로젝트 및 공모전 (0)
        • 4-1 귀멸의칼날디펜스(자바스크립트 활용) (5)
        • 4-2 바탕화면 AI 펫 프로그램 (4)
        • 4-3 개인 프로젝트(기타) (3)
      • 개념 정리 step1 (32)
        • Python 기초 (7)
        • DBMS (1)
        • HTML | CSS (3)
        • Git | GitHub (1)
        • JavaScript (5)
        • Node.js (5)
        • React (1)
        • 데이터 분석 (6)
        • Python Engineering (3)
      • 개념 정리 step2 (57) N
        • Machine | Deep Learning (15)
        • 멀티모달(Multi-modal) (23)
        • 강화 학습 (10)
        • AI Agent (9) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 곤이의 블로그(Naver->Tistory)
    • Github
  • 공지사항

  • 인기 글

  • 태그

    프로젝트
    html
    자료구조
    자바스크립트
    논문 리뷰
    강화 학습
    javascript
    데이터분석
    공모전
    github
    OCR
    Grad-CAM
    알고리즘
    transformer
    Attention Is All You Need
    paddleocr
    Ai
    파인튜닝
    Vision
    강화학습
    구현
    파이썬
    OCR학습
    학습
    ViT
    bottleneck
    귀칼
    EfficientNet
    Python
    pandas
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고니3000원
[Deep Learning] 동영상 데이터 분석: 3D CNN과 수화 인식 실습
상단으로

티스토리툴바