논문이 기호의 연속입니다. 순서대로 읽으면 기호가 합리적이긴 한데… 글로 쓰면 이해가 잘 갈지 모르겠네요. 최대한 연속적으로 잘 적어보겠습니다. 이번에 리뷰할 논문은 비디오에서 action이 어디에 위치하는지 탐지하는 방법을 설명합니다. 논문 저자는 “local to global”이라는 방법을 직접 만든 BSN에 적용했다고 합니다. 그럼 리뷰 시작하겠습니다.
Approach

위 그림처럼 BSN은 3단계로 구성됩니다. 단계별로 어떤 역할을 수행하는지 설명하겠습니다.
1. Video Features Encoding
입력 비디오로부터 시각적 컨텐츠를 인코딩해서 feature를 추출하는 모듈입니다. 그래서 비디오로부터 S_t라는 Snippet을 뽑아내서, 이를 바탕으로 encoding feature vector를 만듭니다.
- Snippet S_t
- 비디오의 한 시퀀스는 s_n = (x_{tn}, o_{tn})와 같이 표현됨.
- x_{tn}은 x비디오의 tn시점의 RGB 프레임
- o_{tn}은 x_{tn}에서 기인하는 stacked optical flow filed
- 비디오의 한 시퀀스는 s_n = (x_{tn}, o_{tn})와 같이 표현됨.
- Visual Encoder
- Snippet으로부터 encode feature vector f_{t_n} = (f_{S,t_n}, f_{T,t_n})을 만듬
- f_{S,t_n}은 Spatial Network(Resnet network)로 부터 만들어짐
- f_{T,t_n}는 Temporal Network(BN-Inception network)로 부터 만들어짐
- Snippet interval은 ActivityNet에서는 16, THUMOS14에서는 5로 두고 추출함.
- 이렇게 feature를 뽑아서 feature sequence F = \{f_{t_n}\}^{l_s}_{n=1}가 만들어짐
- 이 feature sequence를 비디오 전체에 대해 뽑아서 BSN으로 보냄
- Snippet으로부터 encode feature vector f_{t_n} = (f_{S,t_n}, f_{T,t_n})을 만듬
2. Boundary-Sensitive Network
2.1. Temporal evaluation module
Fig2에서 확인 가능하듯이 3개의 레이어를 가진 CNN 모듈로, 3가지 출력값(시작점일 확률, 종료점일 확률, 액션이 있을 확률)을 sigmoid를 취해서 내보낸다. 이걸 probabilities sequence라고 말하고, 이 값을 다음 모듈에서 받아 proposal과 BSP feature를 만듭니다.
2.2. Proposal generation module

Fig3에서 확인할 수 있듯이, 이 모듈도 두가지로 나뉘어 수행됩니다. Generate Proposal에서는 시작점과 종료점을 정할 필요가 있습니다. 이는 아래와 같이 정해집니다.
- p^s_{t_n}>0.9이거나, 앞-뒤 값보다 클 경우
- 이런 값들은 B_S = \{t_{s,i}\}^{N_s}_{i=1}인 집합으로 모아둠.
- 같은 방법으로 B_E = \{t_{e,i}\}^{N_e}_{i=1}를 만듬
이제 여기서 d = t_e - t_s ∈ [d_{min}, d_{max}]를 만족하는 [t_s, t_e]인 temporal region에 대해 candidate proposal ϕ로 명명하고, 데이터셋의 GT 값을 바탕으로 정해진 minimum and maximum durations을 만족하는 ϕ만을 proposal로 사용합니다.
Construct BSP feature는 모든 proposal 대해 center region을 r_C = [t_s, t_e]로 center region을 정합니다. 그리고 시작점과 종료점을 아래와 같이 분리합니다.
- r_S = [t_s-d/5, t_s+d/5]
- r_E = [t_e-d/5, t_e+d/5]
이 과정은 proposal-level feature를 만들기 위한 과정입니다. 구간을 이렇게 분리했으면, feature를 만들때는 r_C는 16개의 점으로 linear interpolation하고, r_S \& r_E는 8개의 점으로 linear interpolation 합니다. 그러면 f_{BSP} = (f^A_s, f^A_c, f^A_e)로 BSP feature를 표현할 수 있고, 이를 합쳐서 ϕ = (t_s, t_e, f_{BSP} )로 proposal을 다시 명명합니다.
2.3. Proposal evaluation module
다시 Fig2를 보면, 해당 모듈은 하나의 hidden layer가 있는 perceptron model임을 알 수 있습니다. 이 모듈은 앞서 구한 BSP feature를 바탕으로 BSP의 확률을 반환합니다. 여기까지 수행하면 ϕ = (t_s, t_e, p_{conf} , p^s_{t_s}, p^e{t_e})로 부를 수 있습니다. (ϕ의 마지막 두 값이 시작점과 종료점일 확률을 가짐)
3. Training of BSN
학습을 돌릴때는, Temporal evaluation module(TEM)과 Proposal evaluation module(PEM)이 나뉘어 수행됩니다. TEM은 local boundary(시작점, 종료점)과 actionness probailities를 학습하고, PEM은 이 확률을 바탕으로 proposal과 confidence score를 학습합니다.
3.1. TEM
w = \{F_w, Ψ_w\}를 바탕으로 학습을 하는데, 여기서 w는 window를 의미하고, F는 feature sequnce, Ψ는 action에 대한 GT를 의미해서 구간별로 학습을 하겠다는 것을 표현합니다.

아무튼 복잡해보이지만, 결국은 그냥 잘 나눠서 잘 더해줘서 씁니다.

그리고 이 모든 task에 대해 binary logistic regression을 적용합니다. TEM의 output이 sigmoid로 인해 [0,1]이기 때문에 이걸 사용한 것 같습니다. L_{bl}의 a는 학습할 때 positive랑 negative sample 개수의 비율을 맞추기 위해 사용합니다.
3.2. PEM

φ_g(Proposal)과 Ψ_g(GT)의 IoU를 계산하고, 이걸 maximum overlap socre g_{iou}라고 표현합니다. 여기서는 이 g_{iou}가 0.7 이상이면 Ψ^{pos}_p이고, 0.3 이하면 Ψ^{pos}p로 proposal을 분류합니다. 데이터 불균형을 막기 위해 positive는 전부 가져가고, negative는 랜덤으로 가져가서 총 1대 2의 비율을 유지합니다. 이렇게 하면 우리는 학습을 위한 N{train}을 얻을 수 있습니다!
4. Prediction and Post-processing
Ψ_p = \{φ_n = (t_s, t_e, p_{conf}, p^s_{t_s}, p^e_{t_e})\}^{N_p}_{n=1}이라는 proposal이 BSN을 통해 최종적으로 산출됩니다. 최종적으로 confidence socre를 얻기 위해서는 score fusion을 수행해야 하고, suppress redundant proposals도 수행해야 합니다.
4.1. Score fusion for retrieving

fusion은 간단하게 score를 곱해주면 final confidence score p_f가 만들어집니다. 그러면 Ψ_p = \{φ_n = (t_s, t_e, p_{f})\}^{N_p}_{n=1}로 표현할 수 있습니다.
4.2. Redundant proposal suppression

Soft-NMS를 적용해서 redundant result를 제외합니다. Proposal을 정렬하고, 가장 높은 proposal과 나머지 proposal들의 IoU를 계산해서 겹치면 제거하는 식으로 수행합니다. 여기까지 수행하면 Ψ^{'}<em>p = \{φ_n = (t_s, t_e, p^{'}</em>{f})\}^{N_p}_{n=1}가 됩니다.
Experiments
데이터셋은 ActivityNet-1.3, THUMOS14를 사용했고, 평가를 temporal action proposal generation task와 temporal action detection task로 수행했습니다.

결과를 보시면 proposal 갯수가 작을 경우에 BSN의 성능이 잘 나오는 것을 확인할 수 있습니다. proposal 갯수가 늘어날수록 기존의 방법론과 차이가 없어집니다.

기존의 방법론과 비교해서 성능이 좋은 것을 확인할 수 있습니다. 여기서 쓰는 평가 지표는 AR@AN이라 proposal의 갯수에 따라서 비교 실험을 수행했는데, proposal이 많아질수록 기존의 방법론과 차이가 작아져서 역전되는 부분도 있지만, 그럼에도 BSN의 성능이 좋은 것을 볼 수 있습니다.

이 BSN의 특징 중 하나가 기존의 classifier에 결합하면 현저한 성능 향상이 있다는 점이 언급되는 부분이 있습니다. 위 실험 결과는 이에 대한 실험으로 다른 classifier에 BSN을 붙이면 action detection 성능이 오르는 것을 볼 수 있습니다.

이건 논문 저자가 첨부한 정량적인 실험 결과에 대한 그림인데, 꽤 잘 탐지하는 것 같습니다.