알고리즘 포스팅 글 관련 사항

|

알고리즘 포스팅 글 관련 사항

  • 백준 알고리즘 측에서 포스팅 내용 관련하여 저작권 침해 요지가 있다 판단되는 부분에 대한 글 삭제 요청을 하였습니다. 따라서 관련된 모든 포스팅 내용을 내리게 되었습니다.

양해 부탁드립니다.

2D convolution methods

|

2D convolution methods

  • 참고
    • https://janth.home.xs4all.nl/Publications/html/conv2d.html
  • 가장 간단한것부터 가장 빠른 cache re-usage에 최적화된 방법까지 다뤄짐
  • 2D convolution은 4개의 중첩 루프(nested loop)로 생각하면 됨
  • 코드 내에서
    • oplx, oply는 operator의 x와 y방향의 길이
    • nx, ny는 data 크기
      • spatial 방향의 x, y 길이
    • opx 배열은 convolution operator를 담고 있음
    • data는 입력 데이터를 담고 있음
    • velmod는 new operator가 load 되어야하는지 마는지에 대한 정보를 담는 2d array
      • operator는 convolution의 계수(weight)를 의미함
      • velmod가 이전에 사용된 operator(c)와 다를 경우 새로운 operator가 load되어야 함
    • readtable2Dcom에 의존적으로 정확한 operator를 load하는 함수임

1. Simple method

  • 알듯이, for문을 이용해 도는 방법
  • Operator에 대해서 대칭을 사용하지 않고 모든 x와 y의 위치를 반복해서 전체 operator의 길이(oplx * oply 만큼) convolution을 수행하는 방법
    • 아래 코드는 경계부분 처리를 위한 방법을 포함하고 있음
  • Simple method는 symmetry 특성을 전혀 사용하지 않음
views
hoplx = (oplx + 1) / 2;
hoply = (oply + 1) / 2;

for(iy = 0; iy < ny; iy++)
{
  starty = MAX(iy - hoply + 1, 0);
  endy = MIN(iy + hoply, ny);
  for(ix = 0; ix < nx; ix++)
  {
    startx = MAX(ix - hoplx + 1, 0);
    endx = MIN(ix + hoplx, nx);
    /*if velocity changes, then calculate new operator*/
    if(velmod[iy*nx + ix] != c)
    {
      c = velmod[iy*nx+ix];
      readtable2D(opx, om/c, hoplx, hoply, mode);
    }
    
    /* convolution with the operator */
    dumr = dumi = 0.0;
    k = MAX(hoply-1-iy, 0);
    for (i = starty; i < endy; i++)
    {
      l = MAX(hoplx-1-ix, 0);
      for (j = startx; j < endx; j++)
      {
        dumr += data[i*nx+j].r*opx[k*oplx+l].r;
        dumr += data[i*nx+j].i*opx[k*oplx+l].i;
        dumi += data[i*nx+j].i*opx[k*oplx+l].r;
        dumi -= data[i*nx+j].r*opx[k*oplx+l].i;
        l++;
      }
      k++;
    }
    convr[iy*nx+ix].r = dumr;
    convr[iy*nx+ix].i = dumi;
  }
}

2. Symmetric 2D

3. Symmetric circle

4. Symmetric and cache

  • 위의 방법들은 operator의 symmetry 특성만을 이용한 방법이며, cache에 대해선 고려하지 않았음
  • 이 방법은 cache에 존재하는 data들을 가능한 최대한 다시 재사용하면서 x와 y방향의 대칭을 이용함
  • 또한 inner loop (길이: opersize = oplx * oply)에서 한 번의 엑세스만 필요한 방식으로 데이터를 배열함
  • 이 형태의 데이터를 얻기 위해 x방향으로 tmp3에 addition이 수행됨
  • tmp4 array는 y 인덱스가 반대인 tmp3과 동일함
  • tmp3 array는 전체에 대해 재사용됨
views
  • x와 y방향의 대칭 특성이 이용되었음
  • x 방향의 대칭(symmetry)특성을 이용한 addition은 tmp3 array에 저장됨
  • The symmetry in the y direction is used by making a reversed copy of tmp3 such that stride one access can be used.
hoplx = (oplx+1)/2;
hoply = (oply+1)/2;
hoplx2 = hoplx-1;
hoply2 = hoply-1;
lenx = nx+2*hoplx2;
leny = ny+2*hoply2;
tmpsize = leny*hoplx+nx;
opersize = hoplx*hoply;

copy = (complex *)calloc(lenx*leny, sizeof(complex));
tmp3 = (complex *)calloc(tmpsize, sizeof(complex));
tmp4 = (complex *)calloc(tmpsize, sizeof(complex));
hopx = (complex *)calloc(opersize, sizeof(complex));

/* Copy data into another array with zeroes added to the edges */

for (iy = 0; iy < ny; iy++)
{
  memcpy(&copy[(hoply2+iy)*lenx+hoplx2], &data[iy*nx], nx*sizeof(complex));
}
memset( (float *)&data[0].r, 0, 2*nx*ny*sizeof(float) );

/* fill temporary arrays */

for (iy = 0; iy < leny; iy++)
{
  for (ix = 0; ix < hoplx; ix++)
  {
    tmp3[iy*hoplx+ix].r = copy[iy*lenx+hoplx2+ix].r + copy[iy*lenx+hoplx2-ix].r;
    tmp3[iy*hoplx+ix].i = copy[iy*lenx+hoplx2+ix].i + copy[iy*lenx+hoplx2-ix].i;
  }
}

for (iy = 0; iy < leny; iy++)
{
  memcpy(&tmp4[iy*hoplx], &tmp3[(leny-iy-1)*hoplx], hoplx*sizeof(complex));
}

/* The 2D-Convolution */
for (ix = 0; ix < nx; ix++)
{
  for (iy = 0; iy < ny; iy++
  {
    pos = iy*nx+ix;
    
    /* if velocity changes calculate new operator */
    if (velmod[pos] != c)
    {
      c = velmod[pos];
      readtable2D(hopx, om/c, hoplx, hoply, mode);
    }

    index3 = (hoply2+iy)*hoplx;
    index4 = (leny-hoply2-iy-1)*hoplx;
    datar = datai = 0.0;

    for (j = 0; j < opersize; j++)
    {
      dumr = tmp3[index3+j].r + tmp4[index4+j].r;
      dumi = tmp3[index3+j].i + tmp4[index4+j].i;

      datar += dumr*hopx[j].r;
      datar += dumi*hopx[j].i;
      datai += dumi*hopx[j].r;
      datai -= dumr*hopx[j].i;
    }
    data[pos].r = datar;
    data[pos].i = datai;
  }

  for (iy2 = 0; iy2 < leny; iy2++)
  {
    for (ix2 = 0; ix2 < hoplx; ix2++)
    {
      tmp3[iy2*hoplx+ix2].r = copy[iy2*lenx+hoplx2+ix2+ix].r + copy[iy2*lenx+hoplx2-ix2+ix].r;
      tmp3[iy2*hoplx+ix2].i = copy[iy2*lenx+hoplx2+ix2+ix].i + copy[iy2*lenx+hoplx2-ix2+ix].i;
    }
  }
  for (iy2 = 0; iy2 < leny; iy2++)
  {
     memcpy(&tmp4[iy2*hoplx], &tmp3[(leny-iy2-1)*hoplx], hoplx*sizeof(complex));
  }
}

Semantic Segmentation (FCN, Fully Convolutional Network)

|

Semantic Segmentation (FCN, Fully Convolutional Network)

  • 참고
    • https://medium.com/hyunjulie/1%ED%8E%B8-semantic-segmentation-%EC%B2%AB%EA%B1%B8%EC%9D%8C-4180367ec9cb
    • https://medium.com/nanonets/how-to-do-image-segmentation-using-deep-learning-c673cc5862ef
    • https://www.youtube.com/watch?v=nDPWywWRIRo&feature=youtu.be

Introduction

  • Fully Convolutional Network(FCN)에 대한 내용은 아래에서 다룸
views views
from DeepLab V3+
  • 사진을 보고 분류하는 것이 아니라, 장면을 완벽히 이해해야 하는 높은 수준의 문제임
    • 자율주행 등 적용 가능 분야가 매우 큼
  • 실제 구글 Pixel 2와 Pixel 2X 스마트폰에선 구글의 DeepLab V3+ 논문의 방법을 이용해 Portrait Mode를 구현함
    • 아이폰의 Portrait Mode와 유사하지만, 2개의 스테레오 카메라를 이용하는 아이폰 X의 방법과는 다르게 단안 카메라의 영상을 이용해 딥러닝을 적용시켜 동일한 결과를 얻어냄
views
Google Pixel 2의 Portrait Mode
  • 즉, Semantic Segmentation은 영상 내 모든 픽셀의 레이블을 예측하는 task를 의미함
    • FCN, SegNet, DeepLab 등
  • 이미지에 있는 모든 픽셀에 대한 예측이므로 dense prediction이라고도 불림

  • Semantic Segmentation은 같은 class의 instance를 구별하지 않음
    • 즉, 아래의 짱구 사진처럼 같은 class에 속하는 사람 object 4개를 따로 구분하지 않음
views
  • Semantic segmentation에선 해당 픽셀 자체가 어떤 class에 속하는지에만 관심이 있음
views
  • 위의 좌측 사진처럼 각각 객체의 종류와 어떤 객체인지에 대한 분류가 아니라
    • 이처럼 instance를 구별하는 task는 Instance Segmentation이라고 불림
  • 위의 우측 사진처럼 각각 객체의 종류의 분류만을 목적으로 함

  • MS COCO detection challenge는 80개의 class, PASCAL VOC challenge는 21개의 class를 갖고 있음
views

Semantic Segmentation 이해하기

  • Input: RGB color 이미지 ($height\times width\times 3$) 또는 흑백 이미지
  • Output: 각 픽셀별 어느 class에 속하는지를 나타내는 레이블을 나타낸 Segmentation Map
    • 아래에선 단순화된 segmentation map 예시를 확인 가능하며, 실제론 입력과 동일한 resolution의 map을 가짐
views
  • One-Hot encoding으로 각 class에 대해 출력 채널을 만들어서 segmentation map을 생성함
  • Class의 개수 만큼 만들어진 채널을 argmax를 통해 위에 있는 이미지처럼 하나의 출력물을 내놓음
    • argmax? channel 방향으로 가장 큰 값의 index를 출력
      • ex. x = [0, 1, 4, 3] 일 때, argmax(x)의 결과는 2
    • 직관적 이해는 아래의 사진 참고
views
각 Class별로 출력 채널을 만든 후 argmax 적용

다양한 Semantic Segmentation 방법들

  • AlexNet, VGG등 classification에서 자주 쓰이는 깊은 신경망들은 Semantic Segmentation을 하는데 적합하지 않음
    • 이러한 모델들은 파라미터의 개수와 차원(depth)을 줄이는 layer들을 갖고 있어서 자세한 위치정보를 잃게 되기 때문
    • 또한 보통 마지막에 쓰이는 Fully Connected Layer에 의해서 위치에 대한 정보를 잃게 됨
  • 만약 공간/위치에 대한 정보를 잃지 않기 위해 Pooling과 Fully Connected Layer을 없애고, stride가 1이고 padding도 일정한 convolution을 적용시킬 수 있음
    • 하지만 이렇게 될 경우 input의 차원(depth)은 보존 할 수 있겠지만, 파라미터의 개수가 너무 많아져서 메모리 문제나 계산하는데 비용이 너무 많이 들어서 현실적으로 불가능함
  • 이 문제의 중간점을 찾기 위해서 보통 Semantic Segmentation 모델들은 일반적으로 Down-sampling & Up-sampling의 형태를 가짐
views
Semantic Segmentation의 인코더-디코더 구조

Down-sampling

  • 주 목적은 차원을 줄여서 적은 메모리로 deeper CNN의 구조적 이점을 취하기 위함임
    • 일반적으로 stride를 2 이상으로 하는 convolution을 사용하거나 pooling을 사용함
    • 이 과정에서 semantic feature의 정보를 잃게 됨
  • 마지막에 Fully-Connected Layer (FC Layer) 대신 마지막 레이어까지 Conv layer로 구성된 Fully Convolutional Network (FCN)를 사용함
    • FCN모델에서 이와 같은 방법을 제시한 이후 나온 대부분의 모델들이 FC layer 대신 이러한 구조를 갖게 됨
      • 파라미터나 연산의 효율성 측면에서 이점이 큼

Up-sampling

  • Down-sampling을 통해서 얻어진 output feature map의 차원을 늘려서 input과 같은 차원으로 만들어주는 과정
    • Depth 방향으로는 전체 클래스 갯수만큼, spatial 방향으로는 input resolution만큼
    • 주로 Strided Transpose Convolution을 사용함
  • 논문들에서는 Downsampling이라고 하는 부분을 인코더(Encoder), Upsampling 하는 과정을 디코더(Decoder) 라고 칭함
    • GAN에서 쓰이는 모델과 비슷한 형태 및 이름을 갖고 있음
  • 인코더를 통해서 입력받은 이미지의 정보를 압축된 벡터의 형태로 표현하고, 디코더를 통해서 원하는 결과물의 크기로 만들어냄

  • 이러한 인코더-디코더 형태를 가진 유명한 모델들로는 FCN, SegNet, UNet등이 있음
    • Shortcut connection을 어떻게 활용하느냐에 따라서 몇가지 모델들이 존재함
      • e.g. pooling indices를 활용한 SegNet, feature map을 복사해 합치는 U-Net 등
  • 이러한 형태의 모델에 대한 연구를 불지핀(?) 역할을 한 FCN에 대해 조금 더 자세히 알아보면 아래와 같음

Fully Convolutional Network for Semantic Segmentation (FCN)

  • 2014년 Long et al.의 유명한 논문인 Fully Convolutional Network가 나온 후 FC layer가 없는 CNN이 통용되기 시작함
    • 이로 인해 어떤 크기의 이미지로도 segmentation map을 만들 수 있게 되었음
    • 당시 SOTA였던 Patch Classification보다 훨씬 빠르게 결과를 낼 수 있었음
  • 이후 나온 Semantic Segmentation 방법론은 거의 대부분 FCN을 기반으로 했다고 할 정도로 큰 임팩트를 줌
views

FCN의 특징

  • VGG16을 backbone으로 이용해 Transfer learning
  • VGG16의 마지막 레이어인 FC layer들을 1x1 convolution layer로 바꿈
    • 이 부분에서 이 모델의 이름인 Fully Convolutional 이 나옴
    • 이 과정을 통해 낮은 해상도의 Class Presence Heat Map을 얻게 됨
    • FC layer를 없앤 이유?
      • 네트워크 마지막 부분에서 FC layer를 거치고 나면 위치 정보가 사라지는 문제가 있기 때문임
      • Segmentation은 위치정보가 핵심이기에 이는 심각한 문제임
  • Transposed Convolution을 통해서 위에서 생성된 낮은 해상도의 heat map(feature map)을 upsampling해서 input과 같은 크기의 map을 만듦
  • Upsampling 시 VGG16의 low-level layer에서 만들어진 feature map과 residual connection 형성
    • Pixel by pixel 더하기
  • 여러 단의 convolution layer중 후반부에 있는 feature map을 결합하면 중요한 semantic 정보를 얻을 수 있음
  • 각 convolution block이 끝난 후 skip connection을 통해서 이전에 pooled된 특징들을 다시한번 합쳐줌

  • 하지만, FCN 모델은 정해진 fixed Receptive Field(RF)를 사용함
    • 이로 인해 작은 물체들은 무시되거나 오탐되는 경우가 있거나
    • 큰 물체를 작은 물체로 인식하거나 일정하지 않은 결과가 나올 수 있음
  • 또한 pooling을 거치면서 해상도가 줄어든 것을 upsampling을 통해 spatial 방향의 복원을 수행함
    • 이로인해 결과가 정확하지 않다는 문제점을 갖고 있음
views
FCN논문의 문제점. 순서대로 Input, GT, Result.

Deeplab V3 (Dilated/Atrous Convolution을 사용하는 방법)

  • Deeplab이 제시하는 방법으로, 신호가 소멸되는 것을 제어하고 다양한 scale의 feature를 학습가능하게 하는 방법을 제시
  • Atrous Convolution은 dilation rate라는 새로운 변수를 활용함 (참고 1, 참고 2)
    • 일반적인 convolution은 dilation rate = 1 인 경우에 해당함
    • 3x3 크기의 커널이 2의 dilation rate를 갖는다면 실제로는 5x5의 RF와 동일한 spatial 범위를 커버함
    • 이러한 방법은 동일한 연산 비용으로 보다 넓은 RF를 커버 할 수 있게 함
views
Atrous convolution
  • Deeplab V3은 ImageNet pretrained ResNet을 backbone(feature extractor)으로 사용함
    • ResNet의 마지막 block에서는 여러가지의 dilation rate를 사용한 Atrous Convolution을 사용해서 다양한 RF로 생성된 multi-scale feature들을 뽑아낼 수 있도록 함
  • 이전 Deeplab 버전에서 소개되었던 Atrous Spatial Pyramid Pooling (ASPP, 참고) 을 사용함
views
  • Deeplab V3은 새로운 아이디어라기보단 좋은 성능을 보였던 모델들의 방법들과 특징들을 섞어서 만든 모델
    • 다양한 dilation rate를 가진 커널을 병렬적으로 해 multi-branch 구조를 갖도록 한 convolution임

Conclusion

  • 지금까지 Semantic Segmentation과 접근방법에 대해 알아봄
  • 다음엔 DeepLab V3 논문을 조금 더 자세히 봐야할듯 (참고)

Feature Pyramid Networks for Object Detection

|

Feature Pyramid Networks for Object Detection

Original paper: https://arxiv.org/abs/1612.03144

Authors: Tsung-Yi Lin, Piotr Dollár, Ross Girshick, Kaiming He, Bharath Hariharan, Serge Belongie (Facebook, Cornell Univ.)

  • 참고 글
    • https://eehoeskrap.tistory.com/300
    • https://medium.com/@lsrock125/feature-pyramid-networks-for-object-detection-%EB%85%BC%EB%AC%B8%EC%9D%BD%EA%B8%B0-e4e577c4b423
    • https://hwkim94.github.io/deeplearning/cnn/image-detection/fpn/paperreview/2018/10/01/FPN1.html

Introduction

  • Object detection 분야에서 Scale-Invariant는 아주 중요한 문제
    • Scale과 location에 상관없이 객체를 하나의 class로 탐지해야 하기 때문
  • 예전에는 다양한 크기의 물체를 탐지하기 위해 이미지 자체의 크기를 resize하면서 물체를 찾았음
    • Pooling이나 stride convolution으로 feature map의 size를 조절하여 detection layer로 객체를 탐지
      • SSD, RFB 등의 기존의 1-stage method들
    • 이러한 작업은 메모리 및 시간 측면에서 비효율적
  • 이를 개선하기 위해 Feature Pyramid Network(FPN) 이라는 방법이 등장

Featurized Image Pyramid

views
  • 각 feature map level에서 독립적으로 특징을 추출해 객체를 탐지하는 방법
  • 연산량과 시간 관점에서 비효율적이며 practical하게 적용하기 어려움

Single Feature Map

views
  • 이 방법은 convolution layer가 scale variant에 robust한 점을 이용하는 방법
    • 이로 인해 Conv layer를 통해 feature를 압축하는 방식
  • 하지만 multi scale을 사용하지 않고 한 번에 feature를 압축하여 마지막에 압축된 feature만을 사용
    • 성능이 떨어짐
  • YOLO V1에서 사용하는 방법

Pyramidal Feature Hierarchy

views
  • 서로 다른 scale의 feature map을 이용해 multi scale feature를 추출하는 방식
  • 각 level에서 독립적으로 feature를 추출해 객체를 탐지함
    • 이 과정에서 이미 생성된 상위 level의 feature map을 재사용하지 않음
  • 대표적으로 SSD에서 사용하는 방식

Feature Pyramid Network (FPN)

  • Top-down 방식으로 feature를 추출함
    • 각 추출된 결과물인 feature map의 low-resolution 및 high-resolution feature들을 묶는 방식
  • 각 level에서 독립적으로 feature를 추출해 객체를 탐지함
    • 이 과정에서 상위 level에서 이미 생성된 feautre map을 재사용하므로 multi-scale feature들을 효율적으로 재사용 가능함
views
  • CNN 자체가 layer를 거치면서 pyramid 구조를 만들고, forward pass를 거치면서 feature map은 더 많은 semantic 정보를 갖는 feature를 얻게 됨
    • 각 level마다 prediction 과정을 넣어서 scale 변화에 더 강인한 모델이 됨
  • FPN은 skip connection, top-down, CNN forward pass 과정에서 생성되는 pyramid의 구조를가짐
    • Forward pass에서 생성된 feature map들을 top-down 과정에서 upsampling하여 spatial resolution을 올리고
    • Forward pass에서 손실된 localization feature들을 skip-connection을 이용해 보충
    • 위의 과정을 통해 scale variant에 강인한 feature map을 생성 할 수 있게 됨
  • FPN은 ConvNet의 피라미드 계층 구조를 활용함
    • 피라미드 특징 계층 구조는 낮은 수준에서 높은 수준까지의 semantic feature들을 모두 갖고 있음
  • 이로 인해 전반적으로 높은 수준의 semantic information을 포함하는 feature pyramid를 생성하게 됨
  • 이 FPN은 Fast R-CNN과 Faster R-CNN의 Region Proposal Network (RPN)을 기반으로 함

  • FPN은 입력으로 임의 크기의 단일 scale 영상을 입력받음
    • 전체적으로는 conv layer를 통해 비례된 크기의 feature map을 multi-level로 출력하게 됨
    • 이러한 feature concat process는 backbone network와 독립적으로 진행됨
      • 논문에선 ResNet을 backbone으로 사용함
  • 위의 과정을 크게 Bottom-up과 Top-down 프로세스로 설명
views

Bottom-up pathway

  • 위로 올라가는 bottom-up pathway의 forward 단계에서는 매 레이어마다 semantic을 응축하는 역할을 함
    • Backbone의 feed forward 계산과정
    • 각 level은 convolution block 혹은 residual block으로 이루어짐
    • 각 level의 마지막 layer를 각각 C2, C3, C4, C5로 정의
  • 깊은 모델의 경우 가로, 세로 크기가 같은 레이어들이 여러 개 있을 수 있음
    • 여기서 같은 크기를 갖는 레이어들을 하나의 단계로 취급해서 각 단계의 맨 마지막 레이어를 skip-connection으로 연결
  • 각 단계 마지막 레이어의 출력을 feature map의 reference set으로 선택함
  • 피라미드의 feature가 풍부하기 위해서는 각 단계의 가장 깊은 레이어에는 가장 의미 있는 feature가 있어야 함
    • 따라서 feature가 풍부한 각 단계의 마지막 feature map을 이용해 skip-connection 형성

Top-down pathway and lateral connections(skip-connection)

  • 하향식 과정에선 많은 semantic 정보들을 갖고 있는 feature map을 2배로 upsampling해 더 높은 해상도의 이미지를 만듦
  • 여기서 skip-connection을 통해 같은 사이즈의 bottom-up layer와 합쳐서 손실된 local한 정보를 보충해줌

  • Top-down 과정에서 매 레이어마다 classifier와 regressor가 적용됨
    • 같은 하나의 classifier와 regressor를 사용하기에 모두 같은 256 채널의 feature map을 입력받아야 함
    • 따라서 skip-connection을 할 때 1x1 conv로 채널을 맞춰주게 됨
  • 즉, upsampled feature map은 element-wise addition에 의해 bottom-up에서 생성된 feature map과 병합되는 과정을 거침
    • 이 과정에서 채널 수를 맞추기 위한 pointwise conv 수행
  • 이 프로세스는 마지막 resolution의 feature map이 생성될까지 동일하게 수행됨
views
  • 마지막으로, 합겨친 각 feature map에 3x3 conv를 수행해 upsampling의 aliasing 효과를 줄인 후 최종 feature map을 생성함
  • 이렇게 생성된 feature map은 각각 P2, P3, P4, P5이며, 동일한 spatial size인 C2, C3, C4, C5에 대응되어 lateral connection을 형성

Lateral connection이 없다면?

  • Top-down layer도 높은 semantic을 갖고 있지만, 지역적인 정보가 부족하게 되어 정확도가 떨어지게되는 단점이 생김

Pyramid 구조가 아니라면?

  • 크기가 다른 각 layer에서 예측하는 것이 아니라 top-down의 맨 마지막 레이어에서만 prediction 하면 baseline보다는 높지만 원 구조보다는 성능이 떨어짐
    • Scale variant에 덜 robust해지기 때문
  • 피라미드 구조의 맨 마지막의 해상도가 높기 때문에 많은 anchor들이 적용되었는데도 그다지 성능이 좋지 않음
    • 이는 anchor가 많은것이 성능을 높히기 충분하지 않다는 것을 반증함

Application

FPN for RPN

views
  • RPN을 위해 3x3 conv와 sibling 1x1 conv을 각 level에 추가 구성
    • 즉, 각 level의 feature마다 bounding box regression과 label classification 수행
  • 각각의 Pk에 single scale anchor box를 사용
    • 작은 feature map에는 작은 anchor box, 큰 feature map에는 큰 anchor box를 적용
      • Multi-scale detection을 위함
  • IoU threshold
    • 0.7 이상은 positive, 0.3 이하는 negative
  • Sharing parameter
    • Sibling 1x1 conv의 parameter를 모든 FPN이 공유

FPN for Fast R-CNN

views
  1. FPN을 통해 다양한 scale의 feature map을 생성
  2. 가장 해상도가 높은 feature map을 RPN에 적용
  3. 각 region proposal을 적당한 크기의 feature map Pk에 적용
    • $k=\left \lfloor k_0 + log_2 (\sqrt{wh}/224) \right \rfloor$
    • $(w, h)$: Width and height of RoI
    • 224: Size of input image
  4. RoI pooling
  5. bounding box regression and label classification

Experiments on Object Detection

  • MS COCO
  • Backbone: Pretrained ResNet

Region Proposal with RPN

  • Synchronized SGD
  • Mini-batch = 2

Ablation Experiments

views
  • Comparisons with baselines
    • RPN에 single layer를 하나 더 사용하는것은 큰 효과 없음
      • Coarser resolutions과 stronger semantics의 trade-off 때문
      • 다양한 scale의 feature map을 만드는 FPN이 더 효율적
  • How important is top-down enrichment?
    • Top-down pathway 제거 후 bottom-up pathway에서 낮은 level의 feature map을 재사용
      • Level마다 semantic gap이 존재하기에 큰 영향을 미치지 못함
  • How important are lateral connections?
    • Skip-connection(lateral connection) 삭제
      • Down sampling과 up sampling을 여러번 했기에 location 정보가 부정확
      • Lateral connection이 있어야 bottom-up pathway의 location 정보가 잘 전달됨
  • How important are pyramid representations?
    • Top-down pathway의 마지막 feature map으로만 최종 결과 예측
      • Baseline보다는 좋은 성능을 보여주지만, FPN보다는 안좋은 성능
      • 이는 scale 변화에 덜 robust하기 때문
    • Anchor box의 개수를 늘림
      • Anchor box의 종류와 크기를 다양하게 사용해도 성능의 큰 향상은 없음
      • 즉, 단순히 anchor box 갯수를 늘리는 것으로는 성능을 끌어올리는 것은 힘듦

Object Detection with Fast/Faster R-CNN

Fast R-CNN (on fixed proposals)

views

Faster R-CNN (on consistent proposals)

views
  • Sharing features
views
  • Running time
    • 기존의 모델보다 느리지만 큰 차이는 없음

Comparing with COCO competition Winners

views

Extensions: Segmentation Proposals

  • Segmentation prosal을 만들기 위해 FPN을 사용
views

Segmentation Proposal Results

views

Conclusion

  • Multi-scale representation을 사용하는 것이 성능향상에 도움이 됨

Searching for MobileNetV3

|

Searching for MobileNetV3

Original paper: https://arxiv.org/pdf/1905.02244.pdf

Authors: Andrew Howard, Mark Sandler, Grace Chu, Liang-Chieh Chen, Bo Chen, Mingxing Tan, Weijun Wang, Yukun Zhu, Ruoming Pang, Vijay Vasudevan, Quoc V. Le, Hartwig Adam (Google)

Abstract

  • 새로운 아키텍쳐를 적용시키는 등의 여러 상호 보완적인 기술들을 조합해서 MobileNet v3를 제안
  • MobileNet v3는 mobile phone CPU에 최적화되어있음
    • NetAdapt와 NAS를 조합해서 새로운 구조를 제안
  • 본 논문에서는 automated search 알고리즘과 네트워크 디자인이 어떻게 같이 동작해서 전체적인 SOTA 성능을 달성하는지에 대한 보완적인 방법들을 다룸
  • 그 과정에서 MobileNetV3-Large와 MobileNetV3-Small이라는 모델을 제안함
    • Large는 high resource 사용시, Small은 low resource 사용시
  • 위 두 모델들은 Object detection과 Semantic segmentation에 적용되어 테스트 됨
  • Semantic segmentation(or any dense pixel prediction)에서는 효율적인 새로운 segmentation decoder인 Lite Reduced Atrous Spatial Pyramid Pooling (LR-ASPP)를 제안함
  • Mobile환경에서의 classification, detection, segmentation task에서 SOTA 성능을 달성했음
  • MobileNetV3-Large는 MobileNetV2에 비해 ImageNet classification에서 3.2% 정확하면서도 20%의 latency가 개선됨
  • MobileNetV3-Small은 MobileNetV2에 비해 비슷한 latency로 6.6% 더 정확했음
  • MobileNetV3-Large는 MobileNetV2에 비해 MS COCO detection에서 25% 빠르면서도 비슷한 정확도를 보였음
  • MobileNetV3-Large LR-ASPP는 MobileNetV2 R-ASPP에 비해 Cityspace segmentation에서 34% 빠르면서도 비슷한 정확도를 보였음
views
  • 위의 figure 2는 MAdds에 따른 top-1 accuracy trade-off를 보여줌
    • 각 모델의 input은 224 resolution을 이용함
    • 각 점들은 0.35, 0.5, 0.75, 1, 1.25의 multiplier를 의미함
  • 제안하는 방법이 전반적으로 연산량도 적으면서 정확도가 높은 것을 확인 할 수 있음

1. Introduction

  • 효율적인 on-device 인공신경망은 mobile 적용 시대에 있어서 매우 흔함
    • 이러한 on-device 딥러닝은 사용자의 개인정보를 서버로 전송하지 않고도 사용자에 최적화된 구동을 위해 필수로 필요한 분야
    • On-device를 가능하게 하는 효율적인 구조들은 높은 정확도와 적은 latency와 함께 효율적인 구동으로 인해 mobile device의 battery life를 늘려줌
  • 본 논문에선 on-device computer vision을 강화하기 위해 더 정확하고 효율적인 MobiletNetV3 Large와 Small 모델들을 제안함
  • 논문에서 제안하는 네트워크는 SOTA 성능을 뛰어넘었으며 automated search와 새로운 아키텍처에 결합해 효과적으로 새로운 모델을 구축하는 방법을 설명
  • 논문의 목표는 accuracy-latency 최적화를 통해 mobile환경에서 최고의 mobile computer vision architecture를 제안하는 것
  • 이를 위해 다음의 것들을 설명
    1. Complementary search techniques
    2. Mobile setting에 효율적인 새로운 non-linearities practical version을 제안
    3. 새로운 효율적인 네트워크 디자인
    4. 새로운 효율적인 segmentation decoder
  • 위의 것들을 mobile phone에서 다양하고 광범위한 방법으로 효율성등을 실험적으로 검증함
  • 아래의 흐름을 따름
    • Section 2에선 related work에 대해서 다룸
    • Section 3에선 mobile model들의 efficient building block들에서 사용된 방법들을 리뷰
    • Section 4에선 NAS와 MnasNet, NetAdapt 알고리즘들의 상호적인 보완적 특성을 다룸
    • Section 5에선 joint search를 통해 찾아진 모델의 효율을 높히는 새로운 architecture design을 설명
    • Section 6에선 classification, detection, segmentation task를 이용해 모델의 효율과 각 적용요소들의 contribution에 대해 실험하고 결과를 설명
    • Section 7에선 결론 및 future work를 다룸
  • 최근 다방면에서 뉴럴넷의 최적의 정확도-효율 trade-off를 찾기위한 다양한 연구들이 수행됨
    • Hand-crafted 구조들과 NAS를 이용해 찾아진 구조들 모두 이 분야의 연구를 위해 주요하게 사용됨
  • SqueezeNet[22]은 squeeze와 expand 모듈과 1x1 컨벌루션을 광범위하게 사용해 파라미터 수를 줄이는것에 중점을 두고 연구되었음
    • 최근에는 파라미터 수를 줄이는 것 뿐만 아니라 실질적인 latency를 줄이기 위해 연산량(MAdds)을 줄이기 위한 연구가 수행됨
  • MobileNetV1[19]은 연산 효율 증가를 위해 depthwise separable convolution을 사용함
  • MobileNetV2[39]은 위의 방법을 이용하면서도 resource-efficient한 inverted residual block과 linear bottleneck을 제안함
  • ShuffleNet[49]은 group convolution과 channel shuffle 연산을 활용해 연산량을 줄임
  • CondenseNet[21]은 모델 학습단에서 group convolution을 학습시켜 feature 재사용을 위한 layer간 dense connection을 활용했음
  • ShiftNet[46]은 연산비용이 비싼 spatial convolution을 대체하기 위해 point-wise convolution을 중간에 끼워넣은 shift operation을 제안함

  • 강화학습을 이용한 NAS로 찾아진 효율적이면서도 competitive한 정확도를 갖는 architecture design들이 있음[53, 54, 3, 27, 35]
  • A fully configurable search space can grow exponentially large and intractable.
  • 따라서 초기 NAS 연구들은 cell level structure에 집중되었으며, 이로인해 같은 cell들이 모든 layer들에서 재사용되는 구조를 가졌음
  • 최근 [43]과 같은 연구에선 block-level의 계층적인 search space에 대해 연구하며 다른 layer structure를 다른 resolution block에서 사용 가능하게 했음
  • 네트워크 탐색 과정의 연산비용 감소를 위해서 [28, 5, 45]등에선 gradient based optimization이 적용된 differentiable architecture search framework가 사용되었음
  • 또한, 현존하는 네트워크를 강제로 mobile platform에 최적화 시키기 위해 [48, 15, 12]에서는 더 효율적인 automated network simplification algorithm들을 제안함

  • [23, 25, 47, 41, 51, 52, 37]에선 양자화(quantization)라는 또다른 complementary effort를 적용시켜 precision arithmetic을 줄여서 네트워크를 효율화시킴
  • 마지막으로 [4, 17]에서는 지식증류(knowledge distillation)를 이용해 추가적인 complementary method를 제안했으며, 크고 정확한 teacher network를 통해 작고 부정확한 student network의 효율이 향상됨

3. Efficient Mobile Building Blocks

  • Mobile model들은 엄청 효율적인 building block들을 이용해 만들어짐
  • MobileNetV1[19]은 depth-wise separable convolution을 이용해 일반적인 conv를 대체하는 방법을 제안함
  • Depthwise separable convolution은 효과적으로 일반 conv를 factorize했으며, 이는 feature 생성에서 spatial filtering을 분리시킨 결과
  • Depthwise separable conv는 두 개의 분리된 layer로 구성되며, spatial filtering을 위한 light weight depthwise convolution과 feature generation을 위한 heavier 1x1 pointwise conv로 구분됨

  • MobileNetV2[39]은 중요도가 떨어지는 정보의 영향력을 고려해 모델의 효율화를 시킬 수 있는 linear bottleneck과 inverted residual structure를 제안함
  • 이 구조는 아래 figure 3에서 확인 가능하며, 이는 depth-wise conv와 1x1 projection layer 뒤에 1x1 expansion convolution으로 구성됨
    • Input과 output은 채널 수가 같은 경우 residual connection으로 연결되게 되어있음
    • 이 구조는 비선형 채널 별 변환의 expressiveness를 높이기 위해 블록 안에서 더 높은 차원의 feature space로 확장시켰고, 이로인해 블록의 입력 및 출력에서 compact한 표현이 유지됨
views
  • MnasNet[43]은 MobileNetV2 구조를 기반으로 하는 구조이며, bottleneck 구조에 squeeze and excitation에 기반한 모듈을 제안함.
    • 여기서 squeeze and excitation module은 [20]의 ResNet 기반의 모듈에 다른 위치에서 integrated된 모듈임
  • 모듈은 figure 4에서 채널 확장 시의 depthwise filter 뒤에 위치하며, 이는 largest representation에 좀 더 attention을 주기 위함임
views
  • MobileNetV3에선 이러한 방법들의 조합을 building block으로 사용하며, 이는 더 효율적인 모델을 만들기 위함임
  • Layer들은 [36, 13, 16]의 swish nonlinearity를 사용하도록 upgrade됨
  • 각각 두 squeeze and excitation 또한 swish nonlinearity를 사용했으며, sigmoid는 비효율적인 연산을 대체하면서도 fixed point arthmetic의 정확도 보존을 위해 hard sigmoid[2, 11]을 적용함
    • 자세한 내용은 Section 5.2에서 다뤄짐
  • [53, 43, 5, 48]에선 network search가 새로운 architecture를 찾는 매우 강력한 tool이라는 것을 보여줌
  • MobileNetV3에선 각 network block을 최적화하여 global network structure를 찾았으며, platform-aware NAS를 사용함
  • 다음으로 NetAdapt 알고리즘을 이용해 layer의 최적의 filter 갯수를 찾음
  • 이러한 techniques들은 상호보완적(complementary)이며 주어진 하드웨어 플랫폼 상에서 효율적으로 최적의 조합을 찾기 위해 조합해 사용 가능함
  • [43]과 유사하게 global network structure를 찾기 위해 platform-aware neural architecture approach를 사용함
  • 동일한 RNN-based conwtroller와 같은 factorized hierarchical search space를 사용했기 때문에 [43]과 유사한 결과를 얻었으며, Large mobile model의 target latency는 80ms을 목표로 함
  • 따라서 논문에선 MnasNet-A1[43]을 initial Large mobile model로 재사용했으며, NetAdapt[48]과 다른 optimization 방법들을 적용시켜 최적화함

  • 하지만 처음에 얻어진 design은 small mobile model에 최적화 되어있지 않았음
  • 특히, 이 방법은 multi-objective reward $ACC(m)\times[LAT(m)/TAR]^w$를 Pareto-optimal solution을 근사화하기 위해 사용했음
    • $m$: 생성된 모델
    • $ACC(m)$: 모델의 정확도
    • $LAT(m)$: 모델 latency
    • $TAR$: Target latency
  • 하지만, 작은 모델들의 latency와 비교해 정확도가 더 극적으로 변하는것을 확인했음
    • 따라서 latency 변화에 따른 더 큰 정확도 변화를 보완하기 위해 작은 weight factor $w=-0.15$(vs the original $w=-0.07$[43])를 사용함
  • 논문의 강화된 새로운 weight factor $w$에 따라 from scratch로 새로운 initial seed model을 NAS를 이용해 찾았으며, 다음으로 NetAdapt와 other opimization 들을 적용시켜 최종적으로 MobileNetV3-Small 을 얻어낼 수 있었음
  • 저자들이 사용한 다음 기술은 NetAdapt[48].
  • 이는 platform-aware NAS에 complimentary(무료)
    • Coarse(조잡한) but global한 architecture를 infer(추론)하지 않고, 순차적으로 개별 레이어를 fine-tuning 할 수 있게 함
    • 자세한 내용은 논문 참조
  • 짧게 technique proceed는 아래와 같음
    1. Platform-aware NAS로 찾아진 seed network architecture로 시작
    2. 각 step에서
      • (a) New proposal set을 생성. 각 proposal은 이전 step과 비교해서 latency이 최소 $\delta$ 만큼 감소되는 architecture의 modification을 의미함
      • (b) 각 proposal에 이전 step에서 pre-trained model을 사용하며, 새로 제안 된 architecture를 채우고 누락된 weight를 적절히 자르고 random하게 initialize함. 각 proposal을 $T$ step동안 fine-tuning해서 대략적으로 accuracy를 얻음
      • (c) Some metric을 이용해 최적의 proposal을 선택
    3. 이전 step을 target latency가 얻어질때까지 반복
  • [48]에서는 accuracy change를 최소화하는것을 metric으로 사용함
  • 본 논문에선 이 알고리즘을 latency change와 accuracy change의 비율을 최소화하도록 바꿈
    • 이는 각 NetAdapt step에서 생성 된 모든 proposal에 대해 $\frac{\delta Acc}{|\delta latency|}$를 최대화 하는 proposal을 선택하도록 함
      • $\delta latency$은 위의 step 2 (a)의 제약사항들을 만족함
      • 저자들들은 직관적으로 제안된 proposal들이 discrete하다고 판단했으므로, trade-off curve의 기울기를 최대화하는 proposal을 선호했음
  • 이 과정은 latenct가 target에 도달할때까지 반복되었으며, 다음으로 새로운 모델을 from scratch로 재학습 시킴
  • 논문에선 MobileNetV2에서 사용한 [48]의 proposal generator를 사용함
  • 특히, 다음의 두 종류의 proposal을 따르도록 함
    1. 모든 expansion layer의 크기를 줄이도록 함
    2. Residual connection을 유지하기 위해 같은 bottleneck size를 갖는 모든 블록들의 모든 bottleneck을 줄임
  • 논문의 실험에선 $T=10000$로 했으며, proposal의 초기 fine-tuning의 정확도는 증가되었지만 from scratch로 학습시켰을 때는 최종 정확도는 변하지 않는것을 확인함
  • 논문에선 $\delta=0.01|L|$로 설정
    • $L$: seed model의 latency

5. Network Improvements

  • 네트워크 탐색에 있어서 최종 모델 향상을 위한 또다른 방법들을 소개함
  • 논문에선 네트워크 초기와 끝부분의 연산비용이 비싼 레이어들을 재디자인함
  • 또한 새로운 nonlinearity인 h-swish를 제안
    • h-swish는 swish nonlinearity의 modified version으로 연산하기 더 빠르고 양자화-친화적임(quantization-friendly)

5.1. Redesigning Expensive Layers

  • NAS로 모델 구조가 찾아진 후 몇개의 초기와 마지막 레이어들이 연산비용이 다른레이어보다 비싼것을 발견함
  • 따라서 accuracy는 유지하면서도 latency를 줄이기 위해 몇 modification들을 소개함
  • 이 modification들은 현재 search space의 외부적인것

  • 첫 번째 modification은 final feature를 더 효율적으로 만들어내도록 네트워크의 마지막 몇 개의 layer가 상호작용(interact) 하도록 재구성 함
  • MobielNetV2의 inverted bottleneck 기반의 현재 모델들과 variants들은 1x1 convolution을 final layer로 씀
    • 이는 higher-dimensional feature space로 채널을 확장시키기 위함임
    • 이 layer는 prediction을 위한 충분한(rich) feature를 갖도록 하는 중요한 역할을 함
  • 하지만 이는 extra latency라는 문제를 야기함

  • 이러한 latency를 줄이고 high-dimensional feature을 보존하기 위해서 해당 레이어를 average pooling 뒤쪽으로 보냄
  • 이로인해 그전에는 7x7 spatial resolution으로 연산하는것을 1x1 spatial resoultuion으로 연산하게 되어 연산량이 보존됨
  • 이 design choice는 feature 계산이 연산량 및 latency 측면에서 거의 관계가 없기 때문에 적용됨

  • Feature generation layer의 비용이 좀 줄어들었기에 이전의 bottleneck projection layer는 computation을 줄일 필요가 없어짐
  • 이로인해 이전 bottleneck layer의 projection과 filtering layer를 제거 할 수 있으며, 여기서 또 연산량을 줄일 수 있게 됨
  • 원래의 구조와 optimized last stage의 구조는 아래 figure 5에서 확인 가능
views
  • 효율적인 last stage로 인해 latency를 7ms를 줄일 수 있었으며, 이는 전체 running time의 11%임
    • 정확도의 손실 없이 거의 3천만개(30 millions)의 MAdds를 줄일 수 있었음
    • Section 6에서 자세한 결과를 다룸
  • 또다른 expensive layer는 초기 filter set
  • 현재 mobile model들은 edge detection을 위한 filter bank를 만들기 위해 3x3 conv와 32개 filter를 사용하는 경향이 있음
    • 종종 이러한 필터들은 서로 mirror 이미지일 수 있음
  • 따라서 저자들은 이러한 필터의 redundancy를 줄이기 위해 수를 줄이고 다른 non-linearity들을 적용시켜 봄
  • 이미 테스트 된 다른 non-linearity 뿐만 아니라 hard swish nonlinearity를 이 레이어들에 적용시킴
  • 이로인해 원래 ReLU나 swish와 32개 filter를 썼을 때와 동일한 정확도로 16개의 filter로 구현 할 수 있었음
    • 이 과정에서 latency 약 2 ms와 천만개(10 million)의 MAdds를 줄일 수 있었음

5.2. Nonlinearities

  • [36, 13, 16]에서는 swish라는 nonlinearity가 제안되었으며, 이는 ReLU의 drop-in replacement임
    • 이는 neural network의 정확도를 크게 개선 시켜 줄 수 있음
  • Swish는 아래와 같이 정의됨
    • swish $x = x\cdot \rho (x)$
  • Swish nonlinearity가 정확도를 향상시키는 반면 sigmoid처럼 모바일 환경에서 계산 할 때의 비용이 큼
    • ReLU의 계산비용은 0
  • 따라서 저자들은 이 문제를 두 가지 방법으로 타협함

Method 1

  • Sigmoid function을 piece-wise linear hard analog로 바꿈
    • [11, 44]와 유사한 $\frac{ReLU6(x+3)}{6}$로 대체
  • [11, 44]와 다른점이라면 custom clipping constant 대신 ReLU6를 사용함
  • 유사하게 hard version of swish는 아래와 같음
    • $h-swish[x] = x\frac{ReLU6(x+3)}{6}$
  • [2]에선 hard-swish와 유사한 버전이 최근에 제안됨
  • Figure 6에선 sigmoid와 swish의 soft와 hard version의 차이를 보여줌
views
  • 사용된 상수는 원래의 smooth version과 잘 맞도록 선택됨
  • 논문의 실험에서, 함수들의 hard-version을 사용했을 때 정확도의 차이는 없었지만 deployment 관점에서 몇 장점들이 있었음
    • 우선, 모든 software와 hardware framework에서 사실상 ReLU6의 iptimized implementation이 가능했음
    • 다음으로, 양자화 모드에서, hard-version은 approximate sigmoid의 또다른 implementation으로 인한 potential numerical precisioin loss를 제거함
    • 마지막으로, 실제 h-swish는 piece-wise(간단한) function으로 implementation 될 수 있으므로 latency cost를 크게 낮출 수 있는 memory access 횟수를 줄임

Method 2

  • Nonlinearity를 적용하는데 필요한 cost는 네트워크의 깊은 단으로 갈 수록 줄어들게 됨
    • 이는 각 layer activation memory가 일반적으로 resolution이 떨어질 때 마다 반으로 줄어들기 때문
  • 동일하게 deeper layer에서 swish를 사용할때만 benefit이 있는걸 확인함
  • 따라서 논문의 architecture에선 후반부에만 h-swish를 사용함
  • Table 1과 table 2에서 정확한 layout을 확인 가능
views views
  • 이러한 optimization에도 h-swish는 아직도 약간의 latency cost를 발생시킴
  • 하지만 section 6에서 설명하듯 accuracy와 latency에 대한 순 효과는 최적화 없이도 좋았지만, piece-wise function 기반의 optimized implementation을 사용 할 때 좀 더 좋은 결과를 보였음

5.3. Large squeeze-and-excite

  • [43]에서 squeeze-and-excite bottleneck의 크기는 convolutional bottleneck의 크기에 상대적이라고 했음
  • 대신에, 본 논문에선 이것들을 expansion layer의 channel의 1/4개로 fix시킴
    • 이렇게 하는게 정확도도 높아지면서 파라미터 수의 증가는 제한 할 수 있었고, 거의 구별 불가능할정도로 조금의 latency cost만 발생함

5.4. MobileNetV3 Definitions

  • MobileNetV3은 두 개의 모델로 정의됨
    • MobileNetV3-Large
    • MobileNetV3-Small
  • 이 모델들은 각각 resource를 많게/적게 사용할 때를 target함
  • 모델들은 platform-aware NAS와 NetAdapt를 적용해 만들어졌으며, 이 섹션(section 5)에서 정의 된 네트워크 improvements들을 통합해 만들어짐
  • 자세한 내용/구조는 위의 table 1과 2를 참고

6. Experiment

  • MobileNetV3의 성능 검증을 위한 다양한 실험을 수행
    • 실험은 classification, detection, segmentation으로 수행
  • 또한 다양한 ablation study들을 통해 다양한 design decision들의 영향을 밝힘

6.1. Classification

  • ImageNet[38] 데이터셋을 이용해 실험함
    • Accuracy, latency, multiply adds (MAdds) 측정

6.1.1 Training setup

  • 논문의 모델을 4x4 TPU Pod[24]에서 synchronous training setup을 이용해 학습시켰으며, standard tensorflow RMSPropOPtimizer with 0.9 momentum을 사용함
  • 초기 learning rate는 0.1, batch size는 4096 (128 images per chip), learning rate decay rate는 3epoch마다 0.01로 적용
  • 0.8의 dropout, 1e-5의 l2 weight decay과 Inception[42]과 동일한 image preprocessing을 적용
  • 마지막으로 decay 0.9999의 exponentail moving average를 사용함
  • 모든 convolutional layer들은 batch-normalization layer들을 사용하며 average decay는 0.99로 적용

6.1.2 Measurement setup

  • Latency를 측정하기 위해 standard Google Pixel phone을 사용했으며, 모든 네트워크는 standard TFLite Benchmark Tool을 이용해 동작함
  • 모든 측정 실험엔 single-threaded large core를 사용함
  • 실험에선 multi-core inference time을 측정하지 않았음
    • 이는 mobile application에서 일반적이지 않기 때문임
  • 논문에선 atomic h-swish operator를 tensorflow lite에 기여(contribute)했으며, 현재 최신의 tensorflow lite에 default로 적용되어있음
  • Figure 9에선 optimized h-swish의 impact를 보여줌
views

6.2. Results

views
  • 위의 figure 1에서 보여지듯 제안하는 모델이 MnasNet[43], ProxylessNas[5], MobileNetV2[39]과 같은 SOTA 모델들의 성능을 뛰어넘음
  • Table 3에선 서로다른 Pixel 폰에서 floating point 연산의 성능을 보여줌
views
  • 위의 table 3은 구글 pixel phone의 1, 2, 3세대에 따른 성능을 보여줌
  • 모든 latency는 ms단위이며, single large core with batch size 1의 성능을 보임
  • Top-1 ImageNet accuracy를 볼 수 있음
  • 제안하는 모델이 가장 빠르면서도 정확하게 동작하는것을 확인 할 수 있음
    • 표에서 모델 옆의 숫자는 MobileNets와 동일하게 width multiplier hyperparameter를 의미하는듯.
  • Table 4에선 quantization을 포함시킨 결과를 보여줌
views
  • 위의 table 4에서 모든 latency 단위는 ms를 의미함.
  • 위 table 3과 동일하게 각각 구글 픽셀 1, 2, 3에서 single large core 결과를 보여줌.
views
  • 위의 figure 7에서, MobileNetV3의 multiplier와 resolution에 따른 성능 trade-off를 볼 수 있음
  • 여기서 눈여겨 볼 점은 MobileNetV3-Small이 성능을 맞추기 위해 multiplier가 적용된 MobileNetV3-Large의 성능을 3%가량 앞섰다는 점임
  • 반면 resolution은 multiplier보다 더 나은 trade-off를 보여줌
  • 하지만, resolution은 대게 task에 의해 결정되므로(예를 들어 segmentation과 detection 문제에선 일반적으로 higher resolution을 필요함) 항상 튜닝 가능한(tunable) 파라미터로 볼 수 없음

6.2.1 Ablation study

Impact of non-linearities

views
  • Table 5에서는 h-swish의 삽입 위치와 naive(vanilla) implementation에 대한 optimized implementation 결과를 보여줌
    • Table 5는 MobileNetV3-Large의 nonlinearity에 대한 영향을 보여줌
    • h-wish@N에서 N은 h-swish가 적용된 첫 번째 레이어의 채널의 수를 의미함
    • 세 번째 column은 optimized h-swish가 없을 때의 runtime을 보여줌
    • ImageNet Top-1 accuracy와 이 때의 latency를 ms단위로 나타냄
  • 실험 결과를 볼 때, 최적화 적용된 h-swish가 6ms정도(연산시간의 10%이상)를 줄여주는것을 확인 할 수 있음
views
  • Figure 8에선 nonlinearity choice와 network width에 의한 효율적인 frontier를 보여줌
    • Figure 8은 최적화 및 최적화 되지 않은 h-swish와 h-swish vs ReLU의 latency를 보여줌
    • Curve는 depth multiplier에 따른 frontier를 보여줌
    • 80개 이상의 채널을 갖는 V3의 모든 레이어에 최적화된 h-swish나 그냥 h-swish를 적용하면 모두 best trade-off를 provide함
    • 표는 Top-1 ImageNet accuracy와 latency를 ms단위로 보여줌
  • MobileNetV3은 네트워크 중간부터 h-swish를 사용하며, ReLU의 성능을 확실하게 뛰어넘음
  • 단순히 전체 네트워크에 h-swish를 추가하는것만으로도 네트워크를 넓게 하는것보다 성능이 약간 더 좋다는것이 흥미로운 점임

Impact of other components

views
  • Figure 9에선 다른 component들의 적용이 latency와 accuracy의 곡선을 따라 어떻게 변화했는지를 보여줌
    • Figure 9의 그래프는 처음에서 위-왼쪽으로 움직임

6.3. Detection

  • 논문의 MobileNetV3을 SSDLitye[39]의 backbone으로 사용했으며, 다른 네트워크들과 MS COCO에서 성능을 비교함
  • MobileNetV2에 따라서 SSDLite의 feature extractor의 뒷부분에 첫 번째 layer(output stride 16)와 두 번째 layer(output stride 32)을 추가하고 이를 각각 C4와 C5로 정의함
  • MobileNetV3-Large에 대해 C4는 14번째 bottleneck block의 expansion layer로 작용함
  • MobileNetV3-Small에 대해 C4는 9번째 bottleneck block의 expansion layer로 작용함
  • 두 네트워크에 C5 layer는 pooling 바로 앞에 붙음
  • 또한 C4와 C5 사이의 모든 feature layer의 채널 수를 2씩 줄임
  • 이는 MobileNetV3의 뒷쪽의 몇 레이어들이 1000개 class를 추론하도록 tune되어있기 때문이며, 이는 COCO의 90개 class 추론을 위한 task에 redundancy로 작용하기 때문임
views
  • Table 6는 MS COCO 실험결과를 보여줌
  • Channel reduction이 적용되었을 때 MobileNetV3-Large는 MobileNetV2보다 27% 빠르면서도 동일한 mAP 점수를 가졌음
  • MobileNetV3-Small with channel reduction 모델은 MobileNetV2와 MnasNet보다 각각 2.4와 0.5mAP가 높으면서도 35% 빠르게 동작했음
  • 두 MobileNetV3 모델 모두 channel reduction trick을 적용시켜 15%의 redundancy를 줄이면서도 mAP의 loss는 없었음
    • ImageNet classification과 COCO object detection 모두 다른 feature extractor 모양을 가지면서도

6.4. Semantic Segmentation

  • In this subsection, we employ MobileNetV2 [39] and the proposed MobileNetV3 as network backbones for the task of mobile semantic segmentation.
  • Additionally, we compare two segmentation heads. The first one, referred to as R-ASPP, was proposed in [39]. R-ASPP is a reduced design of the Atrous Spatial Pyramid Pooling module [7, 8, 9], which adopts only two branches consisting of a 1 × 1 convolution and a global-average pooling operation [29, 50].
  • In this work, we propose another light-weight segmentation head, referred to as Lite R-ASPP (or LR-ASPP), as shown in Fig. 10.
views
  • Lite R-ASPP, improving over R-ASPP, deploys the global-average pooling in a fashion similar to the Squeeze-and-Excitation module [20], in which we employ a large pooling kernel with a large stride (to save some computation) and only one 1×1 convolution in the module.
  • We apply atrous convolution [18, 40, 33, 6] to the last block of MobileNetV3 to extract denser features, and further add a skip connection [30] from low-level features to capture more detailed information.

  • We conduct the experiments on the Cityscapes dataset[10] with metric mIOU [14], and only exploit the ‘fine’ annotations. We employ the same training protocol as [8, 39].
  • All our models are trained from scratch without pretraining on ImageNet [38], and are evaluated with a single-scale input.
  • Similar to object detection, we observe that we could reduce the channels in the last block of network backbone by a factor of 2 without degrading the performance significantly.
  • We think it is because the backbone is designed for 1000 classes ImageNet image classification [38] while there are only 19 classes on Cityscapes, implying there is some channel redundancy in the backbone.
views
  • We report our Cityscapes validation set results in Tab. 7.
  • As shown in the table, we observe that (1) reducing the channels in the last block of network backbone by a factor of 2 significantly improves the speed while maintaining similar performances (row 1 vs. row 2, and row 5 vs. row 6), (2) the proposed segmentation head LR-ASPP is slightly faster than R-ASPP [39] while performance is improved (row 2 vs. row 3, and row 6 vs. row 7), (3) reducing the filters in the segmentation head from 256 to 128 improves the speed at the cost of slightly worse performance (row 3 vs. row 4, and row 7 vs. row 8), (4) when employing the same setting, MobileNetV3 model variants attain similar performance while being slightly faster than MobileNetV2 counterparts (row 1 vs. row 5, row 2 vs. row 6, row 3 vs. row 7, and row 4 vs. row 8), (5) MobileNetV3-Small attains similar performance as MobileNetV2-0.5 while being faster, and (6) MobileNetV3-Small is significantly better than MobileNetV2-0.35 while yielding similar speed.
views
  • Tab. 8 shows our Cityscapes test set results.
  • Our segmentation models with MobileNetV3 as network backbone outperforms ESPNetv2 [32], CCC2 [34], and ESPNetv1 [32] by 6.4%, 10.6%, 12.3%, respectively while being faster in terms of MAdds. The performance drops slightly by 0.6% when not employing the atrous convolution to extract dense feature maps in the last block of MobileNetV3, but the speed is improved to 1.98B (for half-resolution inputs), which is 1.36, 1.59, and 2.27 times faster than ESPNetv2, CCC2, and ESPNetv1, respectively. Furthermore, our models with MobileNetV3-Small as network backbone still outperforms all of them by at least a healthy margin of 2.1%.

A. Performance table for different resolutions and multipliers

views
  • We give detailed table containing multiply-adds, accuracy, parameter count and latency in Table 9.

7. Conclusion and Future Work

  • 본 논문에선 MobileNetV3 Large와 Small 모델을 제안했으며, mobile classification, detection, segmentation에서 SOTA였음
  • 논문에선 차세대 모바일용 모델을 제안하기 위해 네트워크 설계 뿐만 아니라 여러 NAS 알고리즘들을 활용함
  • Swish와 같은 nonlinearity를 어떻게 최적화하는지 보였으며, quantization friendly(효과적인)한 squeeze and excite를 적용하고 효율성 측면에서 mobile model domain에 적용시킴
  • 또한 lightweight segmentation decoder인 LR-ASPP를 제안함
  • NAS을 인간의 직관과 가장 잘 혼합하는 방법에 대한 open question이 남아있지만, 저자들은 이러한 question에 대한 첫 번째 긍정적인 결과를 제시함

Summary

  • NAS를 이용하여 MNasNet와 MobileNetV2 layer 기반의 MobileNetV3를 제안했음
  • Swish nonlinearity를 fixed point 연산에 최적화시킨 hard-swish (h-swish) activation function을 제안
  • 기존 방법들 대비 우수한 성능을 보였으며, classification, object detection, semantic sgementation에 적용 시 좋은 성능을 보였음
  • Efficient segmtentation을 위한 decoder 구조인 Lite Reduced Atrous Spatial Pyramid Pooling (LR-ASPP)를 제안

  • 구글이기에, 이렇게 NAS 실험을 해서 얻을 수 있는.. 효율적인 backbone 구조를 제안하는 논문…