칼만 필터(Kalman Filter)란? AI에서 예측과 관측을 결합해 현재 상태를 추정하는 방법
TL;DR
칼만 필터는 이전 상태로 만든 예측과 새 관측을 각각의 불확실성에 맞춰 결합하는 순차 상태 추정 방법입니다. 위치·속도처럼 직접 모두 측정하기 어려운 값을 추정하며 예측과 보정을 반복합니다. 기본형은 선형 모델을 사용하고 상태의 평균과 공분산을 함께 갱신합니다. 잡음 설정, 관측 시간, 필터링과 평활화의 차이를 확인해야 결과를 제대로 읽을 수 있습니다.
핵심 3줄 요약
- 핵심 1
예측한 뒤 관측으로 보정합니다. 새 측정값을 그대로 따르거나 과거 값만 평균하는 방식과 다릅니다. - 핵심 2
불확실성도 함께 계산합니다. 예측과 관측의 공분산으로 새 정보를 얼마나 반영할지 정합니다. - 핵심 3
모델의 가정이 결과를 좌우합니다. Q·R·초기 상태·시간 간격이 실제 상황에 맞는지 검증합니다.
이 글에서 다룰 내용
- 칼만 필터의 한 문장 정의
- 위치 관측으로 이해하는 예측과 보정
- 상태·공분산·칼만 이득의 역할
- Q·R·P와 전이·관측 행렬의 뜻
- HMM·객체 추적·평활화·확장 필터와의 차이
- 실전 활용처와 데이터 점검 순서
- 누락 관측·시간 간격·불확실성 해석의 주의점
칼만 필터를 한 문장으로 정의하면 무엇인가요?
칼만 필터는 동적 시스템의 상태를 예측한 뒤 잡음이 섞인 관측으로 보정하면서 상태의 추정 평균과 오차 공분산을 재귀적으로 갱신하는 알고리즘입니다.
재귀적이라는 말은 새 관측이 올 때 이전 단계의 추정 결과를 이어 쓴다는 뜻입니다. 위치와 속도를 상태로 잡고 위치만 센서로 측정하는 경우처럼 상태 벡터와 관측 벡터의 내용이 달라도 됩니다. 관측 행렬이 이 둘을 연결합니다.
여기서는 선형 칼만 필터를 중심으로 설명합니다. 상태 변화와 관측을 선형 관계로 나타내고 초기 상태와 잡음에 적절한 가우시안 가정을 두면 사후분포를 평균과 공분산으로 계산합니다. 모델과 잡음 가정이 맞을 때의 최적성을 현실의 모든 데이터에서 정확하다는 보장으로 읽으면 안 됩니다.
한 줄 정리: 칼만 필터는 지금까지의 움직임과 새 센서값을 불확실성까지 고려해 합치는 상태 추정 방법입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 화면 속 물체의 가로 위치를 추정한다고 가정해 보겠습니다. 이번 프레임의 예측 위치는 100픽셀인데 새 관측은 106픽셀입니다. 어느 값이 더 믿을 만한지 판단하려면 숫자의 차이뿐 아니라 두 값의 불확실성도 알아야 합니다.
- 예측 위치: 100픽셀, 예측 오차 분산: 4픽셀²로 가정합니다.
- 관측 위치: 106픽셀, 관측 잡음 분산: 9픽셀²로 가정합니다.
- 위치를 직접 관측하는 1차원 예시에서 칼만 이득은 4 / (4 + 9), 약 0.31입니다.
- 보정 위치는
100 + (4 / 13) × (106 - 100), 약 101.85픽셀입니다.
예측 쪽의 분산이 더 작으므로 보정 결과는 예측 위치에 더 가깝습니다. 두 값을 절반씩 평균한 결과와는 다릅니다. 다른 조건이 같을 때 관측 잡음 분산을 낮추면 이 예시에서는 관측값을 더 많이 반영합니다. 다차원에서는 이득이 행렬이므로 모든 상황을 하나의 비율로 해석하지 않습니다.
위 숫자는 원리를 보여 주기 위한 가정 계산입니다. 실제 카메라에서 측정한 성능이나 권장 설정값이 아닙니다. 물체의 속도까지 추정하려면 상태에 속도를 넣고 시간 간격에 맞는 운동 모델과 공분산을 함께 설계합니다.
쉬운 예시: 새 관측이 예측에서 벗어났다고 모두 오류로 버리지 않습니다. 예측과 센서가 각각 얼마나 불확실한지 보고 보정량을 계산합니다.
왜 AI에서 칼만 필터가 중요한가요?
관측하지 못한 상태도 함께 추정합니다
위치 센서가 속도를 직접 알려 주지 않아도 위치·속도의 변화 관계를 모델에 넣어 속도를 추정할 수 있습니다. 다만 관측과 모델이 해당 상태를 구분할 만큼 정보를 주어야 합니다. 상태 벡터에 이름을 추가하는 것만으로 실제 값을 알아내지는 못합니다.
새 관측이 들어오는 흐름에 맞습니다
기본 필터링은 이전 추정 평균과 공분산을 바탕으로 다음 단계를 계산합니다. 매번 전체 과거 기록을 처음부터 다시 처리할 필요가 없어 순서대로 도착하는 센서값과 잘 맞습니다. 정확도와 실행 비용은 상태 차원과 구현, 모델 설정에 따라 달라집니다.
추정값과 불확실성을 나눠 읽습니다
같은 위치를 출력해도 오래 관측하지 못한 상태와 방금 신뢰할 만한 관측으로 보정한 상태는 다릅니다. 공분산은 이 차이를 모델 안에서 표현합니다. AI 시스템이 추정값을 사용할 때 값 하나만 넘기지 않고 관측 시각과 불확실성을 함께 기록하는 이유입니다.
칼만 필터는 어떤 순서로 작동하나요?
1. 초기 상태와 오차 공분산을 정합니다
처음 위치와 속도의 추정값, 그 추정을 얼마나 확신하는지 나타내는 공분산을 준비합니다. 공분산의 대각 성분은 각 상태의 분산이고 비대각 성분은 상태 오차 사이의 관계입니다. 초기값을 정확히 모른다면 그 불확실성을 설정에 반영합니다.
2. 운동 모델로 다음 상태를 예측합니다
전이 행렬로 이전 상태를 다음 시점으로 옮깁니다. 일정 속도 모델이라면 시간 간격 동안 이동할 위치를 속도에서 계산합니다. 상태 공분산도 전이 행렬로 옮기고 과정 잡음 공분산을 더해 모델이 설명하지 못한 변화를 반영합니다. 제어 입력이 있으면 그 영향도 포함합니다.
3. 관측 잔차와 칼만 이득을 구합니다
예측 상태를 관측 공간으로 바꾼 값과 실제 센서값의 차이를 구합니다. 이 차이를 혁신 또는 잔차라고 부릅니다. 칼만 이득은 예측 공분산, 관측 행렬, 관측 잡음 공분산을 이용해 계산하며 잔차를 상태 보정량으로 연결합니다.
4. 평균과 공분산을 보정합니다
예측 상태에 칼만 이득을 곱한 잔차를 더하고 오차 공분산도 갱신합니다. FilterPy는
predict()
와
update(z)
를, OpenCV는
predict()
와
correct(measurement)
를 제공합니다. 같은 원리를 쓰더라도 함수 이름과 입력 모양은 문서에서 확인합니다.
핵심 인사이트: 관측을 반영하기 전의 예측값과 반영한 뒤의 보정값은 서로 다른 출력입니다. 비교하는 시점과 값의 종류를 먼저 맞추세요.
Q·R·P와 주요 행렬은 무엇을 뜻하나요?
Q는 과정 잡음이고 R은 관측 잡음입니다
Q는 운동 모델로 설명하지 못한 변화의 공분산입니다. R은 센서 관측 오차의 공분산입니다. 예를 들어 일정 속도 가정에서 생략한 움직임과 위치 센서의 흔들림은 서로 다른 오차입니다. 두 값을 하나의 부드러움 조절 숫자로 묶으면 원인을 해석하기 어려워집니다.
분산과 표준편차도 구분합니다. 센서 설명서의 표준편차를 공분산 자리에 그대로 넣지 않습니다. 단위와 센서 사이 오차의 상관을 확인하고 기록으로 추정한 잡음이 실제 운영 조건에도 맞는지 비교합니다. Q나 R을 무조건 작게 두는 것이 더 좋은 설정은 아닙니다.
P는 현재 상태 추정의 불확실성입니다
P는 상태 추정 오차의 공분산이며 예측과 보정 때마다 바뀝니다. Q·R이 잡음 모델의 설정인 데 비해 P는 추정 과정에서 갱신하는 값입니다. 계산된 P가 작더라도 모델이나 센서 오차 가정이 틀렸다면 실제 오차는 클 수 있습니다.
전이 행렬과 관측 행렬은 차원을 연결합니다
FilterPy의 F는 상태 전이 행렬이고 H는 관측 행렬입니다. OpenCV 문서는 전이 행렬을 A로 표기합니다. 위치·속도를 상태로 두고 위치만 측정한다면 상태 차원과 관측 차원이 다릅니다. 배열의 크기가 곱셈에 맞는지와 각 열의 물리적 의미가 맞는지를 모두 점검합니다.
칼만 필터와 헷갈리는 용어는 무엇이 다른가요?
은닉 마르코프 모델과의 차이
둘 다 관측 뒤의 숨은 상태를 다룰 수 있습니다. 기본 HMM은 대기·작업처럼 이산적인 상태와 전이 확률을 다루고 기본 칼만 필터는 위치·속도처럼 연속적인 상태를 선형·가우시안 모델로 추정합니다. 상태의 표현과 계산 방식이 달라 같은 알고리즘의 다른 이름은 아닙니다.
상태와 관측의 구분이 낯설다면 은닉 마르코프 모델 용어 설명을 함께 읽으면 비교하기 쉽습니다.
객체 추적과 광학 흐름의 차이
객체 추적은 영상에서 같은 대상의 연결을 유지하는 작업입니다. 칼만 필터는 그 안에서 위치와 속도를 추정하는 구성 요소로 사용할 수 있지만 탐지나 대상 ID 연결을 모두 해결하지는 않습니다. 광학 흐름은 프레임 사이 픽셀의 겉보기 이동을 추정하므로 입력과 결과의 의미도 다릅니다.
필터링과 평활화의 차이
필터링은 해당 시점까지 얻은 관측으로 상태를 추정합니다. 평활화는 뒤에 수집한 관측까지 사용해 과거 상태를 다시 추정합니다. pykalman의
filter()
와
smooth()
가 이 차이에 해당합니다. 전체 기록으로 얻은 평활화 결과를 실시간 필터 성능으로 보고하면 미래 정보가 섞입니다.
확장 칼만 필터와 무향 칼만 필터의 차이
확장 칼만 필터(EKF)는 비선형 관계를 현재 추정 근처에서 선형화합니다. 무향 칼만 필터(UKF)는 선택한 점들을 비선형 함수에 통과시켜 평균과 공분산을 근사합니다. 비선형 문제를 다루는 변형들이며 기본 선형 필터에 행렬 크기만 늘리면 자동으로 적용되는 기능은 아닙니다.
실전에서는 어디에 쓰이나요?
센서값으로 위치와 움직임을 추정합니다
로봇의 위치 추정이나 레이더 추적처럼 관측 잡음이 있고 상태가 시간에 따라 바뀌는 문제에서 씁니다. 여러 센서를 결합할 때도 각 관측의 좌표계·시각·잡음 모델을 맞춘 뒤 활용합니다. 센서 수를 늘리는 것만으로 불확실성이 올바르게 줄어드는 것은 아닙니다.
영상 AI의 움직임 모델을 구성합니다
프레임마다 얻은 물체 위치를 운동 모델과 결합해 다음 위치를 예측하고 새 관측으로 보정합니다. 관측이 잠시 없을 때도 예측을 이어갈 수 있지만 정확한 위치를 계속 안다는 뜻은 아닙니다. 여러 대상이 교차하면 어떤 관측을 어느 상태에 연결할지 별도의 규칙이 필요합니다.
칼만 필터를 적용할 때 어떤 순서로 확인하나요?
1. 상태·관측·시간 단위를 정합니다
추정할 값과 실제 측정값을 따로 적습니다. 픽셀과 미터, 초와 프레임을 섞지 않고 각 센서의 시간표를 맞춥니다. 관측 간격이 달라지면 전이 행렬과 과정 잡음의 시간 간격 의존성을 함께 검토합니다. 같은 행렬을 무조건 재사용하지 않습니다.
2. 잡음과 초기값을 검증 자료로 비교합니다
초기 상태, P, Q, R을 기록한 뒤 대표적인 움직임과 센서 오류가 포함된 자료에서 비교합니다. pykalman은 EM으로 일부 파라미터를 추정하는 기능도 제공하지만 자동 학습이 필수는 아닙니다. 초기값에 따라 다른 결과에 멈출 수 있으므로 학습 점수만으로 설정을 확정하지 않습니다.
3. 보정 전후와 누락 구간을 따로 평가합니다
예측값·보정값·관측값·잔차·공분산을 같은 시각에 맞춰 저장합니다. 정답 기록이 있으면 위치나 속도 오차를 비교하고 급회전·관측 누락·센서 튐 구간도 따로 살핍니다. 그래프가 매끈해졌는지보다 실제 변화를 얼마나 늦게 따라가는지까지 확인합니다.
실전 팁: 모델 파일과 함께 상태의 열 순서, 단위, 시간 간격, 잡음 설정과 누락 처리 규칙을 남기세요. 같은 숫자 배열이라도 의미가 다르면 결과가 달라집니다.
사용할 때 무엇을 주의해야 하나요?
누락 관측을 실제 0으로 채우지 않습니다. 센서가 고장 나 값을 못 받은 상황과 위치가 0인 상황은 다릅니다. 구현이 지원하는 누락 표기를 사용하거나 그 단계의 관측 보정을 건너뜁니다. pykalman 문서는 마스크 배열을, FilterPy 문서는 누락 관측에 None을 사용하는 방식을 안내합니다.
관측의 튐과 지속적인 편향을 구분합니다. 기본 필터가 모든 이상 관측을 자동으로 거르는 것은 아닙니다. 센서가 계속 한쪽으로 치우치거나 다른 물체의 위치가 들어오면 추정도 잘못 끌려갈 수 있습니다. 입력 점검과 관측 연결 규칙을 별도로 시험합니다.
공분산을 정답 확률로 읽지 않습니다. 공분산은 선택한 모델과 잡음 가정 아래의 불확실성입니다. 상태가 여러 개인 경우 분산뿐 아니라 상관도 들어 있습니다. 작은 수치가 나왔다고 자동 조치의 안전성이나 실제 오차의 상한이 보장되지는 않습니다.
평활화에 들어간 미래 관측을 숨기지 않습니다. 실시간 평가라면 그 시점까지 사용할 수 있는 관측만 넣습니다. 사후 분석 결과와 온라인 결과를 구분하고 파라미터를 학습하는 자료도 평가 구간과 분리합니다. 나중에 얻은 정답에 맞춰 잡음 설정을 고르면 성능을 과장하기 쉽습니다.
주의: 칼만 필터는 모델과 관측을 결합하는 추정기입니다. 비선형 움직임, 잘못된 시간표, 센서 편향이 큰 환경에서는 가정부터 다시 확인해야 합니다.
자주 묻는 질문
Q1. 칼만 필터는 딥러닝인가요?
기본 칼만 필터는 상태 전이와 관측 모델을 이용하는 추정 알고리즘입니다. 신경망 학습을 반드시 거치지 않습니다. 딥러닝이 만든 위치 관측을 입력으로 받을 수 있어도 필터 자체가 신경망이 되는 것은 아닙니다.
Q2. 데이터로 먼저 학습해야만 사용할 수 있나요?
모델과 잡음, 초기 상태를 정하면 학습 없이 실행할 수 있습니다. 일부 구현은 EM으로 파라미터를 추정하는 선택 기능을 제공합니다. 어느 경우든 실제 상황에서 추정 오차와 잡음 가정이 맞는지 검증합니다.
Q3. 관측이 없으면 계산을 멈춰야 하나요?
모델로 예측을 이어갈 수 있지만 새 관측에 따른 보정은 하지 못합니다. 관측이 없는 동안 정확도가 유지된다고 보장할 수 없으며 추정 공분산과 실제 오차가 어떻게 달라지는지 확인합니다.
Q4. R을 작게 하면 더 정확해지나요?
작은 R은 관측 잡음이 작다고 가정하는 설정입니다. 실제로 잡음이 큰 센서를 과신하면 튀는 관측을 지나치게 따라갈 수 있습니다. 원하는 그래프 모양이 아닌 센서의 오차와 검증 결과에 맞춰 정합니다.
Q5. 칼만 필터를 쓰면 같은 물체의 ID도 유지되나요?
위치와 움직임 추정은 ID 연결에 도움이 되지만 여러 대상의 동일성을 단독으로 확정하지는 않습니다. 탐지 결과를 기존 대상에 연결하는 데이터 연관 과정과 추적 종료 규칙을 함께 설계합니다.
출처
마무리
칼만 필터는 운동 모델의 예측과 새 관측을 결합해 현재 상태를 추정합니다. 평균과 공분산을 함께 갱신하고 칼만 이득으로 보정량을 정합니다. 핵심은 센서값을 부드럽게 만드는 모양보다 상태·관측·잡음의 관계를 제대로 표현하는 데 있습니다.
처음에는 무엇을 추정하고 무엇을 측정하는지부터 나누세요. 그다음 Q·R·P, 시간 간격, 보정 전후 결과를 확인하면 문서의 행렬과 출력값을 읽기 쉬워집니다. 필터링과 평활화를 구분하고 실제 오차를 함께 검증해야 업무에 맞는 추정인지 판단할 수 있습니다.
