Action Recognition
액션 인식 또는 인간 행동 인식(HAR)은 시간에 따른 움직임을 모델링해 동영상 속 사람이 무엇을 하는지 분류합니다. 방법, 데이터셋, 코드를 다룹니다.
동작 인식은 비디오에서 사람이나 때로는 동물 또는 로봇이 걷기, 손 흔들기, 넘어지기, 골프채 휘두르기, 팔굽혀펴기와 같은 어떤 동작을 하는지 분류하는 컴퓨터 비전 작업입니다. 동작 중 상당수는 단일 프레임만으로 구별할 수 없으므로 이미지 분류를 시간 축으로 확장한 것입니다. 누군가가 중간쯤 내려간 정지 이미지만 보면 앉는 중인지 일어서는 중인지 알기 어렵지만, 짧은 클립을 보면 어떤 동작인지 알 수 있습니다. 이 용어는 인간 활동 인식(HAR)과 서로 바꿔 쓰이는 경우가 많지만, HAR은 가속도계와 같은 웨어러블 센서의 인식도 포함합니다.
동작 인식의 작동 방식#
모델은 일반적으로 몇 초 분량의 비디오에서 샘플링한 8~64프레임의 클립을 입력받아 두 종류의 정보를 학습합니다. 사람과 객체의 외형을 나타내는 공간 특징과 이들의 움직임을 나타내는 시간 특징입니다. 초기 2-스트림 네트워크는 RGB 프레임과 광학 흐름을 별도 분기에서 처리한 다음 예측을 결합했습니다. 3D 합성곱 신경망은 높이, 너비, 시간 축을 한 번에 따라 합성곱을 수행합니다. I3D는 ImageNet으로 사전 학습된 2D 이미지 필터를 3D로 확장해 이를 구현했고, SlowFast는 외형을 위한 낮은 프레임률 경로와 움직임을 위한 높은 프레임률 경로를 결합합니다. 비디오 Transformer는 시공간 패치에 셀프 어텐션을 적용하고, VideoMAE는 비디오의 상당 부분을 마스킹한 뒤 복원하는 방식으로 사전 학습합니다.
TorchVision 비디오 모델의 3D CNN은 몇 줄의 코드로 클립을 분류합니다.
import cv2
import numpy as np
import torch
from torchvision.models.video import R3D_18_Weights, r3d_18
# Load a 3D CNN pretrained on the 400 action classes of Kinetics-400
weights = R3D_18_Weights.KINETICS400_V1
model = r3d_18(weights=weights).eval()
# Read 16 consecutive frames from a short exercise video
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_pose_demo.mp4")
frames = [cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2RGB) for _ in range(16)]
# Stack the frames into one clip shaped (time, channels, height, width) and classify it
clip = torch.from_numpy(np.stack(frames)).permute(0, 3, 1, 2)
batch = weights.transforms()(clip).unsqueeze(0)
with torch.no_grad():
probs = model(batch).softmax(dim=1)[0]
top = probs.argmax().item()
print(f"{weights.meta['categories'][top]}: {probs[top]:.2f}")모델은 push up: 0.99을 출력하며, 0.5초 분량의 클립 전체에 400개 클래스 중 하나의 동작 레이블을 지정합니다.
스켈레톤 기반 방법은 다른 접근 방식을 사용합니다. 먼저 포즈 추정 모델이 모든 프레임에서 신체 키포인트를 찾고, 그래프 네트워크인 ST-GCN과 같은 시간 모델이 관절 궤적을 분류합니다. 스켈레톤은 옷, 조명, 배경의 영향을 받지 않으며, 크기가 작아 엣지 디바이스에서 실시간으로 처리할 수 있습니다. Ultralytics YOLO26 포즈 모델은 이 방식에 필요한 사람별 신체 키포인트 17개를 제공하며, 운동 모니터링 솔루션은 이 키포인트 중 세 개의 각도를 이용해 팔굽혀펴기와 스쿼트 같은 운동의 반복 횟수를 계산합니다.
동작 인식과 관련 작업 비교#
- 포즈 추정 및 객체 추적: 포즈 추정은 관절 위치를 찾고, 추적은 프레임 간에 각 사람의 ID를 유지합니다. 두 작업 모두 동작 인식의 입력으로 자주 사용되며, 동작 인식은 이 작업들이 나타내는 움직임을 해석합니다. 군중 속에서는 추적되는 각 사람에게 개별 클립과 레이블이 지정됩니다.
- 시간적 동작 위치 지정: 길고 편집되지 않은 비디오에서 각 동작이 시작되고 끝나는 시점을 찾습니다. 시공간 동작 감지는 한 걸음 더 나아가 AVA 데이터셋처럼 각 프레임에서 각 행위자의 영역을 표시합니다.
- 비디오 이해: 캡션 생성, 질의응답, 비디오 속 사건과 원인에 대한 추론도 다루는 더 넓은 분야입니다.
실제 적용 사례#
- 헬스케어 및 노인 돌봄: 낙상 감지 시스템은 카메라나 웨어러블 데이터를 바탕으로 낙상을 인식해 직원에게 알리고, 재활 앱은 환자가 운동을 올바르게 수행하는지 확인합니다.
- 피트니스 및 스포츠: 앱은 반복 횟수를 세고 자세를 평가하며, 스포츠 분석은 중계 영상에서 슛, 패스, 스트로크를 분류합니다.
- 안전 및 보안: 모니터링 시스템은 공공장소의 싸움과 공장 작업장의 낙상 또는 안전하지 않은 중량물 들기를 감지합니다.
- 인간-로봇 상호작용: 로봇과 스마트 기기는 손 흔들기나 가리키기와 같은 제스처에 반응합니다.
데이터셋 및 과제#
비디오 레이블링은 이미지 레이블링보다 훨씬 많은 노력이 필요하므로, 대규모 데이터셋을 중심으로 발전해 왔습니다. Kinetics-400은 400개의 인간 동작 클래스 각각에 대해 약 10초 분량의 YouTube 클립을 최소 400개씩 포함하며, UCF101은 101개 클래스에 걸쳐 13,320개의 클립을 포함합니다. Something-Something V2는 모델이 스트로크 대신 수영장 배경을 보고 수영을 인식하는 경향인 장면 편향을 겨냥합니다. 약 22만 개의 클립에는 174개 클래스의 일상 물체와 상호작용하는 손이 담겨 있으며, 각 클래스는 "무언가를 왼쪽에서 오른쪽으로 밀기"와 "무언가를 오른쪽에서 왼쪽으로 밀기"처럼 움직임으로만 구분됩니다.










