DetNAS: Neural Architecture Search on Object Detection

sota
detection
nas

(Curtis Kim) #1

Essence & Contribution

  • 중국 컴퓨터 비전 회사 megvii
  • Detection에 #nas 를 적용한 첫 사례로 #sota 갱신
  • DARTs 의 supernet 으로부터 찾아가는 방식과 evolutionary 한 방식을 섞음
  • Classification(Imagenet)에 잘 맞는 backbone(eg. resnet) 과는 다른 형태의 backbone을 찾았고, 이 부분이 성능 향상의 핵심.

Key Ideas

우선 DARTs 와 유사하게 Supernet을 정의합니다. 모든 가능한 Architecture를 포함하는 Network를 Supernet이라고 합니다. 즉 Supernet의 일부가 최종적인 Architecture가 됩니다.

트레이닝은 크게 아래의 3단계입니다.

  1. Supernet을 Imagenet(Classification)에 weight training을 한다.
  2. Supernet을 Detection에 맞게 finetuning을 한다.
  3. Evolutionary algorithm을 활용해 Sampling되는 Subnetwork 들을 Evaluation해서 가장 성능이 좋은 architecture를 선정한다. 그리고 이를 scratch로부터 imagenet classification pre-training 및 detection finetuning을 한다.

1과 2의 과정에서 weight tranining을 할 때는, Supernet의 일부 subnetwork를 'uniform distribution’으로 선정하여 학습합니다. 즉, 랜덤하게 선별된 subnetwork 만 forward / backward 에 참여해 weight를 갱신합니다.

이렇게 하는 부분이 Darts와 다른데, 이를 이 논문에서는 Training과 Evaluation 시점의 차이를 줄여주기 위해서라고 설명하며 이는 SNAS 등 후속 논문 등에서도 유사 내용이 있는 부분입니다. 추가로 이 논문에서는 SyncBN을 사용하여 최대한 Batch Statistics도 정확하게 했을 뿐 아니라, 각 Subnetwork를 Evaluation하기 직전에 training 데이터로 Batch Normalization Statistic를 업데이트해주었다고 하는 부분이 기존 연구들과 사소하게 다른 점이라고 할 수 있습니다.

해서, 위와 같이 단계별로 소요 시간이 꽤 걸리는 편입니다.

Search Space는 Darts와 유사하게 다양한 Operation 중 하나를 고르는 형태로 되어 있습니다만, 차이점은 Shufflenet-v2 의 Unit을 차용했다는 점입니다. 즉 ShuffleNet의 Shuffle Unit의 3x3, 5x5, 7x7 커널들과 2가지의 residual branch 를 선택하는 것이 하나의 Block으로 정의됩니다. 이런 Block은 여러개가 쌓여서 하나의 Stage을 이루는데, 위 표의 n 개수만큼 반복됩니다. 여기서 n_1 은 300M FLOPs(모바일 세팅), n_2 는 1G FLOPs 이상의 세팅입니다.

Results

1G FLOPs 세팅의 결과입니다. Classification에서 성능이 가장 좋았던 backbone이 resnet-101인데, Detection으로 가면 성능이 가장 좋지는 않습니다. 이 논문에서 제시한 DetNASNet이 훨씬 적은 FLOPs로 나은 성능을 보입니다.

모바일 세팅 결과입니다. 역시 동일하며, ClasNASNet(Classification Backbone) 대비 성능 향상이 유의미하게 있습니다. 여기서 DetNAS-S와 DetNAS-P는 각각 Imagenet Pre-training 여부로, pretraining이 성능 향상에 좋은 영향을 미침을 알 수 있습니다.

ClsNASNet(Classification Backbone) 대비 이 논문에서 제시한 Architecture가 크게 2가지 다른 특징이 있다고 설명합니다.

  1. 앞쪽 Layer에서는 큰 Kernel(eg. 7x7)을 주로 사용하려 한다.
  2. 뒤쪽 Layer에서는 작은 Kernel을 사용한다.

(논문에는 이에 대한 나름의 해석도 있습니다만, 이건 코에 걸면 코걸이 귀에 걸면 귀걸이라고 생각합니다.)

결론적으로, Classification과 다른 형태의 Backbone 제시를 통해 효율적인 연산 대비 의미있는 성능 향상을 이끌어낸 논문입니다.