본문 바로가기

Paper review/Vision

[논문 리뷰] Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

반응형

Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

Submit : Shi, Baoguang, Xiang Bai, and Cong Yao.CVPR(2017)

Paper : https://arxiv.org/abs/1507.05717

Code : https://github.com/deepmind/kinetics-i3d


1. introduction

  • imagenet으로 이미지 분류를 하면서 알게된게 굉장히 큰 데이터셋으로 프리트레이닝하면 다른 도메인의 문제로도 확대 적용하는데 굉장히 많은 도움 된다
  • 네트워크 구조 바뀌어도 도움된다
  • 큰 비디오 데이터셋이 있다면 → 프리트레이닝으로 퍼포먼스 높일 수 있지 않을까
  • kinetics라는 큰 비디오 데이터셋 만듦
    • SOTA 아키텍쳐 다시 구현
    • HMDB-51, UCF-101인 작은 데이터셋으로 프리트레이닝하고 하니 소타
  • I3D 모델 제안

action recognition에서 유명했던 모델들

(e) : 여기서 제안한 I3D

그전까지의 architecture들은 선두주자는 없었다.

  • 2d할지 3d할지의 차이뿐. RGB만 넣어서 처리할지
  • optical flow를 새로운 feature로 집어넣어서 활용할 것인지
  • 2d로 frame by frame할지 어떻게 aggregation할지

2. Related works

  • 2D conv + LSTM
    • 2d conv으로 frame by frame. 장당 conv에 넣음
    • 그 결과를 aggregation해서 (풀링) average/sum/max pooling해서 하나로 aggregation해서 판정
    • pooling대신 아웃풋을 LSTM연결 temporal modeling
    • 시간축 다르게 모델링 → 성능이 그렇게 좋지는 않았다
    • RNN은 시퀀셜하게 해야하기때문에 연산이 어려웠다

  • C3D
    • 비디오를 이해하기위한 3d사용
    • 3d: time축으로도 dimension연장
    • parameter 많아져서 training 어려워진다
    • 3차원에서 상하좌우앞뒤 움직이며 3conv 네트워크 모델링
    • 8개의 conv layer, 5 max pooling, 2 fc layer했음에도 불구하고 많은 연산량
    • Sports1M 데이터셋 사용. 트레이닝: 한달 걸림
    • 2d conv는 resnet, inception과 같은 효율적인거 사용 그러나 3d는 그게 없음
    • 가장 기본적으로 하면 연산량 굉장히 많음, 좋은 결과 나오진 않음

  • optical flow 적용한 two-stream network (c)
    • 3d보다 (c3d) 훨씬 좋은 결과
    • 2d image (RGB비트맵) + optical flow
    • 두 conv의 architecture는 똑같음
    • optical flow?
      • 화면 안에서 어떤 픽셀이 이동했을 때 얼마만큼 움직였는지 보여주는 벡터
      • motion vectore라는 개념과 유사. (블락단위의 하나 벡터) optical flow는 픽셀단위. 계산하기 어려움
      • 3d motion → 2d 에 대해 pixel의 움직임을 vector로 모델링
      • 이게 pixel 자체의 움직임도 고려 해야하지만 시청자(카메라의 시점 움직임)를 고려해야 해서 어렵다
      • optical flow + rgb 같이 적용하면 아주 좋다
      • 문제점은 optical flow가 계산하기 굉장히 어렵다 . 오늘 말하는 I3D 연구자들은 optical flow는 계산이 많기 때문에 end-to-end어렵고 precomputation해서 다른데서 계산해오면 그 후에 처리하겠다
    • 이미지 한 장에 대해서 비디오에서 이미지 몇장을 추출해서 2stream network에 통한 결과를 가지고 다시 pooling을해서 평균값으로 판정
    • 하나하나 이미지에 대해서는 inception V1사용. optical flow는 10개 프레임에서 나온 걸 사용
    • conv에 넣어서 나온 결과값을 평균취하거나 또는 SVM에 classifier로 넣어서 하나의 액션을 판정
    • single frame image에 대해 conv 결과와 / optical flow를 거쳐서 하나의 액션을 정함
    • 연산량 적고 정확도 굉장히 높음

  • two-stream network (d)
    • c와 다른건 3d를 한번 더 붙임 (뒤에)
    • feature extract를 위한게 아니고 양쪽 conv에서 나온 loss function의 joint loss를 minimize를 하기 위한 방법을 잘 모르겠으니3d conv 필터가 학습해서 joint한걸 minimize하겠지 하는 마음
    • 계산 굉장히 복잡
    • 결과는 c와 수치적으로 큰 차이는 나지 않음

3. Method

(1) I3D (오늘의 것)

  • 3d conv활용. (앞에서 나온 3d는 네트워크를 새롭게 정의)
  • 여기서는 이미 잘 연구 잘돼있었던 3d네트워크 구조 그대로 가져오겠다
  • inceptionV1사용
  • 효율적인 네트워크의 구조도 있지만 이미지넷에서 프리트레이닝한 웨이트를 가져올 수 있기 때문
    • 성능을 많이 올리겠다
  • 2d → 3d how? inflation이라는 단어 사용
  • conv filter를 타임축으로 확정 (웨이트를 똑같이 복사)
  • 필터의 경우 타임축으로 n번 복제하면 이걸 나중에 1/n해서 스케일링 → 타임축으로 복제를 해주자
  • nxn을 타임축으로 n배 해주자 → 말이 안된다.
  • 가로세로축은 픽셀단위인데 시간축은 프레임단위. 이건 말이 안됨
  • 그래서 inceptionV1으로 아키텍쳐 만들었을 때 7x7 → 7x7x7 , 1x1 → 1x1x1이 기본 정의
  • 그래서! 앞에있는 맥스풀링 두개는 시간축으로 맥스풀링 하지 않는다

(2) architecture 요약

  • 3d썼지만 2d를 확장했기 때문에 imagenet에서 pretrained된 weight를 그대로 가져와 쓸 수 있고 3d는 그게 불가.
  • 가지고 온 3d conv구조가 효율적이라 image resolution도 그대로
  • time축도 64개까지 볼 수 있음

(3) Kinetics dataset

a. 설명

  • 400개 클래스 대해서 최소 400개, 10초 비디오 클립이 있는 dataset (30만개)
  • 당시 dataset에 비해 100배 이상 많은 데이터셋
  • 실제로 sports1M이 있기 떄문에 용량은 더 큼 (스포츠에 대해서만)
  • kinetics는 범용 카테고리를 가지고 있음.
  • 지금도 딥마인드 웹페이지 가면 키네틱스는 지속적으로 확장. 올해 700개 클래스로 발전(65만개)

b. 만든 방법

  • 만들고싶은 action class 정의
  • 유투브에 대해 구글 이미지 검색으로 액션들을 query 날림
  • mechanical turk사용해서 하나의 비디오에 대해 5사람한테 대해서 비디오
  • 5명으로부터 최소 3표이상 얻은 데이터만 라벨링 작업

4. Experiment

(1) 전체

  • 3가지 데이터 사용
  • 5가지의 액션 architecture 사용
  • I3D가 가장 높은 결과를 보여줌 (셋 다)
  • optical flow를 쓰는 3가지 (c,d,e)가 성능 좋았다는걸 알 수 있다

(1) kinetics에서 실험

  • ImageNet으로 pretraining 한 것이 과연 도움이 되었는가? 실험
  • 아주 많이는 아니지만 조금씩, 대략 2~3정도 상승
  • 3d conv같은 경우 이미지에 대한 pretraining 가져올 순 없었지만 다른건 가능

a. kinetics로 프리트레이닝했을 때 과연 효과가 있었을까?

(3) transfer learning (크게 두가지 방법)

  • Fixed
    • 큰 dataset으로 pretraining 한 후에 weight를 fix하고 마지막에 classfier layer만 새로 트레이닝
  • Full-FT
    • 모든 layer에 대해 새로운 타겟 dataset으로 다 업데이트 해주는 fine tuning
  • UCF101, HMDB-51사용
  • pretraining 안했을 때보다 했을 때 성능 좋음
  • Fixed < Full-FT
  • 데이터가 두개씩 있는데/는 imageNet pretraining 값 가지고 갈까말까 : 큰차이는 안나더라

  • SOTA 알고리즘 비교했을 때, I3D가 가장 높은 성능을 보임
  • 그 전까지는 ST-ResNet + IDT 가 SOTA
    • 2스트림 네트워크 사용했는데 기본적으로 ResNet 사용. 두개의 ResNet을 서로 왔다갔다 하는 연결

5. Conclusion

  • kinetics처럼 큰 dataset을 사용했더니 pretraining하는 효과가 있었다
  • 최적이라고 생각하는 architecture 제안
  • 2017년에 나옴
  • 올해는 facebook에서는 slow fast (optical flow사용하지 않는 network)가 좋음
  • 다른 task에 적용했을 때도 이런 방법이 효과가 있을지는 모르겠으니 한번 해봐라~

6. reference

반응형