Static and Moving Object Detection Using Flux Tensor
[cite]10.1109/CVPRW.2014.68[/cite]
1. Introduction
모니터링 분야에서 움직이는 물체의 검출(moving object detection)은 여러 도전적인 문제들이 아직 남아 있습니다. 그것들은 복잡한 배경, 조명 변화, 노이즈, 가려짐 등을 처리하는 문제들입니다. 더군다나 움직이는 물체 검출은, 물체 추적이나 동작 이해, 물체, 상황 인식, 지능적 영상 감시 등의 첫번째 단계로 사용되는 알고리즘입니다.
이 논문에서는 좀 더 신뢰할 수 있는 검출을 위해서 움직임, 픽셀 변화, 모양 정보를 활용한 hybrid moving object detection system을 제안합니다. 이 방법의 주요 특징은 다음과 같습니다.
- 움직임은 flux tensor라 불리는 Spatio-temporal tensor formulation에 의해서 계산됨
- 배경과 전경을 각기 분리시켜 모델링한 split Gaussian 방법
- 조명 변화, 그림자 등에 의한 오검출과 물체가 사라지고 나서 물체로 검출되어버리는 부분을 제거하는 multi-cue 모양 비교 방법
이 방법은 그림자, 조명 변화, 잔상, 정지/사라진 물체, 동적 배경, 카메라 지터 등을 모두 다룰 수 있습니다.
2. System Overview
Flux Tensor with Split Gaussian models (FTSG)는 아래의 세 모듈로 구성됩니다.
- 픽셀 단위 움직임 검출 모듈 : flux tensor기반의 움직임 검출기와 split Gaussian 모델의 배경 제거가 동시에 실행되어 전경을 검출해 냄
- 퓨전 모듈 : flux tensor 기반의 방법과과 split Gaussian 모델의 결과가 규칙 기반의 시스템과 합쳐져 노이즈나, 조명 변화, 후광 등의 의한 부작용을 감소시켜 결과를 더욱 개선시킴
- 물체 단위 분류 모듈 ; 사라진 물체나 정지한 물체를 다룸
3. Flux Tensor based Motion Detection
멀티 채널 버전의 flux tensor 방법은 3D 그레이스케일 구조 텐서의 확장판으로, 움직임 덩어리 검출은 이를 이용하여 이루어집니다. Flux tensor를 이용하면 eigenvalue decomposition없이 움직임 정보를 한번에 계산할 수 있습니다. Flux tensor는 지역적 3D spatiotemporal 볼륨에서의 optical flow의 시간적 변화를 나타낼 수 있습니다. 이를 행렬 형태로 나타내면, flux tensor는 일종의 이미지 I에 대한 변수 x, y, t에 대한 jacobbian과 비슷한 형태로 나타내어집니다.
Flix tensor의 각 요소들은 시간적 그래디언트 변화와 합쳐져 영상에서의 가만히 있는 부분과 움직이는 부분의 특징들을 효과적으로 분리해 낼 수 있게 됩니다. Flux tensor matrix의 trace는 $ \text{trace}(J_F) = \int_\Omega || \frac{\partial}{\partial t} \nabla I ||^2 dy $ 로 계산되는데, 이는 곧 움직임는 영역인지 아닌지를 바로 판단하는데 이용할 수 있습니다.
4. Split Gaussian Models
Gaussian 모델은 배경 분리 알고리즘에 넓게 쓰이는 방법입니다. 대표적으로 사용되는 방법이 ixture of Gaussians (MoG) 입니다. 여기서는 이 방법을 변경하여 사용하였습니다. 배경과 전경을 모두 섞어 사용했던 MoG와는 달리, 여기서는 배경과 전경을 분리하여 따로 모델링하였습니다. 또한 배경을 위해 사용된 Gaussian의 수를 적응적으로 변경하도록 하였습니다. 이로 인하여 전경 픽셀로부터 배경이 손상되거나, 여러 종류의 배경에서도 잘 동작하도록 할 수 있었습니다.
Background model
여기서는 mixture of K gaussian을 이용해여 배경을 모델링하였습니다. K는 공간적, 시간적의 적응적인 변수입니다. 모든 픽셀 값 $ I_t(x,y)$는 현재의 K Gaussian 분포에 대하여 검사가 이루어집니다. 한 Gaussian과의 매치는 다음의 식을 통해 결정됩니다.
$$D_{\text{min}} (x, y) = \min_{i \in K } \max_{j \in C} (( I_t(x,y) - \mu_{i, j})^2 - T_b \cdot \sigma^2)$$
$$F_B(x,y) = \begin{cases} 1, &\ \text{if } D_{min}(x,y) \gt 0 \\
0, &\ \text{otherwise} \end{cases}$$
여기서 $T_b$는 고정된 문턱치입니다. 또한 $\sigma = \sum_i^k w_i \sigma_i $입니다.
어떤 Gaussian에도 포함되지 않는 픽셀들은 전경으로 분류됩니다.
각 픽셀에 대하여 $ K \times C $개의 모델이 존재하게 됩니다. C는 채널의 수이라 RGB에서는 3이 될 것입니다. 계산을 단순하게 하기 위해서 모든 $\sigma$와 $w $를 같은 값으로 사용하였습니다.
Foreground appearance model
전경을 위해서는 하나의 Gaussian만을 사용하였습니다. 전경 모양 모델(Forground appearance model)은 애매한 부분의 조명 변화나 노이즈에 의해 생긴 가짜 static 전경 부분(정지 물체 혹은 가려졌다가 다시나타난 배경) 구분해 내기 위해서 사용하였습니다. $F_F=0, F_B=1$인 부분은 $F_{amb}(x,y)$로 모호성이 있는 전경으로 나타내었습니다. Static 전경 부분 $F_S$는 $F_{amb}$ 내에서 다음 모델로 결정됩니다.
$$F_S(x,y) = \begin{cases}
1, &\ \text{if} F_{amb}(x,y) = 1 \\ &\ \text{ and } I_t(x,y) - \mu_f(x,y) \lt T_f \\
0, &\ \text{otherwise}
\end{cases}$$
Model initialization
Flux tensor는 움직임 정보를 제공하며, 통합(fusion)과 구분( classification) 모듈은 오검출을 많이 줄여줍니다. 따라서 배경 모델은 처음 몇 프레임만으로 초기화될 수 있으며, 전경 모양은 모델은 비어있는 것으로 초기화됩니다.
Background model update
일반적인 배경 모델 갱신 스키마는 blind update와 conservative update로 나눌 수 있습니다. Blind update는 모든 샘플들을 배경 모델로 넣어서 갱신하는 반면, conservative update는 이전에 배경으로 분류된 샘플만을 이용하여 갱신하게 됩니다. 여기서는 conservative update를 사용하여 배경과 전경 모델을 모두 갱신하엿습니다.
정적(static) 배경과 조명 변화는 배경 모델을 갱신하는데 사용됩니다.
$$\mu_t = (1- \alpha) M \mu_{t-1} + \alpha M I_t \\
\sigma_t^2 = (1- \alpha) M \sigma_{t-1}^2 + M \alpha(I_t - \mu)^T \alpha(I_t - \mu) \\
w_{i,t} = (1- \alpha)w_{i,t-1}+\alpha M \\
M = (1-F_B) \cup (F_{amb} - F_s)$$
여기서 $\alpha$는 고정된 학습률로 0.004를 사용하였습니다. M은 갱신 마스크 입니다.
물체가 사라져버려서 다시 나타난 배경과 동적 배경은 새로운 Gaussian 분포로 배경 모델에 추가됩니다. 이 분포는 높은 분산과 낮은 가중치로 초기화되며, 현재 픽셀 값을 이용하여 평균이 결정됩니다.
만약 계속적인 변화가 있을 경우, 각 픽셀에 대하여 새로운 모델이 추가됩니다. 그리고 현재 존재하는 Gaussian 모델 중 가중치가 $T_i$보다 낮은 모델은 제거됩니다.
Foreground model update
배경 모델과 마찬가지로 전경 모델에서도 conservative update를 사용하였습니다. 배경 모델의 갱신 마스크에 포함되지 않는 픽셀들을 이용하여 전경 모델이 갱신됩니다. 전경의 빠른 변화를 처리하기 위하여 높은 학습률을 사용하였습니다.
5. Fusion of Flux Tensor and Split Gaussian Models
통합 모델의 목표는 두개의 다른 접근법을 사용하여 전체 정확도를 올리는 것입니다. Flux tensor 기반의 움직임 세그멘테이션 방법은 지역적으로 연관된 결과를 보여주며, 조명 변화나 부드러운 그림자에 좋은 성능을 보입니다. 하지만 움직임을 기반으로 하기 때문에 정지한 물체를 검출하는 것은 불가능하며 물체보나 크게 마스크 크기를 출력하는 편입니다.
반면, 배경 제거 방법은 정지한 물체 또한 검출할 수 있으나 노이즈에 약합니다.
따라서 여기서는 flux tensor 기반의 방법을 확장하여, 여기에 split Gaussian 전경, 배경 모델을 적용합니다. Flux tensor와 split Gaussian 배경 제거 방법을 통해 움직이는 전경 물체를 검출한 다음, 배경 제거 방법을 통해 찾아낸 전경에 정적 전경 물체로 구분된 픽셀들만을 전경으로 구분합니다.
6. Stopped and Removed Object Classification
통합 과정은 정지한 물체와 물체에 의해 가라졌다가 나타난 배경을 모두 가만히 있는 물체로 분류해버립니다. 따라서 둘간을 구분할 방법이 필요합니다. 여기서는 [6]에서 사용된 방법을 이용하였습니다. 그 순서는 다음과 같습니다.
- 변화가 없는 영역의 픽셀들을 파악합니다.
- 현재 이미지에서 변화 없는 영역의 에지를 검출합니다. 배경 제거와 전경 마스크를 이용하여 배경이 생성됩니다.
- 에지 매칭을 기반으로 하여 분류를 수행합니다. 정지한 물체는 현재 이미지와 전경 마스크간의 높은 에지 유사성을 가집니다. 하지만 새로 나타난 배경은 배경 모델과 전경 마스크간의 높은 에지 유사성을 가집니다.
7. Results and Analysis
CVPR 2014 Change Detection challenage의 데이터베이스를 사용하였습니다. 배경을 위한 학습률 $\alpha = 0.004$를 사용하엿으며, 전경에서는 0.5를 사용하였습니다. $T_b = 3, T_f = 20$을 사용하였습니다.
320 * 240 영상에서 Matlab을 이용하여 10fps의 속도가 나왔으며, Flux tensor의 계산만 사용하면 50fps정도가 나왔습니다.