· 승민
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 평균) |
프레임마다 환자 한 사람의 추적 값 8개가 입력입니다. 레이더 펌웨어가 반사점을 묶어 사람 트랙을 만들고, Pi가 이를 바닥 기준 좌표로 바꿉니다.
| 값 | 단위 | 뜻 | 어디서 나오나 |
|---|---|---|---|
| z | m | 몸 중심 높이 (바닥 기준) | 트랙 위치 (TLV 1010) |
| head_z | m | 머리 쪽 높이: 소속 반사점 높이의 90% 백분위 | 반사점 (TLV 1020 + 1011) |
| speed | m/s | 수평 이동 속도 | 트랙 속도 |
| vz | m/s | 세로 속도 | 트랙 속도 |
| npts | 개 | 그 사람에게 연결된 반사점 수 | 반사점 |
| bed_dist | m | 침대 영역까지 거리 (안이면 0) | 트랙 위치 + 침대 꼭짓점 |
| x | m | 방 안 좌우 위치 | 트랙 위치 |
| y | m | 방 안 앞뒤 위치 | 트랙 위치 |
head_z는 반사점이 없는 프레임에서 빈값이 됩니다. 누운 자세에서 자주 생깁니다.
지수 평활(EMA)을 골랐습니다. 실시간으로 쓸 수 있는 평활화 방법 4개 중 정확도와 macro F1이 모두 1위이고, 칼만 필터보다 0.8%p, Savitzky-Golay·이동 평균보다 2.8%p 높습니다. 공정하게 비교하려고 분류 알고리즘은 XGBoost로 고정했습니다.
| 전처리 알고리즘 | 방법 | 정확도 | macro F1 | EMA와 정확도 차이 |
|---|---|---|---|---|
| 지수 평활 (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 F1 | XGBoost와 정확도 차이 |
|---|---|---|---|---|
| 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개를 모두 조합해 같은 방법(녹화 하나씩 빼고 시험)으로 비교했습니다.
칸은 정확도입니다.
| 전처리 \ 분류기 | XGBoost | HistGradientBoosting | CatBoost | MLP 신경망 |
|---|---|---|---|---|
| EMA | 75.1% | 74.6% | 72.9% | 73.2% |
| Savitzky-Golay | 72.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 + XGBoost | 75.1% | 74.3% | 7.2 | 5 / 9 |
| Savitzky-Golay + HistGradientBoosting | 75.0% | 74.6% | 6.8 | 4 / 9 |
| EMA + HistGradientBoosting | 74.6% | 73.7% | 7.6 | 2 / 9 |
| 칼만 필터 + XGBoost | 74.2% | 73.3% | 6.9 | 1 / 9 |
| 칼만 필터 + CatBoost | 74.1% | 73.0% | 7.3 | 2 / 9 |
녹화 9개(lee·vic·kim) 전체를 합친 자세별 대표값입니다. 인풋·전처리는 중앙값, 분류는 학습에 없던 녹화에서 낸 평균 확률, 아웃풋은 실제 판정 결과입니다. 자세마다 표 하나이고, 왼쪽에서 오른쪽으로 인풋 → 전처리 → 분류 → 아웃풋 순서로 읽습니다. 분류의 %는 XGBoost가 그 자세에 준 평균 확률입니다.
| 구분 | 인풋 (RAW) | 전처리 (EMA) | 분류 | 아웃풋 |
|---|---|---|---|---|
| 높이 z (m) | 1.53 | 1.52 | 섬 (95%) | 섬 |
| 머리 높이 head_z (m) | 1.58 | 1.55 | ||
| 반사점 수 (개) | 8 | 9.7 | ||
| 프레임 수 | 8,173 | - | - | 8,173 |
| 맞힌 비율 | - | - | - | 96% |
| 가장 많이 틀린 판정 | - | - | - | 걸터앉음 1% |
| 구분 | 인풋 (RAW) | 전처리 (EMA) | 분류 | 아웃풋 |
|---|---|---|---|---|
| 높이 z (m) | 1.14 | 1.13 | 침대 위 앉음 (69%) | 침대 위 앉음 |
| 머리 높이 head_z (m) | 1.39 | 1.38 | ||
| 반사점 수 (개) | 12 | 12.2 | ||
| 프레임 수 | 6,559 | - | - | 6,559 |
| 맞힌 비율 | - | - | - | 68% |
| 가장 많이 틀린 판정 | - | - | - | 걸터앉음 14% |
| 구분 | 인풋 (RAW) | 전처리 (EMA) | 분류 | 아웃풋 |
|---|---|---|---|---|
| 높이 z (m) | 0.82 | 0.82 | 걸터앉음 (85%) | 걸터앉음 |
| 머리 높이 head_z (m) | 1.16 | 1.09 | ||
| 반사점 수 (개) | 7 | 9.8 | ||
| 프레임 수 | 6,988 | - | - | 6,988 |
| 맞힌 비율 | - | - | - | 86% |
| 가장 많이 틀린 판정 | - | - | - | 침대 위 앉음 10% |
| 구분 | 인풋 (RAW) | 전처리 (EMA) | 분류 | 아웃풋 |
|---|---|---|---|---|
| 높이 z (m) | 0.70 | 0.70 | 누움 (76%) | 누움 |
| 머리 높이 head_z (m) | 0.97 | 0.99 | ||
| 반사점 수 (개) | 9 | 10.3 | ||
| 프레임 수 | 7,960 | - | - | 7,960 |
| 맞힌 비율 | - | - | - | 79% |
| 가장 많이 틀린 판정 | - | - | - | 옆누움 17% |
| 구분 | 인풋 (RAW) | 전처리 (EMA) | 분류 | 아웃풋 |
|---|---|---|---|---|
| 높이 z (m) | 0.83 | 0.83 | 옆누움 (46%) | 옆누움 |
| 머리 높이 head_z (m) | 1.08 | 1.13 | ||
| 반사점 수 (개) | 9 | 9.5 | ||
| 프레임 수 | 8,093 | - | - | 8,093 |
| 맞힌 비율 | - | - | - | 46% |
| 가장 많이 틀린 판정 | - | - | - | 누움 29% |
입력 값 8개 중 자세 구분에 중요한 3개만 보였고, 속도·세로 속도·침대까지 거리·x·y도 입력에 들어갑니다. 전체 정확도는 75.1%입니다. 옆누움은 높이가 걸터앉음·누움과 비슷해(0.83 m) 가장 많이 헷갈렸습니다.
사람별 정확도입니다. ‘사람 하나씩 빼고 시험’은 그 사람의 녹화를 하나도 학습하지 않은 경우입니다.
| 측정자 | 프레임 | 녹화 하나씩 빼고 시험 | 사람 하나씩 빼고 시험 | 가장 낮은 자세 (사람 빼고 시험) |
|---|---|---|---|---|
| lee | 27,744 | 76.9% | 65.4% (vic·kim 녹화 2개로만 학습) | 옆누움 48% |
| vic | 4,935 | 66.4% | 66.4% | 침대 위 앉음 17% |
| kim | 5,094 | 73.5% | 73.5% | 옆누움 23% |
측정자 3명, 녹화 9개이고 lee가 73%를 차지합니다. 녹화별 정확도가 57~91%로 크게 달라서, 상위 조합끼리의 차이(1%p 안팎)는 우연일 수 있습니다. 실제로 각각 1위였던 Savitzky-Golay(HistGB 고정)와 XGBoost(EMA 고정)를 함께 쓰면 72.3%로 떨어졌습니다. 데이터가 늘면 선택이 바뀔 수 있습니다.
사람 차이가 큽니다. lee 녹화를 늘려도 vic 정확도는 약 68%에서 멈췄습니다(11-12 실험). 다른 사람 녹화를 늘리는 것이 정확도에 더 효과적입니다.
옆누움은 46%만 맞혔습니다. 레이더 높이 값만으로는 누움과 구별이 어렵고, 사람마다 옆으로 눕는 방식도 달랐습니다(kim은 높이 1.03 m).
x·y 위치를 입력에 넣었으므로, 침대 위치가 다른 방에서는 다시 학습해야 합니다.
녹화 TEST_20261112_160657(lee)은 한 구간에서 자동 추적 선택이 반사(유령 트랙)를 골라 수동으로 고쳐습니다.
같은 녹화에서 카메라 관절을 함께 쓰면 93%입니다(11-08 녹화 5개 기준, 참고용).