Deep Learning 기반 행동 인식 알고리즘
– CNN, LSTM, 3D CNN, ST-GCN, Transformer
행동 인식(Human Action Recognition, HAR)은 영상 속 사람의 움직임을 보고 “걷는다 / 뛴다 / 앉는다” 같은 라벨을 붙이는 문제로 CCTV에서 이상 행동을 감지하거나, 스포츠에서 선수 동작을 분석하거나, VR 게임에서 유저 행동을 실시간으로 분석하는 등 다양한 분야에서 사용된다.
행동 인식 모델은 입력 데이터(ex. 영상, skeleton, 센서)와 요구사항(실시간, 정확도, 장비)에 따라 선택해야 할 알고리즘이 완전히 달라지고 크게 네개로 정리해봤다.
- CNN + LSTM/GRU (2D CNN + RNN)
- 3D CNN (C3D, I3D, SlowFast 등)
- Skeleton 기반 ST-GCN (Graph Convolution)
- Video Transformer 계열 (TimeSformer, ViViT 등)
행동 인식 문제 정의
행동인식(Action Recognition)은 영상/센서 시퀀스를 보고, 어떤 행동인지 분류하는 문제다.
여기서 시간 정보(시퀀스)가 가장 중요하다. 이미지 분류는 한 장의 이미지로 판단하면 되지만, 행동 인식은 여러 프레임의 흐름이 중요하다. 한 장만 보면 ‘팔이 위에 있음’을 판단할 수 있지만, 앞뒤 프레임까지 보면 ‘팔을 들어올리는 동작’인지, ‘던지는 동작’인지 행동이 달라진다.
그래서 행동 인식 모델은 대부분 공간(Spatial) + 시간(Temporal)을 함게 처리하는 구조를 가진다.
1. CNN + LSTM 구조
2D CNN(이미지 특징 추출) + LSTM/GRU(시퀀스 처리)
이미지 한 장에서 특징을 잘 뽑는 CNN과 시퀀스(시간 흐름)을 잘 다루는 RNN/LSTM을 활용하는게 가장 기본이 되는 조합이다.
흐름은 다음과 같이 단순하다.
- 비디오를 여러 프레임으로 나눈다 (ex. 16 frame, 32 frame)
- 각 프레임을 2D CNN (ResNet, EfficientNet 등)에 넣어 프레임별 특징 벡터를 뽑는다.
- 프레임 순서대로 벡터를 LSTM/GRU에 입력해서 시퀀스 전체를 보고 최종 행동 클래스를 예측한다.
Frame_1 ─┐
Frame_2 ─┼─> CNN → feature_1
... ┼─> CNN → feature_2 → LSTM → 행동 분류
Frame_T ─┘ ... ↑
시간 순서로 입력
CNN + LSTM구조는
- 구조가 직관적이고 구현이 쉽다
- 기존에 잘 정리된 이미지 분류용 CNN 백본을 재사용 가능하다
- 포즈 기반이 아니라 순수 RGB만으로도 시작할 수 있다
- 짧은 시퀀스에는 꽤 잘 동작한다
이런 장점이 있다.
하지만
- 프레임 수가 늘어나면 LSTM 시퀀스 길이가 길어져서 학습이 느려지고, gradient vanishing 문제가 생길 수 있다.
- 공간 + 시간을 완전히 통합처리하지는 못하기 때문에 복잡한 행동(ex. 서로 상호작용하는 두 사람)을 정확히 인식하는 데 한계가 있다.
- 3D 공간 정보(깊이, 관절 구조)를 직접 쓰지 못한다.
이런 단점이 있다.
따라서 CNN + LSTM 구조는
- 정적 포즈 + 약간의 움직임 정도를 구분하는 단순한 행동을 분류할 때
- 짧은 클립(1~2초) 안에서 행동이 끝나는 짧은 프레임일 경우
- GPU 자원이 많지 않고, 간단한 행동을 분류하는 경우
- 기존 장비에서 캡처한 영상으로 Proof of Concept (개념 검증)을 빠르게 해보고 싶을 때
이런 경우에 적합하다.
2. 3D CNN: 영상 자체를 3차원(공간 + 시간)으로 보는 방식
평면 이미지가 아니라 시간까지 포함한 작은 영상 큐브를 한 번에 본다.
2D CNN은 이미지(Height × Width)에 필터를 적용하지만,
3D CNN은 비디오(시간 × Height × Width)에 필터를 적용한다.
즉, 커널이 (time, height, width) 방향으로 함께 움직이며 특징을 추출한다.
대표 3D CNN 계열 모델
- C3D
- I3D (Inflated 3D CNN)
- R(2+1)D
- SlowFast Network
단순화해서 보면
입력: (T, H, W, C) 형태의 비디오 클립 (T: 프레임 수)
3D Convolution: (k_t, k_h, k_w) 커널로 3D 필터링
↓
3D Pooling
↓
Fully Connected
↓
Softmax
여기서 한 번의 convolution에서 공간 + 시간 정보가 동시에 섞이기 때문에 행동의 움직임 패턴을 아주 잘 잡아낼 수 있다는 게 중요한 점이다.
3D CNN은
- 움직임(Motion)에 민감해서 행동 인식 정확도가 높다
- 특정 시간 구간의 국소적 움직임을 포착할 수 있기 때문에 복잡한 동작(ex. 스포츠 동작)을 잘 인식할 수 있다
- CNN 계열이기 때문에 병렬화 쉽기 때문에 GPU에서 빠르게 돌릴 수 있다
- 단순 구조 대비 성능이 꽤 좋다 (논문/산업 양쪽에서 오랫동안 표준처럼 사용된 아키텍처)
이런 장점이 있다.
하지만
- 2D CNN보다 연산량이 훨씬 크다 (2D CNN보다 훨씬 비용이 많이 듦)
- 긴 시퀀스를 처리하하기 어렵고, 보통 입력 프레임 수(T)를 8~64로 제한해야 한다
- 실시간성(FPS)을 맞춰야 하는 시스템에서는 모델 경량화 또는 프레임 샘플링 등 추가 설계가 필요하다
- 아주 긴 행동(예: 30초, 1분짜리 행동)은 한 번에 보기 힘들다
라는 단점이 있다.
따라서 3D CNN은 다음과 같은 목적에 적합하다.
- 영상 길이가 길지 않고, 고성능 GPU 사용이 가능할 때
- 정확도가 중요한 오프라인 분석 (ex. 훈련 로그 리플레이, 스포츠 경기 분석 등)
- Raw RGB 영상만으로 행동을 인식하고 싶을 때
- Backbone으로 3D CNN을 쓰고, 그 위에 다른 모듈을 붙이는 구조에 활용
3. Two-Stream Network: RGB + Optical Flow
행동 = 모양(shape) + 움직임(motion)
- RGB: appearance(사람이 어떻게 생겼고, 배경이 뭔지)
- Optical Flow: motion(어디에서 어디로 움직였는지)
따라서 RGB 스트림 CNN + Optical Flow 스트림 CNN 두 개를 병렬로 두고 마지막에 합쳐서 행동 분류를 한다.
Two-Stream Network는 다음과 같은 구조를 가진다.
- RGB 비디오 → CNN 1 → 특징 벡터
- Optical Flow 비디오 → CNN 2 → 특징 벡터
- 둘을 concat 또는 average → FC → 행동 분류
Two-Stream Network는
- 움직임 정보를 명시적으로 사용하기 때문에 행동 구분에 유리하다
- 단순히 RGB만 쓰는 것보다 더 높은 정확도를 보인다
는 장점을 가진다.
하지만
- Optical Flow 계산이 매우 느릴 수 있다.
- 구현 복잡도가 높고 계산량 증가의 이유로 실시간 시스템에서는 적합하지 않다.
라는 단점을 가진다.
따라서 Two-Stream Network는 실제 논문/대회에서 많이 쓰이지만, 실시간 시스템에서는 flow 대신 3D CNN이나 Temporal Conv로 대체하는 경우가 많다.
4. ST-GCN: Skeleton + 그래프 + 시간 활용한 Graph 기반 행동 인식
좌표만 보고 행동인식
영상 전체 픽셀이 아니라, 사람의 Skeleton(관절 좌표)만 가지고 행동을 인식하는 접근도 가능하다.
여기서 나오는 게 ST-GCN (Spatial-Temporal Graph Conbolutional Network) 이다.
Skeleton만 사용하는 이유는 다음과 같다.
- 배경, 조명, 복장, 카메라 색감 등은 행동 자체와는 크게 상관없다
- 실제로 서있음 / 앉음 / 뛰기 같은 행동은 관절 간 상대 위치·각도·속도에 훨씬 더 잘 반영된다.
- Skeleton만 사용하면 입력 차원이 엄청 줄어들기 때문에 연산량은 감소하고 일반화 성능은 증가한다.
- 실제 RGB 얼굴이 아니라, 관절 좌표만 사용하기 때문에 프라이버시 측면에서도 유리하다.
ST-GCN의 Skeleton은 본질적으로 그래프 구조로 볼 수 있다.
- 각 관절(joint)이 노드(node)
- 관절을 잇는 뼈(bone)가 엣지(edge)
그래서 이미지처럼 2D grid가 아니라 그래프로 convolution을 하자는 아이디어에서 나온 것이 GCN(Graph Convolution Network)기반 행동 인식 모델이다.
이 상태에서 Spatial(공간) + Temporal(시간) 둘 다를 그래프로 표현하면
- 한 프레임 안에서는 → 관절끼리의 연결 관계 (공간 그래프)
- 프레임 간에는 → 같은 관절의 시간 축 연결 (시간 그래프)
이를 합쳐서 Spatial-Temporal Graph를 만들고, 여기에 Graph Convolution을 적용하는 것이 ST-GCN의 핵심이다.
(관절1_t)────(관절2_t) ... 시간 t
│ │
(관절1_t+1)──(관절2_t+1) ... 시간 t+1
│ │
... ...
ST-GCN은
- RGB 없이 Skeleton만으로도 높은 정확도를 보인다.
- 입력 크기가 작고, 3D CNN보다 훨씬 가볍다
- 조명/배경/카메라 노이즈에 강하다
라는 장점이 있지만,
- Skeleton을 먼저 추출하고 Pose Estimation 전처리가 필요하다
- Skeleton 추출 단계에서 오류가 많으면 성능이 떨어진다
- 복잡한 상호작용(사람 + 물체) 표현은 다소 제한적이다
라는 단점도 존재한다.
따라서 Skeleton 기반 ST-GCN은
- 포즈 중심 행동 분석
- Depth 카메라 / Body Tracking 센서 활용 가능한 경우
- 실시간성 + 높은 정확도 둘다 어느 정도 필요한 헬스케어, 피트니스 등
이런 상황에 적합하다.
6. Transformer 기반 행동 인식
Transformer는 원래 NLP(자연어 처리)에서 시작했지만, 요즘에는 비디오 행동인식에서도 좋은 성능을 보인다.
대표적인 비디오 Transformer 계열로는
- TimeSformer
- ViViT
- Video Swin Transformer
- MViT
등이 있다.
Transformer는 sequence 내의 모든 위치가 서로를 참조(attention)하도록 만들기 때문에, 긴 시퀀스에서의 장기 의존성(long-term dependency) 을 잘 잡는다.
즉, 이미지에서 Vision Transformer(ViT)가 하는 것과 비슷하게, 비디오에서는 공간-시간 패치를 토큰으로 보고, Self-Attention을 통해 토큰들 간의 관계를 학습하는 방식이다.
영상에서도 비슷한 컨셉을 적용하여 단순화하면
- 비디오를 T개의 프레임 패치나 토큰으로 나눈다.
- 각 프레임을 여러 패치로 나누고, 패치들을 토큰 embedding으로 바꾼다.
- 시간/공간 방향으로 Self-Attention을 적용해 어떤 패치가 어떤 패치롸 관계가 깊은지 학습한다. (시간+공간 상관관계 학습)
- 최종적으로 행동 클래스를 예측한다.
또는 Skeleton 기반으로도 가능하다
- 각 joint를 하나의 토큰으로 보고
- 프레임/관절 단위로 attention 적용
Transformer 기반 행동 인식은
- CNN보다 더 유연하게 long-range dependency(멀리 떨어진 프레임/공간까지) 학습 가능하다.
- 복잡한 상호작용(사람+사람, 사람+물체)도 잘 표현.
- 최신 논문/벤치마크에서 SOTA(State-of-the-art) 성능 많이 차지.
- 특정 프레임/관절이 어떤 역할을 했는지 attention map으로 분석 가능
이런 장점이 있지만
- 연산량이 매우 크다. (3D CNN보다 더 무거울 때도 있음)
- 대규모 데이터셋이 필요하고, 학습 난이도가 높다.
- 아직까지는 실시간 시스템에 바로 적용하기엔 부담이 큰 축.
이런 단점이 존재한다.
따라서
- 오프라인 분석, 리서치, 대규모 데이터 기반 행동 인식 모델링
- 실시간이 아닌 정확도가 최우선인 환경
- 클라우드 기반 후처리/분석 파이프라인
에 적합하다.
7. 실시간 행동 인식을 만들 때 고려해야 할 것들
실제로 시스템을 설계할 때 아래 요소들을 고려해야한다.
Latency vs Accuracy 트레이드오프
- 3D CNN, Transformer, ST-GCN 등은 성능은 높지만 무거울 수 있다.
- 반대로 MLP/LSTM 기반 가벼운 모델은 실시간에 좋지만 정확도 제한된다.
따라서
1단계 → 가벼운 모델로 coarse한 분류
2단계 → 중요 이벤트에만 무거운 모델로 정밀 재분류
같은 two-stage 구조를 쓰기도 한다.
Window Size: 몇 프레임을 보고 판단해야할까?
8프레임만 봐도 되는 행동이 있고 최소 30프레임 이상 봐야 판단되는 행동도 있다.
짧게 보면 빠르지만, 오판 위험 증가,
길게 보면 정확해지지만, 반응 속도 떨어지는 문제를 고려해야한다.
실시간 시스템에서의 문제
특히 실시간 행동인식에서는 다음 사항도 신경써주어야한다.
- FPS를 일정하게 유지하기 위해
- 프레임 스킵
- 모델 quantization (FP16, INT8)
- skeleton만 사용 (RGB 미사용)
- GPU/CPU를 어떻게 나누어 쓸지 설계 필요
8. 행동 인식 알고리즘 선택 가이드
그렇다면 실제 프로젝트에서는 어떤 기준으로 모델을 선정해야할까
입력 데이터 타입 기준
- RGB 영상만 있을 때
- 간단한 PoC: 2D CNN + LSTM
- 정확도가 중요한 오프라인 분석일 경우 : 3D CNN + Video Transformer
- Skeleton(관절 좌표) 또는 3D 카메라가 있을 경우
- Skeleton 기반 ST-GCN 또는 MLP/LSTM 기반 포즈 분류기
- 포즈 중심의 행동 분석에 특히 적합
분류 타입 기준
- 정적 포즈 + 짧은 시퀀스 (ex. 서기 / 앉기 등)
- Skeleton + MLP 또는 작은 LSTM
- 또는 3D CNN (짧은 클립 기준)
- 짧은 동작(펀치, 킥, 총 쏘기 등) 분류
- 3D CNN 계열 (C3D, I3D, R(2+1)D)
- RGB만으로도 꽤 높은 정확도
- 프라이버시 중요 + 관절 정보가 중요한 경우 (ex. 재활, 체육, 피트니스)
- Skeleton 기반 ST-GCN
- Skeleton + Temporal model (LSTM/Temporal Conv/Transformer)
- 긴 시퀀스 + 복잡한 행동 패턴 (ex. 의심스러운 행동, 이상행동 감지, 여러 사람 상호작용)
- Transformer 계열
- Graph + Attention 혼합 모델
요구사항 기준
- 실시간 + 임베디드
- Skeleton + MLP/LSTM
- 경량 3D CNN
- 실시간 + GPU 서버 가능
- 3D CNN (경량) + Skeleton classifier
- 오프라인 분석 + 정확도 최우선
- 3D CNN
- Video Transformer
- 포즈 중심 + 센서 있음
- ST-GCN
- Skeleton-based models
행동 인식 분류 모델을 설계하고 공부하면서 고려했던 사항들을 정리해봤다.
다음번엔 이 행동 인식을 추적하면서 사람 객체 id 추적 알고리즘으로 돌아오겟습니당~
'AI' 카테고리의 다른 글
| 0. AI 개발 기초 개념 (6) | 2025.08.10 |
|---|