MoViNets: Mobile Video Networks for Efficient Video Recognition

Mini's Place·2022년 2월 16일
0

Abstract


  • 기존의 3D CNN
  • 본 논문에서 제시하는 3가지 접근 (Main Point)
    1. Video Network Search Space & Neural Architecture Search
    2. Stream Buffer Techique
    3. Simple Ensembling Techinque
  • 이 3가지 접근으로 Kinetics, Moments in Time, Charades video action recognition 데이터셋에서 SOTA(state-of-the-art) 정확도와 효율을 기록.

Introduction


현재까지의 상황

  • Efficient Video Recognition 모델이 휴대폰 카메라, IoT, 자율 주행 등 기기에서의 처리가 중요한 분야에서 각광받고 있다. 하지만 Deep Video Modeling이 많은 발전을 거듭함에도 불구하고, 아직 모바일 기기에 적용되고, 높은 인식 성능을 보이는 모델은 찾기 어렵다.
  • 3D CNN vs 2D CNN
    • 3D CNN - 높은 정확도(SOTA)를 가지지만, 엄청난 양의 메모리와 계산량을 소모.
    • 2D CNN - 모바일 기기에서 사용할 수 있을 정도로 훨씬 적은 양의 정보를 필요로 하고 Online에서도 사용할 수 있지만 정확도가 떨어짐.
  • Many Operation (3D Video Network 정확도 ⬆ , ex. Temporal Convolution, Non-local blocks) - 한번에 처리되는 모든 Input frame가 필요 → 모바일 기기에서 작동되기 위한 정확한 모델들을 위한 기회를 제한
  • X3D Networks (Recently proposed) → 3D CNN 효율성 향상 but 메모리가 너무 많이 필요 + Large Temporal Window를 사용하면 High Cost / Small Temporal Window를 사용하면 Low Accuracy를 보임 → Large Temporal Window가 뭘까?
    • X3D: Expanding Architectures for Efficient Video Recognition (CVPR 2020) → 공부해보고 정리해서 링크로...!
  • 2D CNN의 정확도 향상을 위한 여러 접근 (Temporal Aggregation 활용) → 제한된 Inter-frame Interaction이 3D CNN같이 적절히 long-range temporal dependencies를 모델하는 능력을 감소 → 이 부분은 아직 이해하지 못해서 좀더 다듬어서 표현해보겠음

본 논문에서 시도한 접근

  • MoViNet Search Space → Neural Architecture Search(NAS)로 하여금 효율적으로 시공간적 특징을 Trade-off 하도록 함.
    • NAS가 Efficiency, Accuracy를 Trade-off하는 최적의 특징 조합을 찾을 수 있는 것처럼 시간, 공간, 시공간적 특징을 어떻게 섞어야 할지 고민한 결과. 💡 Trade-off: 상충관계 → 한 부분에서 이득을 얻었을 때 다른 부분에서 손해를 가지는 관계를 뜻한다.
  • Stream Buffer → 비디오를 연속적인 작은 Subclip (long temporal Dependencies의 희생 없이 고정적인 메모리를 필요로 하는)으로 처리해 Online Inference가 가능하도록 함.
    • Training & Inference 모두를 위해 사용되는 메모리 용량을 줄임 → linear에서 constant로
    • vs 전통적인 Multi-clip Evaluation Approach (메모리 사용⬇️) → 중복 없는 연속적인 subclip 사이의 시간적 의존도를 이월
    • 시간적으로 단방향인 Causal Operation (ex. Causal Convolution, Cumulative Pooling, Causal squeeze-and-excitation) + Positional Encoding (MoVinet이 점차 Online Inference에서 적용될 수 있도록 Temporal Receptive Field가 오로지 이전 프레임만 보도록 강제) 함께 사용
  • Temporal Ensembles - Stream Buffer에서 손실된 조금의 정확도를 다시 되찾음.
    • 독립적으로 single model로 2개의 Streaming MoViNets를 train시키고 그들의 logit를 평균화. → Stream Buffer를 사용할때 잃은 정확도를 다시 얻음.

Mobile Video Networks (MoViNets)


  • Intro
    • TuNAS framework를 기본으로 해서 이를 Video Recognition을 위한 3D CNN을 위해 재정의해서 사용할 것
      • Paper (Can weight sharing outperform random architecture search? An investigation with TuNAS)
        • 가중치(weight)를 공유하면서 효율적인 NAS를 Implementation에 tuning하기 쉽게, 확장 가능하게 하는 방법
        • 이후 다른 페이지에서 정리할 예정
      • 요약하면, 기존에 좋은 성능을 가지고 있던 NAS를 좀더 확장 가능하게, 적용에 쉽게 Tune하게 하기 위해 가중치를 공유하는 NAS(Neural Architecture Search).
    • 데이터셋 → Kinetics 600
  • MoViNet Search Space
    • MobileNetV3을 Base로 사용

      • Mobile CPU에 최적화된 Computer Vision Architecture을 제안
      • 효율적인 네트워크 디자인,
    • 3D Video를 입력값으로 다루기 위해 MobileNetV3에 있는 2D block를 확장.

    • Overview of MoViNet Search Space

      - 변수 정의 - T : 프레임 수 - S : Input size - $c^{base}$ : base filter width - L : layer 수 - Each Block in network - Block에서 반복하면서 $c^{base}, L<=10$ 를 찾아나감. - 모든 Block의 Feature Map Channel에 Multiplifier (0.75, 1, 1.25)을 적용하여 8의 배수로 반올림 - Block 수는 5개로 설정하여 4번째 block을 제외한 각각의 block의 첫번째 layer에서 strided spatial downsampling → 마지막 Block이 Spatial resolution $7^2$을 갖게 하기 위함. - 이 Block이 Feature Map Channels을 점차 늘려감. {16,24,48,96,96,192} - 마지막 Convolution layer’s base filter width = 512 ~~~ - SE(squeeze-and-excitation) 대신 SE block을 사용하여 3D average pooling을 통해 시공간적 특징을 합침 → 모든 Bottleneck block에 적용
    • Base search space → MoViNet-A2

    • compound scaling heuristic 적용 → 뭘까?

    • 본 접근이 갖는 차이점

      • single model보다 오히려 search space 그 자체를 키움
      • 좋은 Architecture을 찾아 확장하는 방법이 아닌 모든 Architecture의 모든 Scaling을 찾는 방법을 선택 → 가능한 Model의 범위를 넓힘.
    • scaling coefficients를 찾기 위해 random search를 사용

      → 현재까지 언급한 MoViNet Search Space는 input frame의 수에 비례하여 메모리 사용량이 증가 (모바일 디바이스에서 긴 영상을 다루기 어렵게 만듬)

      → 따라서 다음 section에서 메모리 소모량을 linear에서 constant로 줄여주는 Stream Buffer에 대해 소개할 것임.

  • Stream Buffer with Causal Operations
    • Stream Buffer
      • 일반적으로 메모리를 줄여주는 해결책은 multi-clip evalution이 사용된다.

        • n개의 중복적인 subclip에서의 prediction을 평균화
        • O(Tclip)**O(T^{clip})**으로 메모리 사용량을 줄임 → 2가지 단점이 있음.
          1. 시간적 receptive fields를 각각의 subclip으로 제한하고 long-range dependencies를 무시 → Accuracy ⬇️
          2. 중복하는 fram activation을 다시 계산 → Efficiency ⬇️
      • 이와 같은 단점을 해결하기 위해 본 논문에서는 Stream Buffer을 제안

        • Stream Buffer : temporal receptive field를 subclip 전체에 확장하고 재계산이 필요없도록 하는 feature activation을 subclip 범위 안에서 cache하는 메커니즘...?
      • 먼저 xiclipx_i^{clip}을 현재 i < n 로 단계에서 현재 subclip으로 정하고 time dimension에서 b의 길이를 갖는 Buffer B를 0으로 초기화한 Tensor로 나타낼 것이다.

        • → n: 시작 전에 비디오를 n개의 중복하지 않는 인접한 TclipT^{clip}의 길이를 갖는 subclip으로 각각 자름.
      • 이후, time dimension에 있는 subclip과 이어진 Buffer의 Feature map FiF_i를 계산한다.

        → f : 시공간적 작용을 의미(ex. 3D Convolution)
      • 그 다음 clip을 처리할때 Buffer를 업데이트한다.

        - [-b:] : Input의 마지막 b개의 프레임 선택 → 결과적으로 메모리 소모량은 $O(b+T^{clip})$에 의존하며, 이는 total video frames T 또는 subclip의 수가 증가함에도 일정하다.

        → TSM(Temporal Shift Module)은 Stream Buffer에서 b = 1이고 f가 Buffer (Bt=xt1)B_t = x_{t-1})의 Channel 비율을 input xtx_t로 바꾸는 Operation인 특별한 case이다.

    • Causal Operations → CausalConv. & CausalSE와 같은 조건을 달아 online에서 사용~~
      • Intro
        • Stream Buffer를 3D CNN의 작동에 fit하는 합리적인 접근은 인과성을 강제하는 것이다. → ex. 어떠한 특징도 Future Frame으로부터 계산되면 안된다.
        • 장점
          • Activation, Prediction에 영향을 주지 않고 subclip xiclipx_i^{clip}을 single frame으로 낮출 수 있음.
          • 3D CNN이 Online-Inference에서 작동 가능
      • Causal Convolution (CausalConv.)
        • 모든 Temporal Convolution을 CausalConvs로 대체. → Temporal Dimension을 따라 단방향이 되도록
          • 먼저 Padding을 계산 → 마지막 프레임 이후의 모든 padding을 이동시켜 첫번째 프레임 이전의 padding과 병합.
            • 이전 subclip의 마지막 몇 개의 frame을 가져와서 다음 subclip의 padding에 복사 → CausalConv랑 stream buffer를 같이 사용해서 causal padding을 buffer로 대체 가능
            • stream buffer는 여러 프레임의 Feature를 합치는 레이어 이전에만 필요.
      • Cumulative Global Average Pooling (CGAP)
        • temporal dimension을 포함한 GAP(Global Average Pooling)를 간략하게 하기 위해 사용 → GAP : 각 Feature Map상의 노드값들의 평균을 뽑아내는 과정
        • 수식 CGAP(x,T)=(1/T)t=1TxtCGAP(x,T') = (1/T')\sum_{t=1}^{T'}x_t → x: tensor of activations
      • CausalSE with Positional Enconding
        • CausalSe = CGAP의 SE로의 적용
        • CaulsalSE는 SE Projection layer로 인한 불안정성이 높아지는 경향이 있어 CGAP의 품질 결정하는데 어려움이 있음. → 무슨말...? → 해결하기 위해 sine-based fixed positional encoding(POSENC) 사용 (inspired by Transformer)
    • Training and Inference with Stream Buffers → Stream Buffer를 어떻게 Training & Inference 과정에 적용하는지에 대한 설명
      1. Training with Stream Buffer
        • Training 과정에서 필요한 메모리를 줄이기 위해 주어진 예시를 n개의 subclip으로 나누는 과정 → Stream Buffer를 사용해 각 subclip에서 prediction을 Output으로 뽑음.
        • Batch gradient accumulation이랑 비슷하게 loss 값을 계산하고 subclip 사이에 계산된 gradient를 축적
      2. Online Inference
        • CausalConv / CausalSE 처럼 causal operation을 사용할 때 좋은건 3D video CNN을 온라인에서 사용할 수 있는 것.
        • Train에서랑 비슷하게 stream buffer를 사용하는데 subclip length를 single frame으로 설정할 수 있음. → 기존 RNN처럼 새로운 정보를 축적하면서 output값을 출력할 수 있는데, 이에 더해 같은 output을 내기 위해 다양한 수의 frame을 입력값으로 넣을 수 있음
  • Temporal Ensembles
    • Stream Buffer를 사용하면 Accuracy가 1% 내려가는데 해당 부분을 간단한 Ensemble을 활용해 다시 올릴 수 있다.
    • Temporal Duration은 같게, 프레임 속도를 절반으로 해서 2개의 MoviNets를 같은 구조로 각각 훈련시키고, 같은 Video를 입력값으로 넣은 뒤 Softmax를 적용하기 전에 가중치가 없는 logit에 산술평균을 적용

0개의 댓글