수민 '-'

플오그래밍

제가 작성하는 모든 글은 절대 상업적인 이용이 아니며, 그저 개인적인 공부 용도로만 사용하는 것임을 밝힙니다.

동영상 데이터와 수화 인식 - 시공간 분석, 3D CNN, WLASL 데이터셋

동영상은 공간 + 시간을 함께 다룬다

컴퓨터 비전에서 동영상은 연속된 프레임의 집합으로, 공간 정보(픽셀, 형태)뿐 아니라 시간에 따른 변화(움직임, 동작) 를 함께 담는다. 이 시공간적 특성을 활용해 행동 인식, 제스처·수화 인식, 장면 이해 등을 다룰 수 있다. 이 글에서는 동영상 데이터의 특성분석 기법(3D CNN, 2D CNN 변형, Attention)을 정리한 뒤, 수화 단어 인식용 WLASL 데이터셋 소개와 클래스별 필터링까지 다룬다. VideoDataset·R3D 학습·추론 등 실전 구현은 다음 편에서 이어서 정리한다.

(수화 인식 데이터를 바탕으로 재구성했다.)


1. 동영상 데이터의 특성

동영상 데이터는 정적 이미지와 달리 다음을 동시에 가진다.

  • 공간 정보: 각 프레임의 픽셀, 객체 위치·형태
  • 시간 정보: 프레임 간 움직임, 동작 순서, 상호작용

그래서 객체 추적, 행동 인식, 비디오 요약 등에서는 프레임 간 상관관계와 움직임을 어떻게 뽑아 쓰느냐가 핵심이다.


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

2-1. 시계열 분석 (3D CNN)

3D CNN은 동영상을 공간(가로·세로) + 시간(프레임 순서) 을 함께 쓰는 3차원 합성곱으로 처리한다. 2D CNN이 한 장의 이미지에서만 특징을 보는 것과 달리, 여러 프레임을 한꺼번에 입력해 움직임·흐름 같은 시간적 패턴까지 학습한다. 행동 인식, 제스처·수화 인식, 스포츠 장면 분석처럼 연속성과 동작 맥락이 중요한 태스크에 잘 맞는다.

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

여러 프레임을 채널 방향으로 이어 붙여 하나의 다채널 이미지로 만든 뒤 2D CNN에 넣는 방식이다. 예를 들어 12프레임이면 12×3=36채널 입력처럼 구성할 수 있다. 3D CNN보다 연산·메모리가 적지만, 프레임 간 세밀한 시간 정보는 제한적으로만 반영된다. 정적인 장면이 더 중요한 경우에 유리하다.

2-3. Attention 기법

모든 프레임을 동등하게 쓰지 않고, 프레임별 중요도(가중치) 를 학습해 중요한 순간에 더 큰 비중을 두는 방식이다. 긴 동영상에서 핵심 장면을 골라 쓰는 데 유리하고, 행동 인식·영상 요약·이상 탐지 등에 활용된다.


3. WLASL 데이터셋

WLASL(World-Level American Sign Language)미국 수화 단어를 단위로 한 비디오 데이터셋이다. 같은 단어를 여러 사람이 수행한 영상이 있어 표현 다양성을 반영하며, 손 모양·움직임·얼굴 표정 등 시계열적 비주얼 특징을 학습하기 좋다. 수화 인식, 제스처 인식, 청각장애인 보조 기술 개발 등에 쓰인다.

Kaggle에서 다운로드한 뒤 WLASL_v0.3.jsonvideos/ 디렉터리를 사용한다.

# Kaggle API 설정 후
kaggle datasets download risangbaskoro/wlasl-processed
unzip -q wlasl-processed.zip
import json
import os

data_root = '.'
annotation_filename = 'WLASL_v0.3.json'
video_dir = os.path.join(data_root, 'videos')

with open(os.path.join(data_root, annotation_filename), 'r') as f:
    annotations = json.load(f)

어노테이션 항목 하나는 gloss(수화 단어), instances(각 동영상의 video_id, split 등) 구조를 가진다.


4. 클래스별 영상 개수와 필터링

클래스(단어)별로 실제 존재하는 영상 개수를 세고, 일정 개수 미만인 클래스는 제외해 학습 가능한 클래스만 남긴다.

from collections import defaultdict

class_map = defaultdict(int)
for annot in annotations:
    for instance in annot['instances']:
        video_path = os.path.join(video_dir, f"{instance['video_id']}.mp4")
        if os.path.exists(video_path):
            class_map[annot['gloss']] += 1

# 예: 최소 5개 이상 영상이 있는 클래스만 사용
max_cnt = 5
new_annotations = []
class_list = []
for annot in annotations:
    if class_map[annot['gloss']] < max_cnt:
        continue
    class_list.append(annot['gloss'])
    for instance in annot['instances']:
        video_path = os.path.join(video_dir, f"{instance['video_id']}.mp4")
        if not os.path.exists(video_path):
            continue
        new_annotations.append({
            'filename': f"{instance['video_id']}.mp4",
            'label': annot['gloss'],
            'split': instance['split']
        })

annotations = new_annotations

5. 정리

주제 핵심 포인트
동영상 데이터 공간 + 시간 정보를 함께 쓰는 시공간 데이터로, 프레임 간 상관관계·움직임 추출이 중요하다.
3D CNN 공간·시간 축을 함께 합성곱해 움직임·동작 패턴을 학습한다. 수화·행동 인식에 활용한다.
2D CNN 변형 프레임을 채널로 붙여 다채널 이미지로 만든 뒤 2D CNN에 넣는다. 연산은 적지만 시간 정보는 제한적이다.
Attention 프레임별 중요도를 학습해 핵심 장면을 강조한다.
WLASL 미국 수화 단어 단위 비디오 데이터셋으로, 수화 인식·제스처 인식 연구에 널리 쓰인다.

마치며

  • 동영상 분석에는 3D CNN(시계열적 움직임), 2D CNN 변형(프레임 합성), Attention(중요 프레임 강조) 등이 쓰인다.
  • WLASL은 수화 단어 인식 실험에 바로 쓸 수 있는 공개 데이터셋이며, 클래스별 영상 수를 확인한 뒤 최소 개수로 필터링하면 학습이 안정적이다.

VideoDataset 구성, R3D(3D CNN) 로 학습·추론하는 실전 코드는 다음 편에서 이어서 정리한다.