Temporal Fusion Transformers 논문 요약
"Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting"은 다양한 시계열 예측 작업에 적용할 수 있는 새로운 주목 기반 아키텍처를 제안한 논문입니다.
Google AI Research와 옥스포드 대학에서 공동연구하여 발표한 논문으로, 시계열 문제에서 높은 성능을 달성한 모델입니다. Transformer 구조를 사용하며 시계열 데이터 정보를 잘 추출할 수 있도록 개발한 모델로써, 미래 알 수 있는 변수와 공변량을 활용하여 예측을 수행하는 모델을 제시합니다. 당시 획기적은 구조를 제시하여 SOTA 성능을 달성하였습니다.
핵심 개념
- 다중 시계열 통합: 정적 메타데이터(변하지 않는 특성), 과거 시계열 입력, 미래에 알려진 입력을 함께 활용
- 해석 가능성: 변수 중요도와 시간적 관계를 명확히 이해할 수 있는 attention 메커니즘 제공
- 다중 시점 예측: 여러 미래 시점에 대한 예측을 동시에 수행
아키텍처 구성요소
- 변수별 입력 변환: 각 입력 변수에 대해 별도의 처리를 수행
- 정적 공변량 인코더: 시간에 따라 변하지 않는 특성을 인코딩
- 시간별 변수 선택: GRN(Gated Residual Network)을 사용해 서로 다른 변수의 중요도를 학습
- 시간별 처리: 과거 정보는 LSTM으로 처리, 미래 정보는 별도 처리
- 시간적 셀프 어텐션 층: 서로 다른 시점 간의 관계를 포착
- 시점별/변수별 가중치: 어떤 시점과 변수가 예측에 중요한지 식별
주요 기여
- 성능: 기존 딥러닝 및 통계적 방법론보다 우수한 예측 성능 보임
- 유연성: 다양한 종류의 입력(정적/시간적/알려진 미래 입력)을 통합
- 해석 가능성: 변수 선택 및 시간적 주목 메커니즘을 통해 모델의 판단 근거를 해석
- 범용성: 소매, 교통, 전기 등 다양한 영역의 시계열 예측 작업에 효과적
실험 결과
- 전기, 교통, 소매 등 다양한 도메인의 6개 실제 데이터셋에서 평가
- MAE(Mean Absolute Error) 기준으로 기존 방법론보다 평균 7% 이상 향상된 성능
- 예측에 중요한 시간 패턴과 변수를 식별하는 효과적인 해석 메커니즘 제공
기술적 차별점
- 변수별 처리와 시간별 처리를 결합한 독특한 하이브리드 아키텍처
- 시계열 데이터에 특화된 트랜스포머 구조 적용
- 다양한 입력 유형을 처리하는 통합 프레임워크 제공
이 논문은 시계열 예측을 위한 해석 가능한 딥러닝 접근법을 제시하며, 다양한 도메인에서의 효과성을 입증했습니다.

보행 행동 예측 구현 시 고려 사항
- 시간적 관계 모델링: 트랜스포머의 self-attention 메커니즘을 확장하여 시간적 관계를 모델링합니다. 이는 보행자 행동의 순차적 패턴을 포착하는 데 중요합니다.
- 시간적 인코딩: 일반적인 트랜스포머의 위치 인코딩을 시간적 인코딩으로 확장하여 시퀀스 내 시간적 관계를 표현합니다.
- 멀티헤드 어텐션: 서로 다른 시간적 특성과 패턴을 동시에 학습할 수 있습니다.
- 장기적 의존성 포착: 보행자가 걷기 시작할 때와 끝날 때의 미세한 패턴 변화를 포착할 수 있습니다.
입력 데이터 (시간 순서대로 정렬된 프레임)
↓
시간적 특징 추출 (포즈 추출기)
↓
Temporal Transformer 인코더
↓
분류 헤드 (standing, start walking, walking, finish walking)
모델 구현의 핵심 요소
- 인코딩: 각 시간 프레임별 보행자 포즈/특징 추출
- 시간적 어텐션: 프레임 간의 관계 학습
- 상태 전이 학습: 특히 'start walking'과 'finish walking'과 같은 전이 상태 포착
- 컨텍스트 통합: 보행자 주변 환경과 상황 정보 통합
데이터 준비 및 학습 팁
- 데이터 수집: 보행자의 다양한 움직임 상태(standing, start walking, walking, finish walking)가 골고루 포함되도록 합니다.
- 라벨링: 각 상태 간 전환점을 정확히 라벨링하는 것이 중요합니다. 특히 'start walking'과 'finish walking'은 명확한 기준이 필요합니다.
- 데이터 증강: 다양한 속도, 방향, 조명 조건에서의 데이터를 포함시킵니다.
- 시퀀스 길이: 충분한 컨텍스트를 포착할 수 있는 적절한 시퀀스 길이를 선택합니다.
- TFT의 static 메타정보
변수 설명 적용 방식
pedestrian_id | 보행자 개별 ID (고유한 사람 식별) | static_categoricals |
height, weight (선택) | 보행자의 신체적 특성 | static_reals |
lighting_condition (선택) | 조명 상태 (실내, 야외 등) | static_categoricals |
floor_type (선택) | 바닥 유형 (콘크리트, 나무 바닥 등) | static_categoricals |
📌 필수 변수: pedestrian_id
📌 선택적 변수: height, weight, lighting_condition, floor_type
TFT의 강점은 이러한 static 메타정보를 활용하여 보행자의 개별적인 특성을 학습
Temporal Fusion Transformer는 보행자의 미세한 행동 변화를 감지하는 데 뛰어난 성능을 보일 수 있으며, 특히 상태 전환 예측에 효과적
Temporal Fusion Transformer (TFT)를 활용한 보행자 행동 예측 구현
1. 데이터 수집 및 라벨링
사용할 데이터셋은 다음과 같은 출처에서 확보
- 유튜브, 오픈 동영상 데이터셋 활용
- 직접 촬영한 보행 영상 (30FPS, 1초당 30프레임)
라벨링 기준
- Standing (정지 상태): 일반적인 정지 자세 (start walking 직전 또는 finish walking 직후)
- Start Walking (걷기 시작): 한 발이 지면에서 떨어지는 순간부터 한 걸음 후 다음 발이 지면에 닿기 전까지
- Walking (걷는 중): 양발이 교차하며 이동하는 동안
- Finish Walking (걷기 종료): 두 발이 지면에 닿기 직전부터 정지 자세로 바뀌는 순간까지
데이터는 시퀀스 단위(10~20 프레임)로 분할하여 행동을 예측할 수 있도록 구성
2. 시간적 특징 추출 (MediaPipe Pose + 칼만 필터 + 무게중심 계산)
(1) Mediapipe Pose 기반 3D 키포인트 추출
Google의 MediaPipe Pose를 활용하여 보행자의 3D 포즈 데이터를 추출
https://ai.google.dev/edge/mediapipe/solutions/vision/pose_landmarker?hl=ko
자세 랜드마크 인식 가이드 | Google AI Edge | Google AI for Developers
LiteRT 소개: 온디바이스 AI를 위한 Google의 고성능 런타임(이전 명칭: TensorFlow Lite)입니다. 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 자세 랜드마크 인식 가이드 MediaPipe Pose
ai.google.dev
- 33개 관절 (Keypoints)
- 3D 좌표 (x, y, z)
- 각 키포인트의 신뢰도 값
(2) 칼만 필터 적용 (Kalman Filter)
MediaPipe Pose에서 추출한 데이터는 노이즈가 포함될 가능성이 있습니다. 이를 해결하기 위해 칼만 필터(Kalman Filter)를 사용하여 시간적 일관성을 유지하고 노이즈를 제거 합니다.
(3) 전신 무게중심(CoM) 계산 (BSP 기반)
사람의 무게 중심(CoM, Center of Mass)은 움직임을 분석하는 데 중요한 요소입니다. 이를 계산하기 위해 BSP(Body Segment Parameter) 질량 비율을 적용하여 각 신체 부위별 가중치를 반영한 평균 좌표를 구합니다.
최종적으로 다음과 같은 시계열 데이터를 구성합니다.
[batch_size, sequence_length, num_keypoints*keypoint_dim + com_dim]
즉, face key points 11개를 제외한 num_keypoints = 22, keypoint_dim = 3 (x,y,z), com_dim = 3 (x,y,z)을 포함하여 69 차원의 특징 벡터를 생성
3. Temporal Fusion Transformer (TFT) 기반 인코더
(1) TFT 모델 개요
TFT는 원래 시계열 예측을 위해 개발된 모델로, LSTM과 Transformer 기반 멀티헤드 어텐션을 결합하여 단기 및 장기 시간 의존성을 효과적으로 학습할 수 있습니다.
적용 방식:
- 보행자의 시간적 움직임 패턴을 학습하여 각 행동 클래스를 분류
- LSTM을 이용하여 짧은 시간의 변화를 학습하고, 멀티헤드 어텐션을 통해 장기적인 동작 패턴을 학습
- 기존 TFT 모델의 예측 레이어를 수정하여 분류 문제로 변형
(2) TFT 모델 구성
TFT 인코더는 다음과 같은 주요 요소로 구성됩니다.
- LSTM 레이어: 시간 흐름에 따른 변화를 학습
- 멀티헤드 어텐션: 보행자의 과거 프레임을 참조하여 현재 행동을 정확히 예측
- 게이팅 메커니즘: 유효하지 않은 입력 특징을 자동으로 제거하여 중요한 특징만 활용
TFT의 장점:
- 전역적(장기) 및 국소적(단기) 패턴 학습 가능
- 해석 가능성(Interpretable Features)이 뛰어나 중요 특징을 시각화 가능
- 복잡한 시계열 분류 및 예측 문제에 강력한 성능 제공
4. 행동 분류 모델 및 학습 구조
(1) 분류 헤드 (Classification Head)
TFT 인코더의 출력 벡터를 활용하여 4개의 행동 클래스를 예측하기 위한 분류 헤드를 구성합니다.
- Fully Connected (FC) Layer를 추가하여 Softmax를 통한 확률 값 출력
- Cross-Entropy Loss를 사용하여 다중 클래스 분류 학습
(2) 학습 설정
- Optimizer: Adam (learning rate 0.001)
- Batch Size: 8~64
- Sequence Length: 10~30
(3) 평가 지표
- Accuracy (정확도)
- F1-score (각 클래스별 정밀도/재현율의 조화 평균)
5. 기본 샘플 코드
import torch
import torch.nn as nn
from pytorch_forecasting.models import TemporalFusionTransformer
# TFT 모델 정의
class PedestrianTFT(nn.Module):
def __init__(self, input_dim, hidden_dim, num_classes):
super(PedestrianTFT, self).__init__()
self.tft = TemporalFusionTransformer(
input_size=input_dim, hidden_size=hidden_dim, lstm_layers=1, output_size=num_classes
)
def forward(self, x):
return self.tft(x)
# 모델 인스턴스 생성
model = PedestrianTFT(input_dim=69, hidden_dim=128, num_classes=4)
6. TFT 모델을 경량화하기 위한 방법
1️⃣ TensorFlow Lite(TFLite) 또는 ONNX로 변환
- TensorFlow Lite (TFLite): 경량 모델을 위해 TensorFlow 기반 모델을 변환하여 모바일/엣지 장치에서도 실행 가능
- ONNX (Open Neural Network Exchange): PyTorch 모델을 ONNX로 변환하여 더 최적화된 실행 환경에서 사용 가능
활용 가능성:
- TFT는 PyTorch 기반 모델이므로, ONNX 변환이 더 적합
- 만약 TensorFlow 환경에서 TFT를 구현했다면, TFLite 변환이 가능
2️⃣ 모델의 파라미터 수 줄이기
- LSTM Hidden Size 축소 (hidden_size=128 → 64)
- LSTM Layer 개수 감소 (lstm_layers=2 → 1)
- Dropout 증가 (dropout=0.1 → 0.3) → 과적합 방지 + 모델 크기 감소 효과
- 시계열 데이터 생성 및 학습 과정시퀀스 데이터 생성 과정
- 인코더-디코더 구조 기반 윈도우:
- 인코더 길이(10): 과거 10개 프레임의 데이터를 사용
- 디코더/예측 길이(1): 미래 1개 프레임의 행동을 예측
- 슬라이딩 윈도우 방식: 각 보행자(pedestrian_id)에 대해 연속된 프레임으로부터 슬라이딩 윈도우 방식으로 데이터 생성 예를 들어 보행자 1의 프레임이 0부터 30까지 있다면:
- 복사 윈도우 1: 인코더 [0-9], 타겟 [10] 윈도우 2: 인코더 [1-10], 타겟 [11] 윈도우 3: 인코더 [2-11], 타겟 [12] ... 윈도우 21: 인코더 [20-29], 타겟 [30]
- 그룹별 독립적 처리: 각 보행자 ID는 독립적으로 처리됩니다. 한 보행자의 마지막 프레임과 다른 보행자의 첫 프레임은 연결되지 않습니다.
- 실제 입력과 타겟:
- 모델 입력(X):
- 69개 키포인트 특성을 포함한 10개 프레임의 데이터
- 각 프레임의 시간 정보(frame)
- 정적 변수(pedestrian_id)
- 모델 타겟(y):
- 11번째 프레임의 행동 클래스(0, 1, 2, 3 중 하나)
- 모델 입력(X):
- 만약 보행자의 프레임 수가 충분하지 않다면(11개 미만), 해당 보행자의 데이터는 유효한 윈도우를 생성하지 못합니다.
- allow_missing_timesteps=True 설정이 있으므로, 중간에 프레임이 누락되어도 일부 처리 가능합니다.
- 인코더-디코더 구조 기반 윈도우:
- 배치 내 각 항목은 위와 같이 생성된 하나의 윈도우입니다. 따라서 16개의 윈도우가 하나의 배치를 구성하며, 각 윈도우는 서로 다른 보행자의 데이터이거나 동일 보행자의 다른 시간대 데이터일 수 있습니다.
- max_encoder_length=10과 max_prediction_length=1 설정은 시계열 데이터를 예측 모델에 사용하기 위한 윈도우를 정의
참고 사이트
Temporal Fusion Transformer(2020)_논문 리뷰
Time Series Forecasting에서 가장 SOTA(State of the art) 논문인 TFT입니다. Paper : https://arxiv.org/abs/1912.09363 Github : https://github.com/jdb78/pytorch-f
velog.io
다중 변수 시계열 분석(Temporal Fusion Transformers)
이 연구에서 소개하는 Temporal Fusion Transformers는 시간 불변하는 변수가 포함된 모형의 시계열 분석 방법으로 2021년에 소개된 Python 패키지이다. 시계열 데이터를 연구하는 많은 분야에서 사용되고
narrowmoon.tistory.com
SOTA 알고리즘 리뷰 1 - Temporal Fusion Transformer
안녕하세요! 빅웨이브에이아이의 이현상입니다. 인공지능 분야에서는 특정 분야에 대해 가장 높은 성능을 달성한 모델을 SOTA 알고리즘이라고 부르기도 합니다. 즉, 모델 성능이 예술의 경지에
bigwaveai.tistory.com
'AI' 카테고리의 다른 글
Apple M4 pro chip 에서 keras 의 Stable Diffusion 모델 사용하기 (6) | 2025.01.07 |
---|---|
Apple M4 pro vs M1 학습 속도 비교(GPU, CPU) (4) | 2025.01.03 |
Residual Network 구현 및 학습 (1) | 2024.11.24 |
DenseNet 구현 및 학습 (1) | 2024.11.22 |
TensorFlow 함수형 API 로 VGGNet 논문 구현 (1) | 2024.11.19 |