논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Scaled-YOLOv4: Scaling Cross Stage Partial Network

Problem

  • Deep learning 기반의 객체 검출은 여러 분야에서 다양한 계산 환경에 적용되고 있다. 때문에 환경에 따라 모델의 scaling은 매우 중요한 문제이다.
  • 보통 scaling 방법은 CNN의 depth나 width를 변경시킨 뒤 CNN을 다시 학습시키는 방법을 사용한다.

Essence

  • 이 논문에서는 YOLOv4에 scaling 기술을 적용한 scaled-YOLOv4를 제안한다.
    • YOLOv4를 수정하여 YOLOv4-CSP로 다시 디자인하였고, 이를 토대로 scaled-YOLOv4를 만들었다.
    • 또한 모델 scaling의 상한, 하안에 대해서 논의하였고, 이를 토대로 YOLOv4-large와 YOLOv4-tiny 모델을 모두 만들어낼 수 있었다.
    • Scaled-YOLOv4는 임베디드 시스템에서도 15, 30, 60 fps로 동작할 수 있다.

Detail

  • 보통 모델 scaling에 사용되는 파라미터는 입력 이미지 크기 , 모델의 width , 모델의 depth 가 있다.
  • 모델을 scaling하기 위해 파라미터를 변경할 때 Res layer, ResX layer, Dark layer 들의 계산량 변화를 보면 Table 1과 같다. 여기서 는 레이어의 수, 는 채널을 나타낸다.
  • 만약 Wang이 제안한 CSPNet을 적용한다면 이런 계산량 변화는 아래 Table 2와 같이 꽤 줄일 수 있게 된다.
  • 따라서 기존 모델에 CSPNet을 적용하면 FLOPs를 현저히 줄일 수 있게 되므로, 새로운 모델은 CSP를 적용하는 것도 좋다고 판단하였다.

for Low-End Devices

  • Low-end 장치에서는 계산량이나 파라미터의 수 뿐만 아니라 메모리 대역폭, MACs, DRAM traffic 등도 고려하여야 한다.
  • 모델을 scaling 하였을 때, 계산복잡도의 수준에는 되도록이면 영향을 적게 하고 싶을 것이다.
  • 아래는 DenseNet과 OSANet의 레이어에 대한 FLOPs를 나타낸 것이다.
  • 일반적으로 CNN은 이므로 DenseNet은 , OSANet은 이 되므로, 두 항 모두 DenseNet보다 적은 계산 복잡도를 가진다. 따라서 OSANet을 참고하여 적은 계산복잡도를 이끌어 냈다.
  • 계산 시간과 성능과의 트레이드오프를 최대한 이끌어 내기 위해서 새로운 컨셉인 CSPNet의 각 블록에 gradient truncation을 적용하였다.
  • OSANet의 블록은 PlainNet 구조를 가지고 있으므로 CSPNet을 적용하면 gradient truncation을 적용된다. (?)
  • CIO는 DRAM IO에 대한 지수인데, 일 경우 CSPOSANet이 가장 좋은 CIO를 나타 내었다.

For High-End GPUs

  • 객체 인식에서는 하나의 feature에서 객체의 종류화 함꼐 위치 크기 정보까지 추정하여야 한다.
  • 위치, 크기 정보는 receptive field의 크기와 관련이 있으며, CNN에서는 stage의 수와 연결되어 있다.
  • Scaling 관련 하여서는 입력 영상의 크기나 모델의 width와는 관계가 없고, depth와 stage의 수가 receptive field와 관련이 있다.
  • 만약 입력 이미지의 크기가 커졌을 경우 depth나 stage의 수를 늘려야 성능이 좋아질텐데, 실험적으로는 stage를 늘리는 것이 효과가 좋았다.
  • 따라서 모델을 scaling up하고자 할 때, 먼저 입력 크기와 stage를 먼저 수정하고, 실행 속도에 따라 depth와 width를 다음으로 수정하는 전략을 사용하였다.

Scaled-YOLOv4

  • 먼저 YOLOv4을 다시 디자인하여 속도와 최상의 성능 트레이드오프를 얻은 YOLOv4-CSP를 만들었다.
  • 백본으로 사용된 CSPDarknet53에서는 스테이지간 다운샘플링 컨볼루션을 residual block에 넣지 않았다.
  • 각 스테이지의 Residual 레이어는 수는 1-2-8-8-4로 조절하였다.
  • 첫 CSP 스테이지는 원래의 Darknet residual layer를 사용하였다.
  • 또한 CSP처리된 PAN 아키텍쳐를 사용하여 계산량을 40%가량 감소시켰다.
  • 원래 SPP모듈을 첫번째 계산 그룹의 중간에 삽입되는 구조였으나, CSPPAN의 첫번째 계산 그룹 중간에도 삽입하였다.
  • YOLOv4-tiny를 위해서는 PCB 구조를 사용한 CSPOSANet를 적용하였다.
  • YOLOv4-large를 위해서는 CSP를 완전히 적용한 YOLOv4-P5를 디자인하고 이를 스케일링 업하여 -P6, -P7 버전 또한 만들어냈다.
  • 입력 크기와 스테이지 수를 늘리고, depth scale을 로 지정하였다. 사용한 는 [1, 3, 15, 15, 7, 7, 7]이다.
  • 또한 inference time을 고려해가면서 width scaling을 적용하였다.

Add a Comment Trackback