Paper : https://arxiv.org/abs/1903.00618
github : https://github.com/MoonBlvd/tad-IROS2019
1. Abstract
지금까지 영상을 기반으로 이상 상황을 탐지하는 모델에 대한 연구는 두 가지 한계가 존재했습니다.
첫 번째는 지금까지 이상치 탐지에 사용된 영상은 주로 고정된 카메라(surveillance)로 촬영되었고, 따라서 프레임 내의 대부분의 객체가 고정되어 있었다는 점입니다. 고정된 상태로 촬영하는 감시 카메라 등에 대한 활용은 다양하게 시도되었지만, 자동차에 장착된 블랙박스와 같은 움직이는 카메라에는 활용되지 못했습니다.
두 번째, 지금까지는 주로 각 이상 상황 별로 카테고리를 나누어 분류하는 방법으로 이상치 탐지를 했기 때문에, 직접 Labeling 해 놓은 훈련 데이터 세트가 필요했습니다. 즉, Supervised ― 지도 학습의 형태로 진행되었기 때문에 시간과 비용이 많이 들 뿐만 아니라 모델이 Training 과정에서 보지 못한 데이터에 대해서는 이상 탐지가 되지 않는다는 한계가 있습니다.
본 논문은 1인칭 시점의 블랙박스 영상을 활용한, 비지도 학습 기반의 교통 상황 이상치 탐지 모델을 제안합니다. 저자가 접근한 새로운 방식은 바로 영상 프레임 내의 객체들에 대한 미래 위치를 예측해서 이상 탐지를 진행한다는 점입니다. 이 때 모델이 학습하기 위한 정답, Label은 바로 다음 순간의 위치이기 때문에 별도로 사람이 Labeling 할 필요가 없습니다. 즉, Unsupervised ― 비지도 학습의 형태로 학습이 될 수 있고, 이는 많은 시간과 비용을 줄일 수 있습니다.
미래 위치 예측은 1) 모델이 예측한 미래 위치가 실제 위치와 비교했을 때 얼마나 정확한지(Accuracy), 그리고 2) 객체가 보이는 비정상적인 움직임이 어떻게 관측되는지(Consistency) 등을 평가하며 학습이 진행되고, 잘 학습된 모델은 예측한 위치와 실제 위치의 차이가 큰 경우를 이상 상황으로 탐지해낼 수 있게 됩니다.
3. Unsupervised Traffic Accident Detection In First-Person Videos
A. Future Object Localization (FOL)
1) Bounding Box Prediction
FOL에서 사용하는 용어는 다음과 같습니다.
- 시간 t 일 때,
- 객체를 감싸는 Bounding box는 X_t=[c_x_t, c_y_t, w_t, h_t] 표현
- 이 때 (c_x_t, c_y_t)는 box의 중심이고, w_t, h_t는 box의 가로, 세로 길이
- 모델이 예측한 미래 Bounding box 모음은 Y_t={Y_t+1,Y_t+2,...,Y_t+δ} 표현 (현재 시간 t 에서 t+δ 까지 예측)
- 각 Y_t+k 또한 [c_x_t, c_y_t, w_t, h_t]
- O_t 는 이미지 정보를 담은 벡터 (Image와 Optical flow의 정보를 RoIPool을 이용해 합친 것)
2) Ego-Motion Cue
블랙박스가 탑재된 내 자신의 차량인 "Ego-motion" 정보는 다음과 같이 나타냅니다.
- 시간 t 일 때,
- E_t 는 내 차량의 주행 상태(ego-motion)에 대한 정보로, E_t={ϕ_t, x_t, z_t}
- 여기서 ϕ_t 는 촬영 각도, x_t, z_t 는 처음 시작 지점 기준으로 x 축, z 축 방향으로 이동한 거리를 나타냄
- 현재 정보와 직전 정보의 차이 값인 E_t − E_t−1 을 Encoder에 입력해서 Encoding 한 후,
- Decoder는 ego-motion의 예측 값인 E_t={E_t+1 − E_t, E_t+2 − E_t,..., E_t+δ − E_t} 를 출력합니다.
Ego-motion 정보는 보다 정확한 예측을 위해 꼭 필요하기 때문에 이를 모델에 적용시키기 위해서 모델은 ego-motion 정보를 입력으로 받는 Odometry Encoder라는 또 다른 Encoder를 가집니다. 이 부분 또한 RNN encoder-decoder 구조로써 이 출력은 Location Decoder에게 입력되어 객체의 미래 위치를 보다 정확하게 예측할 수 있도록 도와주는 역할을 한다.
3) Missed Objects
영상 프레임을 지나면서 순간 순간 탐지 되는 모든 객체들은 Trks[ ] 라는 tracker 리스트에 담아둡니다. 이는 어떤 순간 특정 객체가 다른 차량 등에 의해 가려져서 보이지 않게 되었을 때에도 그 객체를 잊지 않기 위함입니다. Trks[ ]내의 모든 객체는 각각 고유한 ID를 가집니다. 즉, 만약 특정 트럭이 한 번 객체로 감지 되었다면 그 트럭은 잠시 안보이거나 프레임을 벗어나도 일정 시간 동안에는 계속 그 ID를 가지고 Trks[ ] 안에 존재합니다.
- Trks[i].X_t : Trks 에 있는 객체 중 i 번째 객체의 X_t 값
- Trks[i].^Y_t : Trks 에 있는 객체 중 i 번째 객체의 X_t 값을 이용해 예측한 미래 위치 벡터
- Trks[i].age : Trks 에 있는 객체의 나이 (Trks 에 있는 객체가 너무 오래되었다면 필요 없으므로 age 이용해 삭제)
- D : Trks 안에 존재하는 모든 ID 리스트
- C : Trks 내의 객체 중, 현재 프레임에서 감지되는 객체들의 ID 리스트
1) 현재 관찰되는 객체들에 대한 정보 update
- C (현재 관찰되는 객체 리스트) 의 각 객체 i 에 대해 for 문 반복
- 만약 i 가 D (전체 객체 리스트) 에 아직 없다면, 새로운 객체이므로:
- Trks[i] 를 새로 생성 (initialize)
- i가 D에 있다면, 원래 있던 객체이므로:
- Trks[i].X_t 를 현재 보여지는 X(i)_t 의 정보로 업데이트
- Trks[i].^Y_t 는 현재 정보인 X(i)_t 와, O_t 로 예측한 FOL(X(i)_t, O_t) 값으로 업데이트
- 만약 i 가 D (전체 객체 리스트) 에 아직 없다면, 새로운 객체이므로:
2) missed된 객체들에 대한 정보 update
- D−C (전체 객체 리스트에 있지만 현재 안 보이는 객체들) 의 각 객체 j 에 대해 for 문 반복
- 만약 Trks[j].age 가 가장 오래된 나이인 A 보다 크다면, 너무 오래되었다는 뜻이므로:
- Trks 에서 Trks[j] 를 삭제
- 그게 아니면, 잠깐 가려진 것이므로:
- 현재는 실제 위치 값인 Trks[j].X_t 를 알 수 없으므로, 이전에 예측했던 값인 Trks[j].^Y_t 로 업데이트
- Trks[j].^Y_t 는 방금 업데이트한 Trks[j].X_t 와 O_t 로 예측한 FOL(X(i)_t, O_t) 값으로 업데이트
- 만약 Trks[j].age 가 가장 오래된 나이인 A 보다 크다면, 너무 오래되었다는 뜻이므로:
B. Traffic Accident Detection
세 가지 손실 함수
- Predicted Bounding Box - Accuracy
- Predicted Box Mask - Accuracy
- Predicted Bounding Box - Consistency
3. Unsupervised Traffic Accident Detection In First-Person Videos
A. Future Object Localization (FOL)
1) Bounding Box Prediction
FOL에서 사용하는 용어는 다음과 같습니다.
- 시간 t 일 때,
- 객체를 감싸는 Bounding box는 X_t=[c_x_t, c_y_t, w_t, h_t] 표현
- 이 때 (c_x_t, c_y_t)는 box의 중심이고, w_t, h_t는 box의 가로, 세로 길이
- 모델이 예측한 미래 Bounding box 모음은 Y_t={Y_t+1,Y_t+2,...,Y_t+δ} 표현 (현재 시간 t 에서 t+δ 까지 예측)
- 각 Y_t+k 또한 [c_x_t, c_y_t, w_t, h_t]
- O_t 는 이미지 정보를 담은 벡터 (Image와 Optical flow의 정보를 RoIPool을 이용해 합친 것)
2) Ego-Motion Cue
블랙박스가 탑재된 내 자신의 차량인 "Ego-motion" 정보는 다음과 같이 나타냅니다.
- 시간 t 일 때,
- E_t 는 내 차량의 주행 상태(ego-motion)에 대한 정보로, E_t={ϕ_t, x_t, z_t}
- 여기서 ϕ_t 는 촬영 각도, x_t, z_t 는 처음 시작 지점 기준으로 x 축, z 축 방향으로 이동한 거리를 나타냄
- 현재 정보와 직전 정보의 차이 값인 E_t − E_t−1 을 Encoder에 입력해서 Encoding 한 후,
- Decoder는 ego-motion의 예측 값인 E_t={E_t+1 − E_t, E_t+2 − E_t,..., E_t+δ − E_t} 를 출력합니다.
Ego-motion 정보는 보다 정확한 예측을 위해 꼭 필요하기 때문에 이를 모델에 적용시키기 위해서 모델은 ego-motion 정보를 입력으로 받는 Odometry Encoder라는 또 다른 Encoder를 가집니다. 이 부분 또한 RNN encoder-decoder 구조로써 이 출력은 Location Decoder에게 입력되어 객체의 미래 위치를 보다 정확하게 예측할 수 있도록 도와주는 역할을 한다.
3) Missed Objects
영상 프레임을 지나면서 순간 순간 탐지 되는 모든 객체들은 Trks[ ] 라는 tracker 리스트에 담아둡니다. 이는 어떤 순간 특정 객체가 다른 차량 등에 의해 가려져서 보이지 않게 되었을 때에도 그 객체를 잊지 않기 위함입니다. Trks[ ]내의 모든 객체는 각각 고유한 ID를 가집니다. 즉, 만약 특정 트럭이 한 번 객체로 감지 되었다면 그 트럭은 잠시 안보이거나 프레임을 벗어나도 일정 시간 동안에는 계속 그 ID를 가지고 Trks[ ] 안에 존재합니다.
- Trks[i].X_t : Trks 에 있는 객체 중 i 번째 객체의 X_t 값
- Trks[i].^Y_t : Trks 에 있는 객체 중 i 번째 객체의 X_t 값을 이용해 예측한 미래 위치 벡터
- Trks[i].age : Trks 에 있는 객체의 나이 (Trks 에 있는 객체가 너무 오래되었다면 필요 없으므로 age 이용해 삭제)
- D : Trks 안에 존재하는 모든 ID 리스트
- C : Trks 내의 객체 중, 현재 프레임에서 감지되는 객체들의 ID 리스트
1) 현재 관찰되는 객체들에 대한 정보 update
- C (현재 관찰되는 객체 리스트) 의 각 객체 i 에 대해 for 문 반복
- 만약 i 가 D (전체 객체 리스트) 에 아직 없다면, 새로운 객체이므로:
- Trks[i] 를 새로 생성 (initialize)
- i가 D에 있다면, 원래 있던 객체이므로:
- Trks[i].X_t 를 현재 보여지는 X(i)_t 의 정보로 업데이트
- Trks[i].^Y_t 는 현재 정보인 X(i)_t 와, O_t 로 예측한 FOL(X(i)_t, O_t) 값으로 업데이트
- 만약 i 가 D (전체 객체 리스트) 에 아직 없다면, 새로운 객체이므로:
2) missed된 객체들에 대한 정보 update
- D−C (전체 객체 리스트에 있지만 현재 안 보이는 객체들) 의 각 객체 j 에 대해 for 문 반복
- 만약 Trks[j].age 가 가장 오래된 나이인 A 보다 크다면, 너무 오래되었다는 뜻이므로:
- Trks 에서 Trks[j] 를 삭제
- 그게 아니면, 잠깐 가려진 것이므로:
- 현재는 실제 위치 값인 Trks[j].X_t 를 알 수 없으므로, 이전에 예측했던 값인 Trks[j].^Y_t 로 업데이트
- Trks[j].^Y_t 는 방금 업데이트한 Trks[j].X_t 와 O_t 로 예측한 FOL(X(i)_t, O_t) 값으로 업데이트
- 만약 Trks[j].age 가 가장 오래된 나이인 A 보다 크다면, 너무 오래되었다는 뜻이므로:
B. Traffic Accident Detection
세 가지 손실 함수
- Predicted Bounding Box - Accuracy
- Predicted Box Mask - Accuracy
- Predicted Bounding Box - Consistency