CVPR 2019
https://arxiv.org/pdf/1911.06644.pdf
공식 깃헙 updated paper
https://github.com/wei-tim/YOWO/blob/master/examples/YOWO_updated.pdf
논문 주제 & 키워드
기존의 2-stream 아키텍처를 탈피한 unified end-to-end video action recognition 솔루션
# Spatiotemporal Action Localization
# Video Action Recognition
관련 용어
- Spatiotemporal : 보통 object detection에서는 단일 이미지에 bounding box 를 표시하는데, 여기서는 그 bbox 탐지를 video 단위로 확장하게 됨. 그래서 공간(spatial) + 시간(temporal) = Spatiotemporal이라고 하는 것
- Action Localization : 행위가 발생하는 지점에 Bounding Box를 쳐주는것. 또는 Segmentaion (테두리 따라 누끼(?) 따주는거)로 표현하기도 함.
- Action Classification : 행위가 어떤 행위인지. 먹는 건지 앉는 건지 달리는 건지 서있는 건지 classify. 즉 결과값이 text label임. 이미지에 bbox 안쳐도 classification일 수 있음.
- Action Recognition : 보통 Action Localization + Action Classification 합쳐서 Action Recognition이라고 하는거 같은데. 대충 눈치껏 알아먹자.
한 줄 요약
그 동안의 연구는 Action Localization과 Action Classification을 두 단계(two-stream)로 나눠서 추정하였는데 우리는 한번에 해부렸고 성능도 더 좋고 실시간 추론도 된다.
세 줄 요약
우리가 연구하는 분야는 spatiotemporal action localization, 한마디로 standing or sitting? (일어서는거냐 앉는거냐?) 를 구분하는 모델을 만드는 분야다.
그 동안의 연구는 Action Localization과 Action Classification을 두 단계(two-stream)로 나눠서 추정하였는데 우리는 한번에 해부렸고 성능도 더 좋고 실시간 추론도 된다.
우리가 만든 YOWO 아키텍처는 2-stream을 쓰기는 하지만 통일된 아키텍처라서 end-to-end로 훈련이 되고 2-stream이 동시 훈련되는 구조이다.
N 줄 요약
연구 분야 소개
Spatiotemporal Action Localization (Video Action Recognition) 분야는 최근 많은 각광을 받고있다.
Spatiotemporal Action Localization은 공간상의 행위 발생 지점 뿐 아니라 시간 상의 행위 발생 지점도 인식하는 것을 목표로 하는 task임.
즉. 한마디로 요약하자면
Standing or Sitting?
일어서는 건지 앉는 건지를 구분하는 분야라고 할 수 있다.
Faster R-CNN의 등장 이후로 action recognition 분야의 많은 연구들이 two stage network 아키텍처를 사용했다.
Two-stage network라 함은 첫번째 stage에서 여러 개의 proposal을 생성하고, classification과 localization refinement가 두번째 stage에서 일어나는 구조를 말한다.
그러나 이 two-stage 구조는 세가지 면에서 치명적인 단점이 있다.
(1) 2D 단일 이미지보다 비디오에서는 action tube* 생성이 힘듬
(2) 첫 단계에서 action proposal (bbox) 을 뽑으면 그 주변 사물과의 상호작용 정보는 빠지게 됨
(3) action 발생 구역탐색과 classification을 나눠서 각각의 optimum을 찾는 것(즉, two-staged detection)이 global optimum이라고 장담할 수 없음
그래서 우리는 짱 멋진 sigle-stage framework인 YOWO (You Only Watch Once)를 개발하였다.
YOWO는 위에 말한 세가지 단점을 해결할 뿐만 아니라 real-time 용도로도 적합하다.
YOWO 개관
YOWO의 직관적인 아이디어는 사람의 시각 체계에서 따온것이다.
예를들어, TV 드라마를 볼 때 우리의 눈은 한번에 한 프레임만 본다. (현 프레임의 2D feature)
그리고 기억 속에 저장된 이전 프레임 정보와 결합해서 (이전 프레임들의 3D feature)
얘 둘을 합쳐서(fuse) 합리적인 결론에 도달하는 것이다.
YOWO는 두개의 branch를 가진 single-stage network이다.
첫번째 branch는 현재 프레임을 2D-CNN에 통과시켜 spatial feature를 추출한다.
두번째 branch는 이전 프레임들을 3D-CNN에 통과시켜 spatiotemporal feature를 추출한다.
이 두 결과물을 스무스하게 fuse하기 위하여, channel fusion과 attention mechanism을 사용하였다.
최종적으로 이 합쳐진 결과물(fused feature)로 프레임레벨 detection이 생산된다.
또한 action tube를 생성하기 위한 linking algorithm 도 제공할 것이다.
real-time 요건의 일반적인 상황을 고려하여 YOWO는 RGB 사진을 사용할 때를 가정하여 설계되었으나, RGB 말고 optical flow나 depth도 사용할 수 있다. 그냥 branch를 하나 더 추가하면 된다.
또한 2D-CNN branch 와 3D-CNN branch 각각 무슨 CNN 아키텍처를 사용하든 상관이 없다.
더 빠른 런타임을 달성하기 위해 짧은 클립 길이가 필요하기 때문에
최대 16개의 프레임 입력으로 작동하도록 설계하였다.
그러나 이렇게 프레임 길이가 짧으면 시간적 정보의 축적을 제한하게 된다.
따라서 우리는 훈련된 3D-CNN을 사용하여 전체 비디오에 대하여 겹치지 않는 8프레임 클립에 대해 3D-CNN으로 기능을 추출하여 long-term feature bank를 축적하였다.
학습 과정은 평범하게 했으나 inference 과정에서는
3D feature를 key-frame(현재 프레임)에 centering하여 평균을 계산하였다.
이를 통해 프레임 mAP가 상당히 증가되었다.
YOWO 모델 구조
YOWO 아키텍처를 자세히 살펴보자.
YOWO 아키텍처는 크게 네 부분으로 나뉘어진다.
(1) 3D-CNN branch, (2) 2D-CNN branch, (3) CFAM, (4) bounding box regression
하나씩 살펴보자
(1) 3D-CNN branch
3D-CNN 모델은 Kinetics 데이터셋에서 좋은 성능을 보여준 3D-ResNext-101 모델을 사용하였다.
ablation study 란에 3D-ResNext-101 말고 다른 모델을 사용한 기록도 적어놨다.
3D-CNN 모델을 사용할 떄 마지막 conv layer 이후의 layer는 모두 삭제하였다.
input shape은 다음과 같이 변한다.
[C,D,H,W] ---> 3D-CNN ---> [C', 1, H/32, W/32] (C'는 사용자가 설정한 output channel)
D가 1이 되므로 squeeze 하여 [C', H', W'] (H' = H/32, W' = W/32) 가 된다.
squeeze하는 이유는 2D-CNN 포맷과 맞춰 fuse를 하기 위함이다.
(2) 2D-CNN branch
key frame (현재 프레임)의 공간정보를 추출하는 2D-CNN branch이다.
accuracy과 efficiency 사이의 좋은 밸런스를 보여 주는 Darknet-19를 기본 아키텍처로 사용하였다.
input shape은 다음과 같이 변한다.
[C, H, W] --> 2D-CNN --> [C', H/32, W/32] (C'는 사용자가 설정한 output channel)
여기까지 보고 한 번 더 강조하고 싶은 YOWO의 강점은,
2D 및 3D branch의 아키텍처를 맘대로 바꿀 수 있다는 것이다.
또한 branch가 두 개 이긴 하지만, unified archiutecture이며 end-to-end로 학습이 가능하다.
(3) Feature Aggregation : CFAM (Channel Fusion and Attention Mechanism)
이제 두 브랜치에서 나온 결과물을 합쳐야 한다.
합치는 방법은 다음과 같다.
1. 두 feature map을 channel-wise로 concatenate 한다.
2. 2개의 Conv layer에 통과시킨다.
3. 2번 결과물인 tensor B ([C, H, W])을 [C, H*W] shape으로 reshape하고 이것을 F라 한다. 이유는 채널별로 feature correlation을 표현하는 Gram matrix를 생성하기 위해서이다.
4. F와 F_transposed를 matrix multiplication해 [C,C] shape의 Gram matrix를 생성하고 softmax에 통과시키면 channel attention map인 M이 생긴다. M 이 뜻하는 바는 j번째 채널이 i번째 채널에 끼치는 영향을 점수로 표시한 것이다. 즉 inter-channel dependency를 표현한 것이라고 볼 수 있다.
5. 이 점수판 M을 F에 matrix multiplication하여 실제 feature의 impact를 표현하는 [C, H*W] 결과물이 만들어진다. 이것을 3차원으로 다시 reshape 한다 ([C, H, W]) 얘를 F''라고 한다
6. F''에 learnable parameter a(초기값은 0)를 곱한 것과 2번 결과물 tensor B를 합한 것이 tensor C가 된다. (참고로 tensor C는 말그대로 번호를 매긴거고 shape의 C는 channel의 약자임)
7. 위 식의 의미를 해석해보면, 각 채널의 최종 feature는 모든 채널과 원래 채널 feature의 가중합임을 알 수 있으며, feature map 간의 long-range semantic dependency를 표현한 것이다. 얘를 2개의 conv layer에 통과시켜 D를 얻으면 그것이 CFAM모듈의 최종 산출물이다.
처음과 끝에 위치한 두 개짜리 conv layer가 가장 중요하다. 왜냐면 서로다른 backbone 모델에서 오는 (즉, 서로 다른 분포를 가진) feature들을 하나로 섞어주는 역할을 하기 때문이다.
(4) Bounding Box Regression
이 부분은 YOLO의 가이드라인을 그대로 따랐다.
1X1 kernel의 conv layer 한개를 배치하여 output channel을 원하는 만큼으로 바꿔줄 수 있다.
k-means 기술을 이용하여 5개의 prior anchor를 사용하였다.
학습 및 구현 사항 디테일
학습 및 추론 단계 모두에서 224*224 해상도 이미지를 사용하였다.
해상도 다른 이미지를 학습단계에서 사용했지만 성능이 그닥 좋아지진 않았다.
Localization Loss Function은 YOLOv2와 비슷하게 설계하였으나, L1 loss의 beta 값을 1로 설정하였다.
confidence score를 계산할 때는 MSE Loss를 이용하였다.
Detection Loss function은 bbox의 네 좌표와 confidence score loss 모두의 합이다.
Classification Loss 에는 focal loss를 적용하였다. Loss function 얘기는 너무 기니까 논문 참고. 어쨌든 결론은
이거 썼다는 소리. 람다는 0.5에서 가장 좋은 성능을 보였다고 한다.
3D CNN은 Kinetics pretrained 모델 사용함. 2D CNN은 PASCAL VOC pretrained model 사용함.
2D 와 3D 두 개의 branch로 나뉘지만 parameter는 jointly update 됨.
minimum SGD optimizer 사용함. learning rate = 0.0001이고 weight decay는 30k부터 10k iteration마다 0.5씩 reduce됨.
Pytorch
Nvidia Titan XP GPU 1대 사용
학습 데이터셋
UCF101-24 - 5 epoch
J-HMDB-21 - 10 epoch
데이터 증강 사용함 (좌우반전, 랜덤 크기변경, 랜덤 크로핑)
평가지표
1. frame-mAP
2. video-mAP
추론 단계에서는 bbox conf score 0.25 이상인 것만 선택하고 NMS thres 0.4 적용하여 테스트 하였음. (AVA dataset에서는 NMS thres 0.5)
후처리
모델은 이렇게 학습을 시키고, 이제 모델이 추론한 frame별 결과물에서 동일한 bbox들을 link하여 action tube를 만들어줘야한다.
우리는 다른 논문에서 소개된 linking algorithm을 따랐다.
궁금하면 논문 참고
+성능을 더 높이기 위하여 Keyframe을 centering 한 3D-CNN 결과물을 썼다고 하는데
이러면 미래정보를 쓰는 거라 사실상 의미가 없어 요약하지 않았다.
<용어 설명>
* action tube = 동일 행위 및 객체의 bbox를 frame순서대로 모아놓은 것. 아래와 같은 것.