mmWave 자세 판정 알고리즘 비교

· 승민

개요

mmWave 레이더 값만으로 침상 자세 5가지를 판정했습니다. 전처리는 지수 평활(EMA), 분류는 XGBoost를 골랐고, 정확도는 75.1%(3명, 녹화 9개)입니다. 학습에 없던 사람에게는 65.4~73.5%입니다.

항목내용
센서TI IWR6843 (3D People Tracking 펌웨어), 천장 2.7m 설치, 약 18 프레임/초
판정할 자세 (5종)섬, 침대 위 앉음, 걸터앉음, 누움, 옆누움
데이터녹화 9개: lee 7개, vic 1개, kim 1개(11-12). 자세마다 60초씩 수집
평가 프레임mmWave 프레임 37,773개 (섬 8,173 · 침대 위 앉음 6,559 · 걸터앉음 6,988 · 누움 7,960 · 옆누움 8,093). lee 27,744 · vic 4,935 · kim 5,094
평가 방법녹화 하나씩 빼고 시험 (Leave-one-recording-out, 9회). 학습에 쓰지 않은 녹화로만 정확도를 냄. 추가로 사람 하나씩 빼고 시험(Leave-one-person-out)
지표정확도(Accuracy), macro F1 (5개 자세의 F1 평균)

입력 데이터 (RAW)

프레임마다 환자 한 사람의 추적 값 8개가 입력입니다. 레이더 펌웨어가 반사점을 묶어 사람 트랙을 만들고, Pi가 이를 바닥 기준 좌표로 바꿉니다.

값단위뜻어디서 나오나
zm몸 중심 높이 (바닥 기준)트랙 위치 (TLV 1010)
head_zm머리 쪽 높이: 소속 반사점 높이의 90% 백분위반사점 (TLV 1020 + 1011)
speedm/s수평 이동 속도트랙 속도
vzm/s세로 속도트랙 속도
npts개그 사람에게 연결된 반사점 수반사점
bed_distm침대 영역까지 거리 (안이면 0)트랙 위치 + 침대 꼭짓점
xm방 안 좌우 위치트랙 위치
ym방 안 앞뒤 위치트랙 위치

head_z는 반사점이 없는 프레임에서 빈값이 됩니다. 누운 자세에서 자주 생깁니다.

전처리 알고리즘 비교

지수 평활(EMA)을 골랐습니다. 실시간으로 쓸 수 있는 평활화 방법 4개 중 정확도와 macro F1이 모두 1위이고, 칼만 필터보다 0.8%p, Savitzky-Golay·이동 평균보다 2.8%p 높습니다. 공정하게 비교하려고 분류 알고리즘은 XGBoost로 고정했습니다.

전처리 알고리즘방법정확도macro F1EMA와 정확도 차이
지수 평활 (EMA, α=0.1)새 값 10% + 직전 평활값 90%75.1%74.3%—
칼만 필터 (1차원)예측값과 측정값을 불확실성 비율로 섞음74.2%73.3%−0.8%p
Savitzky-Golay최근 1초에 2차 다항식을 맞추고 가장 최근 값을 씁72.3%71.3%−2.8%p
이동 평균 (1초)최근 18프레임의 평균72.3%71.7%−2.8%p

분류 알고리즘 비교

XGBoost를 골랐습니다. 비교한 상위 4개 중 정확도와 macro F1이 모두 1위이고,
LightGBM보다 0.4%p, HistGradientBoosting보다 0.5%p, MLP 신경망보다 1.9%p 높습니다.
전처리는 앞에서 고른 EMA로 고정했습니다.

분류 알고리즘설정정확도macro F1XGBoost와 정확도 차이
XGBoost트리 300개, 학습률 0.05, 깊이 6, 히스토그램 분할, 자세별 균형 가중75.1%74.3%—
LightGBM트리 300개, 학습률 0.05, 잎 31개, 균형 가중74.7%73.9%−0.4%p
HistGradientBoosting트리 300개, 학습률 0.05, 균형 가중74.6%73.7%−0.5%p
MLP 신경망은닉층 64-32, 조기 종료73.2%72.7%−1.9%p

알고리즘 조합 결과

EMA + XGBoost 조합이 16개 중 정확도 1위(75.1%)입니다.
전처리 4개와 분류기 4개를 모두 조합해 같은 방법(녹화 하나씩 빼고 시험)으로 비교했습니다.
칸은 정확도입니다.

전처리 \ 분류기XGBoostHistGradientBoostingCatBoostMLP 신경망
EMA75.1%74.6%72.9%73.2%
Savitzky-Golay72.3%75.0%73.8%72.6%
칼만 필터74.2%73.3%74.1%71.9%
이동 평균72.3%73.6%72.1%72.4%

상위 5개 조합이 녹화마다 얼마나 꾸준했는지입니다.
녹화별 순위는 녹화 하나에서 16개 조합의 정확도 순위를 낸 뒤 9개 녹화로 평균한 값입니다.

조합정확도macro F1녹화별 평균 순위 (낮을수록 좋음)상위 4위 안에 든 녹화
EMA + XGBoost75.1%74.3%7.25 / 9
Savitzky-Golay + HistGradientBoosting75.0%74.6%6.84 / 9
EMA + HistGradientBoosting74.6%73.7%7.62 / 9
칼만 필터 + XGBoost74.2%73.3%6.91 / 9
칼만 필터 + CatBoost74.1%73.0%7.32 / 9

결과표

녹화 9개(lee·vic·kim) 전체를 합친 자세별 대표값입니다. 인풋·전처리는 중앙값, 분류는 학습에 없던 녹화에서 낸 평균 확률, 아웃풋은 실제 판정 결과입니다. 자세마다 표 하나이고, 왼쪽에서 오른쪽으로 인풋 → 전처리 → 분류 → 아웃풋 순서로 읽습니다. 분류의 %는 XGBoost가 그 자세에 준 평균 확률입니다.

섬 (Standing)

구분인풋 (RAW)전처리 (EMA)분류아웃풋
높이 z (m)1.531.52섬 (95%)섬
머리 높이 head_z (m)1.581.55
반사점 수 (개)89.7
프레임 수8,173--8,173
맞힌 비율---96%
가장 많이 틀린 판정---걸터앉음 1%

침대 위 앉음 (Sitting on bed)

구분인풋 (RAW)전처리 (EMA)분류아웃풋
높이 z (m)1.141.13침대 위 앉음 (69%)침대 위 앉음
머리 높이 head_z (m)1.391.38
반사점 수 (개)1212.2
프레임 수6,559--6,559
맞힌 비율---68%
가장 많이 틀린 판정---걸터앉음 14%

걸터앉음 (Sitting on edge)

구분인풋 (RAW)전처리 (EMA)분류아웃풋
높이 z (m)0.820.82걸터앉음 (85%)걸터앉음
머리 높이 head_z (m)1.161.09
반사점 수 (개)79.8
프레임 수6,988--6,988
맞힌 비율---86%
가장 많이 틀린 판정---침대 위 앉음 10%

누움 (Lying on back)

구분인풋 (RAW)전처리 (EMA)분류아웃풋
높이 z (m)0.700.70누움 (76%)누움
머리 높이 head_z (m)0.970.99
반사점 수 (개)910.3
프레임 수7,960--7,960
맞힌 비율---79%
가장 많이 틀린 판정---옆누움 17%

옆누움 (Lying on side)

구분인풋 (RAW)전처리 (EMA)분류아웃풋
높이 z (m)0.830.83옆누움 (46%)옆누움
머리 높이 head_z (m)1.081.13
반사점 수 (개)99.5
프레임 수8,093--8,093
맞힌 비율---46%
가장 많이 틀린 판정---누움 29%

입력 값 8개 중 자세 구분에 중요한 3개만 보였고, 속도·세로 속도·침대까지 거리·x·y도 입력에 들어갑니다. 전체 정확도는 75.1%입니다. 옆누움은 높이가 걸터앉음·누움과 비슷해(0.83 m) 가장 많이 헷갈렸습니다.

사람별 정확도입니다. ‘사람 하나씩 빼고 시험’은 그 사람의 녹화를 하나도 학습하지 않은 경우입니다.

측정자프레임녹화 하나씩 빼고 시험사람 하나씩 빼고 시험가장 낮은 자세 (사람 빼고 시험)
lee27,74476.9%65.4% (vic·kim 녹화 2개로만 학습)옆누움 48%
vic4,93566.4%66.4%침대 위 앉음 17%
kim5,09473.5%73.5%옆누움 23%

한계