Product Serving

강의의 목표

  • AI 엔지니어가 되기 위한 기본 소양을 갖추기
  • 문제 정의에 대해 고민을 하는 사람

1. MLOps 개론

모델 개발 프로세스 - Research

  • 문제정의 - EDA - Feature Engineering - Train - Predict

모델 개발 프로세스 - Production

  • 문제정의 - EDA - Feature Engineering - Train - Predict - Deploy

✨MLOps의 목표는 빠른 시간 내에 가장 적은 위험을 부담하며 아이디어 단계부터 Production 단계까지 ML 프로젝트를 진행할 수 있도록 기술적 마찰을 줄이는 것✨

  1. MLOps가 필요한 이유 이해하기

    • Production을 하기 위한 과정임으로 중요함
  2. MLOps의 각 Componenet에 대해 이해하기

    • Server infra = 어떻게 server를 이용할 지에 대한 고민
    • GPU infra = 가동하려는 모델과 회사 운영자원 및 개발환경에 맞게끔 설정
    • Serving = 실질적으로 소비자에게 어떤 방식으로 전해질지
    • Experiment, Model Management = Model test 및 성능 개선을 위한 파라미터 튜닝, 다양한 모델 테스트
    • Feature Store = 필요한 모델 템플릿 만들기
    • Data Validation = 데이터 검증(기존 데이터, Train 데이터와의 차이 확인)
    • Continuous Training = 지속적인 성능 개선
    • Monitoring = 모아지는 데이터를 분석하고 여기서 결과를 얻어 이를 활용해 개선방향 도모
    • AutoML = 자동으로 성능 튜닝
  1. MLOps 관련된 자료, 논문 읽어보며 강의 내용 외에 어떤 부분이 있는지 파악해보기

  2. MLOps Component 중 내가 매력적으로 생각하는 TOP3을 정해보고 왜 그렇게 생각했는지 작성해보기

    • Server infra 와 GPU infra가 가장 중요하다고 여기고 그 이유는 아무래도 직접적인 회사 운영에 가장 큰 영향이 드는 금전적인 부분을 담당하고 있기 때문에 이 두개의 Component에서 비용을 절감한다면 그 잔여비용으로 다른 Component 개선에 큰 영향을 줄 수 있을 것이라고 생각함. 또 마지막으로 Monitoring을 통해 앞으로 나아갈 방향성과 개선점에 대해서 얻을 수 있어서 중요하다고 생각함.

모델 경량화

1.1 경량화를 왜 해야 하나요?

On device AI

  • 제한된 리소스내에서 AI를 활용하기 위해서는 경량화가 필수!

AI on cloud(or server)

  • 배터리, 저장 공간, 연산능력의 제약은 줄어드나, latency와 throughtput의 제약이 존재
  • 같은 자원(=돈)으로 더 적은 latency와 더 큰 throughput이 가능하다면?

Computation as a key component of AI progress

경량화는 ?

  • 모델의 연구와는 별개로, 산업에 적용되기 위해서 거쳐야하는 과정
  • 요구조건(하드웨어 종류, latency 제한, 요구 throughput, 성능)들 간의 trade-off를 고려하여 모델 경량화/최적화를 수행

1.2 경량화 분야 소개

1. Efficient architecture

  • 매년 쏟아져 나오는 블록 모듈들
  • 각 모듈 블록마다의 특성이 다름! (성능, 파라미터 수, 연산횟수 등..)

Efficient architecture design; AutoML, Neural Architecture Search

  • Software 1.0 : 사람이 짜는 모듈
  • Software 2.0 : 알고리즘이 찾는 모듈

2. Network Pruning; 찾은 모델 줄이기

  • 중요도가 낮은 파라미터를 제거하는 것
  • 좋은 중요도를 정의, 찾는 것이 주요 연구 토픽 중 하나 (e.g. L2 norm이 크면, loss gradient 크면, 등등..)
  • 크게 structured/unstructured pruning으로 나뉘어짐

Network Pruning; Structured pruning

  • 파라미터를 그룹 단위로 pruning하는 기법들을 총칭(그룹; channel / filter,layer 등)
  • Dense computation에 최적화된 소프트웨어 또는 하드웨어에 적합한 기법

  • channel scaling factor = 중요도

Network Pruning; Structured pruning

  • 파라미터 각각을 독립적으로 pruning하는 기법
  • Pruning을 수행할 수록 네트워크 내부의 행렬이 점차 희소(sparse)해짐
  • Structured Pruning과 달리 sparse computation에 최적화된 소프트웨어 또는 하드웨어에 적합한 기법

3. Knowledge distillation

  • 학습된 큰 네트워크를 작은 네트워크의 학습 보조로 사용하는 방법
  • Soft target(soft outputs)에는 ground truth 보다 더 많은 정보를 담고 있음
    (e.g 특정 상황에서 레이블 간의 유사도 등등)

  • 1) Student network와 ground truth label의 cross-entropy
  • 2) teacher network와 student network의 inference 결과에 대한 KLD loss로 구성

  • T는 Large teacher network의 출력을 smoothing(soften)하는 역할을 한다.
  • a는 두 loss의 균형을 조절하는 파라미터다.

4. Matrix/Tensor decomposition

  • 하나의 Tensor를 작은 Tensor들의 operation들의 조합(합, 곱)으로 표현하는 것
  • Cp decomposition : rank 1 vector들의 outer product의 합으로 tensor를 approximation

Network Quantization

  • 일반적인 float32 데이터타입의 Network의 연산과정을 그보다 작은 크기의 데이터타입
    (e.g float16, int8, ...)으로 변환하여 연산을 수행

  • 사이즈 : 감소
  • 성능(Acc) : 일반적으로 약간 하락
  • 속도 : Hardware 지원 여부 및 사용 라이브러리에 따라 다름(향상 추세)
  • Int8 quantization 예시(CPU inference, 속도는 pixel2 스마트폰에서 측정됨)

6. Network Compiling

  • 학습이 완료된 Network를 deploy하려는 target hardware에서 inference가 가능하도록 compile하는 것(+ 최적화가 동반)
  • 사실상 속도에 가장 큰 영향을 미치는 기법
  • e.g TensorRT(NVIDIA), Tflite(Tensorflow), TVM(apache), ...
  • 각 compile library마다 성능차이가 발생

  • Compile 과정에서, layer fusion(graph optimization) 등의 최적화가 수행됨
  • 예를들어 tf의 경우 200개의 rule이 정의되어 있음

  • Framework와 hardware backends 사이의 수많은 조합
  • HW마다 지원되는 core, unit 수, instruction set, 가속 라이브러리 등이 다름
  • Layer fusion의 조합에 따라 성능차이가 발생 (동일 회사의 hw 임에도 불구하고!)

  • AutoML로 graph의 좋은 fusion을 찾아내자!
  • e.g. AutoTVM(Apache)

데이터 제작의 중요성 2

1. Life Cycle of an AI Project

AI Research vs AI Production

보통 수업/학교/연구에서는 정해진 데이터셋/평가 방식에서 더 좋은 모델을 찾는 일을 함.

하지만 서비스 개발 시에는 데이터 셋은 준비되어 있지 않고 요구사항만 존재함!

그래서 서비스에 적용되는 AI 개발 업무의 상당 부분이 데이터셋을 준비하는 작업임🙄!


Production Process of AI Model

서비스향 AI 모델 개발 과정은 크게 4가지로 구성되어 있음!

이 과정의 목표는 요구사항을 충족시키는 모델을 지속적으로 확보하는 것이고 방법으로는 두가지가 있음!

모델 성능 달성에 있어서 데이터와 모델에 대한 비중은 어떨까!?

그렇다면 사용 중인 모델의 성능 개선 시에는 데이터와 모델에 대한 비중은 어떻게 바뀔까!?

  1. 서비스 출시 후에는 정확도에 대한 성능 개선 요구가 제일 많음
  2. 이 때 정확도 개선을 위해 모델 구조를 변경하는 것은 처리속도, qps, 메모리 크기 등에 대한 요구사항에 검증도 다시 해야 하므로 비용이 큼

2. Data! Data! Data!

2.1 Data-related tasks

예상보다 데이터와 관련된 업무가 왜 이렇게 많을까!?

  1. 어떻게 하면 좋을지에 대해서 알려지 있지 않다!

    • 학계에 나오는 논문의 대부분은 모델(구조/학습방법)에 관련된 논문
    • 학계에서 데이터를 다루기 힘든 이유 -> 좋은 데이터 모으기 힘듬, 라벨링 비용이 큼, 작업 기간이 김.
  2. 데이터 라벨링 작업은 생각보다 많이 많이 어렵다!

    • 데이터가 많다고 모델 성능이 항상 올라가는 것은 아님😮
    • 라벨링 결과에 대한 노이즈 = 라벨링 작업에 대해 일관되지 않음의 정도
    • 잘못 작업된 라벨링 결과를 학습 시 무시하게 하려면 적어도 깨끗이 라벨링된 결과가 2배 이상 필요
      • 라벨링 노이즈를 상쇄할 정도로 깨끗한 라벨링 데이터가 골고루 일정하게 많아야 한다!
  1. 데이터 불균형을 바로 잡기가 많이 어렵다!

이 작업을 효율화 하기 위한 방법

  • 해당 task에 대 한 경험치가 잘 쌓여야 하므로 결국 도메인 지식이 많을 수록 예외 경우에 대해서 미리 인지를 할 수 있어야함!

데이터 제작의 중요성

데이터 제작의 중요성

한 AI 모델의 성능은 구조 + 데이터 + 최적화 조합으로 정해짐!!

Software 1.0

Software 1.0은 다음의 개발 과정을 따름

  1. 문제 정의
  2. 큰 문제를 작은 문제들의 집합으로 분해
  3. 개별 문제 별로 알고리즘 설계
  4. 솔루션들을 합쳐 하나의 시스템으로

예시

이미지 인식 기술에도 처음에는 Software 1.0 철학으로 개발됨!

하지만 객체 검출에서 대응하기 어려운 케이스가 정말 많았음..😥

이에 대한 해결책으로 결국 Software 2.0이 등장!!

사람의 개입이 없이 어떻게 특정 연산들이 정의될까..?

Software 2.0은 뉴럴넷의 구조에 의해 검색 영역이 정해지고 최적화를 통해 사람이 정한 목적에 제일 부합하는 연산의 집합을 찾음.

이때 경로와 목적지는 데이터와 최적화 방법에 의해 정해짐.


요약

  • Software 1.0은 사람이 고민하여 프로그램을 만든 것!
  • Software 2.0은 AI 모델의 구조로 프로그램의 검색 범위를 한정하고, 데이터와 최적화 방법을 통해 최적의 프로그램을 찾는 것!

HRNet

HRNet의 필요성

Image Classification Networks

LeNet 뿐만 아니라 AlexNet,VGGNet,ResNet,Efficientnet 들도 고해상도 입력을 받아

저해상도로 줄여나가는 설계 방식을 사용함

Image Classification 모델이 해상도를 점점 줄여나가는 이유는?

  • 특정 물체를 분류하는데 이미지 내 모든 특징이 필요하지 않음
  • 해상도가 줄어들어 효율적인 연산이 가능하며, 각 픽셀이 넓은 receptive field를 갖게 됨
  • 중요한 특징만을 추출하여 과적합을 방지

DeconvNet, SegNet, U-Net

저해상도 특징을 생성하고, 다시 고해상도로 복원하는 방식의 기존 연구

DeepLab

DilatedNet, DeepLab

  • DilatedNet 및 DeepLab 구조는 해상도의 이점을 살리고자 dilated convolution을 적용
  • U-Net 등의 구조와 달리 저해상도가 아닌 중해상도 정보를 고해상도로 복원

DeepLab V3+

  • 자세한 정보를 유지하기 위해 Xception 구조 내 max pooling 연산을 depthwise separable convolution으로 변경

low level feature를 전달해주는 skip connection 활용

Classification nased Networks

  • 기존 classfication Network 사용에 필요했던 높은 시간 복잡도와 Upsampling을 이용해 저해상도부터 고해상도로 복원하며 생성되는 특징은 공간상의 위치 정보의 민감도(position-sensitivity)가 낮음

위 문제점들을 해결하기 위해 강력한 위치 정보를 갖는 visual recognition 문제에 적합한 구조가 필요하다..!!

저해상도/ 중해상도를 고해상도로 복원하는 것이 아닌, 고해상도 정보를 계속 유지하고자 하는 것이 핵심이였고 이를 토대로 연구한 것이 HRNet(High Resolution Network)

HRNet(High Resolution Network)

주로 image classification 문제에 사용되는 backbone network이 아닌, 위치정보가 중요한 visual recognition 문제 (segmentation, object detection, pose estimation 등)에 사용할 수 있는 새로운 backbone network

  1. 전체 과정에서도 고해상도 특징을 계속 유지
    • 입력 이미지의 해상도를 그대로 유지하는 것이 아닌, strided convolution을 이용해 해상도를 1/4로 줄임. (U-Net이나 DeepLab v3+에 비해 상대적으로 높은 해상도를 유지함.)

  1. 고해상도부터 저해상도까지 다양한 해상도를 갖는 특징을 병렬적으로 연산

Paralled Multi-Resolution Convolution Stream

  • 고해상도 convolution stream을 시작으로 점차 해상도를 줄여 저해상도 stream을 새롭게 생성
  • 새로운 stream이 생성될 때 해상도는 이전 단계 해상도의 1/2로 감소
    • 해상도를 줄여 넓은 receptive field를 갖는 특징을 고해상도 특징과 함께 학습함
  1. 각각의 해상도가 갖는 정보를 다른 해상도 stream에 전달하여 정보를 융합
  • 고해상도 특징: 공간 상의 높은 위치 정보 민감도(position-sensitivity)를 가짐
  • 저해상도 특징: 넓은 receptive field로 인해 상대적으로 풍부한 의미 정보(semantic informantion)를 가짐

pooling 대신 strided convolution을 사용한 이유는 정보 손실을 최소화 하기 위함이고, convoltion 대신 Upsampling을 사용한 이유는 시간 복잡성을 고려했기 때문

Representation Head

Semantic Segmentation의 기초와 이해

1. 대표적인 딥러닝을 이용한 Segmantation FCN

  1. VGG 네트워크 백본을 사용(Backbone : feature extractiong network)
  2. VGG 네트워크의 FC Layer (nn.Linear)를 Convolution으로 대체
  3. Transposed Convolution을 이용해서 Pixel Wise prediction을 수행

1.1 Fully Connected Layer vs Convolution Layer

FC Layer를 Conv Layer로 변환했을 때의 이점

1.2 Transposed Convolution

1.4 FCN에서 성능을 향상시키기 위한 방법

  • FCN에서 성능을 향상 시키기 위한 방법
FCN(backbone:VGG)의 구조
conv1 : [conv→relu→conv→relu→maxpool] 이미지 크기 input의 1/2로 감소
conv2 : [conv→relu→conv→relu→maxpool] 이미지 크기 input의 1/4로 감소
conv3 : [conv→relu→conv→relu→conv→relu→maxpool] 이미지 크기 input의 1/8로 감소
conv4 : [conv→relu→conv→relu→conv→relu→maxpool] 이미지 크기 input의 1/16로 감소
conv5 : [conv→relu→conv→relu→conv→relu→maxpool] 이미지 크기 input의 1/32로 감소
FC6 : [conv(1×1)→relu→dropout]
FC7 : [conv(1×1)→relu→dropout]
score : [conv(input_channel, num_classes,1,1,0)]
upscore : [convTransposed2d(num_classes, num_classes, karnel_size=64, stride=32, padding=16)] 
                    1/32가 된 이미지를 32배 키워 원본 사이즈로 복원

Issue! 1/32크기로 줄어든걸 바로 32배 키워서 복원하려니 디테일한 정보들이 사라진 것을 확인

  • solution skip connection
  1. MaxPooling에 의해 잃어버린 정보 복원해주는 작업 진행
  2. Upsampled Size를 줄여줘 더 효율적인 이미지 복원 가능

conv4 block에서 pooling하고 난 결과가 score와 같은 구조인 1×1conv거친 뒤(하지만 새롭게 선언 된 conv)의 결과와 deconv(2배 키워주는 deconv)결과를 summation해준 뒤 다시 deconv(16배 키워주는 deconv)를 통해 FCN16s 생성

1.5 평가지표

2.1 Futher Reading

1x1 을 7x7 Convolution으로 바꿀 때 발생하는 문제

  • FC6을 1×1이 아닌 7×7conv사용하게 될 경우 이미지의 크기가 변동되는 문제 발생

    Conv5의 이미지 크기가 7×7이기 때문에 7×7conv을 적용시 1×1이 나오게 됨

    이를 해결하기 위해 논문의 저자들은

  1. conv1 block의 첫번째 conv에서 zero padding을 100 넣어줌

    → 하지만 Output size가 256×256으로 input 224×224와 달라짐

  2. 1을 해결하기 위해 Deconv의 padding을 제거 하고 중앙의 224×224만 crop하는 작업

    FCN 16s, 8s에서도 crop하는 방법 사용

Advanced Object Detection 1

1. Cascade RCNN

1.1 Contribution

1.2. motivation

  • IoU threshold에 따라 다르게 학습되었을 때 결과가 다름
  • Input IoU가 높을수록 높은 IoU threshold에서 학습된 model이 더 좋은 결과를 냄

  • IoU threshold에 따라 다르게 학습되었을 때 결과가 다름

  • 전반적인 AP의 경우 IoU threshold 0.5로 학습된 model이 성능이 가장 좋음

  • 그러나 AP의 IoU threshold가 높아질수록(ex. AP70, AP90) IoU threshold가 0.6, 0.7로 학습된 model의 성능이 좋음

  • 학습되는 IoU에 따라 대응 가능한 IoU 박스가 다름

  • 그래프와 같이 high quality detection을 수행하기 위해선 IoU threshold를 높여 학습할 필요가 있음

  • 단, 성능이 하락하는 문제가 존재

  • 이를 해결하기 위해 Cascade RCNN을 제안

1.3 Method

RPN으로부터 B0을 얻고 projection을 하여 head를 통해 B1을 얻는다.

그 이후 B1을 projection을 하여 B2를 얻는 방식이 반복된다.

1.4 Result

  • Box pooling을 반복 수행할 시 성능 향상되는 것을 증명(iterative)
  • IOU threshold가 다른 Classifier가 반복될 때 성능 향상 증명(Integral)
  • IOU threshold가 다른 RoI head를 cascade로 쌓을 시 성능 향상 증명(Cascade)

2. Deformable Convolutional Networks(DCN)

2.1 Contribution

CNN 문제점

  • 일정한 패턴을 지닌 convolution neural networks는 geometric transformations에 한계를 지님

기존 해결 방법

  • Geometric augmentation
  • Geometric invariant feature engineering

제안하는 Module

  • Deformable convolution

Conv의 각각의 filter의 영역에 offset을 추가하여 계산하는 것.

2.2 Results

3. Transformer

3. Overview

Transformer

  • NLP에서 long range decpendency를 해결. 이를 vision에도 적용.
  • Vision Transformer(ViT)
  • End-to-End Object Detection with Transformers(DETR)
  • Swin Transformer

Self Attention

Overview

Flatten 3D to 2D (Patch 단위로 나누기)

Learnable한 embedding 처리

Add class embedding, position embedding

  • 앞서 만들어진 embedding 값에 class embedding 추가([CLS]Token)
  • 이미지의 위치 따라 학습하기 위해 position embedding 추가

Transformer

  • Embedding : Transformer 입력값

Predict

  • Class embedding vector 값을 MLP head에 입력시켜 최종 결과를 추출

ViT의 문제점

  • ViT의 실험부분을 보면 굉장히 많은 양의 Data를 학습하여야 성능이 나옴
  • Transformer 특성상 computational cost 큼
  • 일반적으로 backbone으로 사용하기 어려움

3.2 End-to-End Object Detection with Transformer (DETR)

Contribution

  • Transformer를 처음으로 Object Detection에 적용
  • 기존의 Object Detection의 hand-crafted post process 단계를 transformer를 이용해 없앰

Architecture

  • 224 x 224 input image
  • 7 x 7 feature map size
  • 49개 의 feature vector를 encoder 입력값으로 사용

Train

  • 이 때 groundtruth에서 부족한 object 개수만큼 no object를 padding 처리
  • 따라서 groundtruth와 prediction이 N:N 맵핑
  • 각 예측 값이 N개 unique하게 나타나 post-precess 과정이 필요 없음

3.3 Swin Transformer

ViT의 문제점

  • ViT의 실험부분을 보면 굉장히 많은 양의 Data를 학습하여야 성능이 나옴
  • Transformer 특성상 computational cost 큼
  • 일반적으로 backbone으로 사용하기 어려움

해결법

  • CNN과 유사한 구조로 설계
  • Window 라는 개념을 활용하여 cost를 줄임

Arichtecture

Patch Partitioning

Linear Embedding

Swin Transformer Block

ViT에선 Multi-Head Attention을 활용하지만 Swin Transformer 에선 W-MSA(Window Multi-head Self Attention)과 SW-MSA(Shifted Window Multi-head Self Attention)을 활용한다.

Window Multi-Head Attention

Shifted Window Multi-Head Attention

1. Efficient in Object Detection

1.1 Model scaling

Model Scaling

Width Scaling

Depth Scaling

1.2 등장 배경

  • 더 높은 정확도와 효율성을 가지면서 ConvNet의 크기를 키우는 방법(scale up)은 없을까?

    "EfficientNet팀의 연구는 네트워크의 폭(width), 깊이(depth), 해상도(resolution) 모든 차원에서의 균형을 맞추는 것이 중요하다는 것을 보여주었다. 그리고 이러한 균형은 각각의 크기를 일정한 비율로 확장하는 것으로 달성할 수 있었다."

1.3 무엇을 ? - Accuracy & Efficiency

2. EfficientNet

2.1 등장 배경

  • 파라미터 수가 점점 많아지고 있는 모델들

  • ConvNet은 점점 더 커짐에 따라 정확해지고 있음

  • 점점 빠르고 작은 모델에 대한 요구 증가

  • 효율성과 정확도의 trade-off를 통해 모델 사이즈를 줄이는 것이 일반적

  • 하지만 큰 모델에 대해서는 어떻게 모델을 압축시킬지가 불분명함

  • 따라서 이 논문은 아주 큰 SOTA ConvNet의 efficiency를 확보하는 것을 목표로 함

  • 그리고 모델 스케일링을 통해 이 목표를 달성함

2.2 Scale Up

Baseline

Width Scaling

Depth Scaling

Resolution Scaling

Scale up

2.3 Accuracy & Efficiency

Better Accuracy & Efficiency

Better Accuracy & Efficiency - Notation

Observation 1

  • 네트워크의 폭, 깊이, 혹은 해상도를 키우면 정확도가 향상된다.
  • 하지만 더 큰 모델에 대해서는 정확도 향상 정도가 감소한다.

Observation 2

  • 더나은 정확도와 효율성을 위해서는, ConvNet 스케일링 과정에서
  • 네트워크의 폭, 깊이, 해상도의 균형을 잘 맞추는 것이 중요하다.

Compound Scaling Method

2.4 EfficientNet

EfficientNet-B0

  • MnasNet에 영감을 받음
  • ACC(m) * (FLOPS(m)/T)^W 를 최적화 목표
  • Accuracy와 FLOPs를 모두 고려한 Neural Network을 개발함
  • Nas 결과, EfficientNet-B0

Step 1

Step 2

3. EfficientDet

3.1 등장 배경

Detection

Object Detection은 특히나 속도가 중요하다!

  • 모델이 실생활에 사용되기 위해서는 모델의 사이즈와 대기 시간에 제약이 있기 때문에, 모델의 사이즈와 연산량을 고려해 활용 여부가 결정됨.

  • 이러한 제약으로 인해 Object Detection 에서 Efficiency가 중요해지게 됨.

그 동안 있었던 많은 시도들..

  • 1 stage model

    • YOLO, SSD, RetinaNet ...
  • Anchor free model

    • CornerNet ...
  • 하지만 Accuracy 가 낮음.

Motivation

  • 자원의 제약이 있는 상태에서 더 높은 정확도와 효율성을 가진 detection 구조를 만드는 것이 가능할까?

3.2 Challenge

1) Efficient multi-scale feature fusion

  • Hint - Neck

  • In Neck, Simple Summation

기존의 FPN을 기반으로한 feature pyramid Network에서는 High level + low level feature map을 할 때 그냥 channel 과 resolution을 맞춰 단순 합을 했다는 점이다.

2) Model Scaling

  • Previous work focus on large backbone & image size

Efficient multi-scale feature fusion

  • EfficientDet 이전에는 multi-scale feature fusion을 위해 FPN, PANet, NAS-FPN 등 Neck 사용

  • 하지만 대부분의 기존 연구는 resolution 구분 없이 feature map을 단순 합

  • 서로 다른 정보를 갖고 있는 feature map을 단순합 하는게 맞을까?

  • 따라서 이 문제를 다루기 위해 EfficientDet 팀은 각각의 input을 위한 학습 가능한 웨이트를 두는 Weighted Feature Fusion 방법으로 BiFPN(bi-directional feature pyramid network)를 제안.

  • 모델의 Efficiency 를 향상시키기 위해 다음과 같은 cross-scale connections 방법을 이용
    • 하나의 간선을 가진 노드는 제거
    • output 노드에 input 노드 간선 추가
    • 양방향 path 각각을 하나의 feature Layer로 취급하여, repeated blocks 활용

  • EfficientDet은 여러 resolution의 feature map을 가중 합
  • FPN의 경우 feature map의 resolution 차이를 Resize를 통해 조정한 후 합

  • BiFPN의 경우 모든 가중치의 합으로 가중치를 나눠줌.
  • 이 때 가중치들은 ReLU를 통과한 값으로 항상 0 이상
  • 분모가 0이 되지 않도록 아주 작은 값 e를 더해줌


2) MOdel Scaling

  • 더 좋은 성능을 위해서는 더 큰 backbone 모델을 사용해 dewtector의 크기를 키우는 것이 일반적임

  • EfficientDet은 accuracy와 efficiency를 모두 잡기 위해, 여러 constraint를 만족시키는 모델을 찾고자 함.

  • 따라서 EfficientNet과 같은 compound scaling 방식을 제안.

  • EffcientNet B0 ~ B6을 backbone 으로 사용

  • BiFPN network

    • 네트워크의 width(=#channels) 와 depth(=#layers)를 compound 계수에 따라 증가시킴

  • Box/class prediction network
    • Width는 고정, depth를 다음과 같은 식에 따라 증가

  • input image resolution
    • Resolution을 다음과 같이 선형적으로 증가

Neck

FPN, PANet, DetectoRS, BiFPN, NasFPN and AugFPN

1. Neck

1.1 Overview

Neck은 무엇인가?

backbone의 마지막 feature map 을 사용한다 -> why?

중간 중간의 feature map 도 사용해보자! -> Neck의 발전


Neck은 왜 필요한가?

Neck이 없다면 최종적으로 backbone을 통과한 같은 크기의 feature map 에서 다양한 크기의 객체를 예측해야 한다.

하지만 만약에 여러 크기의 feature map을 사용한다면, 각각의 feature map에서 다양한 크기를 대응할 수 있다면 ROI head 에서 보는 feature가 다양해진다.

일반적으로 작은 feature map 일수록 큰 범위를 보고 큰 feature map 일수록 작은 범위를 본다.

high level의 feature map만 사용한다면 작은 객체를 포착할 수 없는 문제가 생기고 이를 해결 하기 위해 다양한 feature map을 사용하자 라는 아이디어가 제안되었다.

다양한 크기의 객체를 더 잘 탐지하기 위해서 Neck을 사용한다.

Neck 없이 바로바로 뽑아서 region 을 해도 되지 않나? -> Neck을 통한 localization 정보 교류 중요성

하위 level의 feature는 semantic이 약하므로 상대적으로 semantic이 강한 상위 feature와의 교환이 필요

1.2 Feature Pyramid Network (FPN)

기존의 아이디어들

기존의 방법들은 high level의 semantic의 정보가 교환되지 않는다는 한계점이 존재

FPN

  • high level에서 low level로 semantic 정보 전달의 필요성을 깨닫음.
  • 따라서 top down path way 추가
    • Pyramid 구조를 통해서 high level 정보를 low level에 순차적으로 전달
      • Low level = Early stage = Bottom
      • Hoigh level = Late stage = Top

Bottom-up

Top-down

Lateral connections

bottom-up 과정에서 나온 feature map은 chnnel이 부족하고 top-down 과정에서 나온 feature map은 w 와 h 가 부족하다.

따라서 bottom-up 과정에서 나온 feature map은 1x1 conv를 수행해 채널을 맞춰주고, top-down과정에서 나온 feature map은 Upsampling을 통해 w와 h를 맞춰준다.

이를 통해서 두 가지 결과를 더해준다.

Contribution

  • 여러 scale의 물체를 탐지하기 위해 설계
  • 이를 달성하기 위해서는 여러 크기의 feature를 사용해야할 필요가 있음

summary

  • Bottom up(backbone)에서 다양한 크기의 feature map 추출
  • 다양한 크기의 feature map의 semantic을 교환하기 위해 top-down을 사용.

Code

  • Build laterals : 각 feature map 마다 다른 채널을 맞춰주는 단계

  • Build Top-down : chnnel을 맞춘 후 top down 형식으로 feature map 교환

  • Build ouputs : 최종 3x3 convolution 을 통과하여 RPN으로 들어갈 feature 완성

1.3 Path Aggregation network (PANet)

FPN 문제점 -> Low level의 feature가 high level feature에 제대로 전달할 수 없음.

Bottom-up 을 두번 사용하여 low level의 feature를 다시한번 전달하자 - PANet의 Contribution

ROIAlign = ROI Pooling 으로 이해할 것.

ROI의 경계에 대해서 학습이 어려움.

하나의 feature map에서 projection을 하는게 아니라 모든 feature map으로부터 ROI projection을 하여 이후 ROI Pooling을 하고 fc layer를 만들어 max pooling을 해서 최종적으로 fc2 layer를 만들어내자! -> Adaptive Feature Pooling의 Contribution

Code

  • FPN : Top-down에 3x3 convolution layer 통과하는것 까지 동일

  • Add bottom-up : FPN을 통과한 후, bottom-up path를 더해줌

  • Build outputs : 이후 FPN과 마찬가지로 학습을 위해 3x3 convolution layer 통과

2.1 DetectoRS

Motivation

  • Looking and thinking twice
    • Region proposal networks (RPN)
    • Cascade R-CNN

주요 구성

  • Recursive Feature Pyramid(RFP)
  • Switchable Atrous Convolution(SAC)

Recusive Feature Pyramid (RFP)

FLOPs 가 많이 증가하여 학습속도가 느리다는 단점이 있음.

ASPP ? 여러가지 receptive field를 만들어 concat함.

Atrous Convolution

Convolution Convolution

  • 2D Convolution

    • kernel size = 3x3

    • Stride = 2

    • Padding = 1

    • Recetive filed : 3 x 3*

Atrous Convolution Atrous Convolution

  • 2D Convolution

    • kernel size = 3x3

    • dilation rate of 2

    • Stride = 1

    • Padding = 0

    • Recetive filed : 5 x 5*

2.2 Bi-directional Feature Pyramid (BiFPN)

Pipeline

Weighted Feature Fusion

  • FPN과 같이 단순 summation을 하는 것이 아니라 각 feature별로 가중치를 부여한 뒤 summation
  • 모델 사이즈의 증가는 거의 없음
  • feature별 가중치를 통해 중요한 feature를 강조하여 성능 상승

NASFPN

Architecture

Search

단점

  • COCO dataset, ResNet 기준으로 찾은 architecture, 범용적이지 못함

    • Parameter가 많이 소요
  • High search cost

    • 다른 Dataset이나 backbone에서 가장 좋은 성능을 내는 architecture를 찾기 위해 새로운 search cost

2.4 AugFPN

Overview

  • Problems in FPN
    • 서로 다른 level의 feature간의 semantic 차이
    • Highest feature map의 정보 손실
    • 1개의 feature map에서 RoI 생성

Residual Feature Augmentation

  • Ratio-invariant Adaptive Pooling
    • 다양한 scale의 feature map 생성
    • 256_channels

  • 동일한 size로 upsampling
  • N 개의 feature에 대해 가중치를 두고 summation 하는 방법
  • 3개의 feature map을 Concat 하고 N x ( 1 x h x w )의 값을 구함
  • 이 때 N x ( 1 x h x w )은 spatial weight를 의미
  • N x ( 1 x h x w )를 각 N개의 feature에 곱해 가중 summation

Soft RoI Selection

  • FPN과 같이 하나의 feature map에서 RoI를 계산하는 경우 sub-optimal
  • 이를 해결하기 위해 PANet에서 모든 feature map을 이용했지만, max pool하여 정보 손실 가능성
  • 이를 해결하기 위해 Soft RoI Selection을 설계

  • 모든 scale feature에서 RoI projection 진행 후 RoI pooling
  • channel-wise 가중치 계산 후 가중 합을 사용
  • PANet의 max pooling을 학습, 가능한 가중 합으로 대체

1. stage Detectors

1.1 1 Stage Detector Background

2 stage detectors

  • RCNN, FastRCNN, SPPNet, FasterRCNN ...

    • 1) Localization (후보 영역 찾기)
    • 2) Classification (후보 영역에 대한 분류)
  • Limitation : 속도가 매우 느림

  • Real World에서 응용 가능한 Object Detectors는 없을까?

1 Stage Detectors

  • Localization, Classification이 동시에 진행
  • 전체 이미지에 대해 특징 추출, 객체 검출이 이루어짐 -> 간단하고 쉬운 디자인
  • 속도가 매우 빠름 (Real-time detection)
  • 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높음
    • Background error가 낮음
  • YOLO, SSD, RetinaNet, ...

2. YOLO v1

2.1 Overview

You Only Look Once History

  • YOLO v1 : 하나의 이미지의 Bbox와 classification 동시에 예측하는 1 stage detector 등장
  • YOLO v2 : 빠르고 강력하고 더 좋게
    • 3가지 측면에서 model 향상
  • YOLO v3 : multi-scale feature maps 사용
  • YOLO v4 : 최신 딥러닝 기술 사용
    • BOF : Bag of Freebies, BOS : Bag of Specials
  • YOLO v5 : 크기별로 모델 구성
    • Small, Medium, Large, Xlarge

접근 전략

YOLO 특징

  • Region proposal 단계 X
  • 전체 이미지에서 bounding box예측과 클래스를 예측하는 일을 동시에 진행
    • 이미지, 물체를 전체적으로 관찰하여 추론 (맥락적 이해 높아짐)

Network

  • GoogLeNet 변형
    • 24개의 convolution layer : 특징 추출
    • 2개의 fully connected layer : box의 좌표값 및 확률 계산

2.2 Pipeline

  • 입력 이미지를 SxS 그리드 영역으로 나누기 (S=7)
  • 각 그리드 영역마다 B개의 Bounding box와 Confidence score 계산 (B=2)

YOLO 참고자료

2.3 Result

장점

  • Faster R-CNN에 비해 6배 빠른 속도
  • 다른 real-time detector에 비해 2배 높은 정확도
  • 이미지 전체를 보기 때문에 클래스와 사진에 대한 맥락적 정보를 가지고 있음
  • 물체의 일반화된 표현을 학습
    • 사용된 dataset의 새로운 도메인에 대한 이미지에 대한 좋은 성능을 보임

3. SSD

3.1 Overview

YOLO 단점

  • 7x7 그리드 영역으로 나눠 Bounding box prediction 진행

    • 그리드보다 작은 크기의 물체 검출 불가능
  • 신경망을 통과하여 마지막 feature만 사용

    • 정확도 하락

YOLO vs SSD

SSD 특징

  • Extra convolution layers에 나온 feature map들 모두 detection 수행

    • 6개의 서로 다른 scale의 feature map 사용
    • 큰 feature map (early stage feature map)에서는 작은 물체 탐지
    • 작은 feature map (late stage feature map)에서는 큰 물체 탐지
  • Fully connected layer 대신 convolution layer 사용하여 속도 향상

  • Default box 사용 (anchor box)
    서로 다른 scale과 비율을 가진 미리 계산된 box 사용

3.2 Pipleline

Network

  • VGG-16(backbone) + Extra Convolution Layers
  • 입력 이미지 사이즈 300x300

Multi-scale feature maps

  • N_Bbox : Different scale per feature maps(S_min = 0.2, S_max = 0.9, m = 6)

  • N_Bbox : Different aspect ratio

Multi-scale feature maps & Default Box

Training

  • Hard negative mining 수행

  • Non Maximum suppression 수행

Loss

YOLO Follow-up

4.1 YOLO v2

Concept

  • 3가지 파트에서 model 향상
    • Better : 정확도 향상
    • Faster : 속도 향상
    • Stronger : 더 많은 class 예측 (80->9000)

Better

  • Batch normalization

    • map 2% 상승
  • High resolution classifier

    • YOLO v1 : 224x224 이미지로 사전 학습된 VGG 448x448 Detection 테스크에 적용
    • YOLO v2 : 448x448 이미지로 새롭게 finetuning
    • map 4% 상승
  • Convolution with anchor boxes

    • Fully connected layer 제거
    • YOLO v1 : grid cell의 bounding box의 좌표 값 랜덤으로 초기화 후 학습
    • YOLO v2 : anchor box 도입
    • K means clusters on COCO datasets
      • 5개의 anchor box
    • 좌표 값 대신 offset 예측하는 문제가 단순하고 학습하기 쉬움
    • map 5% 상승
  • Fine-grained features

    • 크기가 작은 feature map 은 low level 정보가 부족
    • Early feature map은 작은 low level 정보 함축
    • Early feature map을 late feature map에 합쳐주는 passthrough layer 도입
    • 26x26 feature map을 분할 후 결합
  • Multi-scale training

    • 다양한 입력 이미지 사용 {320,352,...,608}
    • != multi-scale feature map

Faster

  • Backbone model
    • GoogLeNet -> Darknet-19
  • Darknet-19 for detection
    • 마지막 fully connected layer 제거
    • 대신 3x3 convolution layer로 대체
    • 1x1 convolution layer 추가
      • channel 수 125 (=5x(5+20))

Stronger

  • Classification 데이터셋(imageNet), detection 데이터셋(COCO) 함께 사용

    • Detection 데이터셋 : 일반적인 객체 class로 분류 ex) 개
    • Classification 데이터셋 : 세부적인 객체 class 로 분류 ex) 불독, 요크셔테리어
  • "개", "요크셔테리어", 배타적 class로 분류하면 안된다.

  • WordTree 구성(계층적인 트리)

    • Ex."요크셔테리어" = 물리적객체(최상위 노드) - 동물 - 포유류 - 사냥개 - 테리어(최하위 노드)
    • imageNet 데이터셋과 CoCo 데이터셋 합쳐서 구성 : 9418 범주
  • ImageNet 데이터셋 : COCO 데이터 셋 = 4 : 1

    • Detection 이미지 : classification loss는 특정 범주에 대해서만 loss 계산
      ex. 개 이미지 : 물리적객체 - 동물 - 포유류 - 개 에 대해서 loss 계산
    • Classification 이미지 : classification loss만 역전파 수행 (IOU)

4.2 YOLO v3

Darknet-53

  • Skip connection 적용
  • Max pooling x, convolution stride 2 사용
  • ResNet-101, ResNet-152와 비슷한 성능, FPS 높음

Multi-scale Feature maps

  • 서로 다른 3개의 scale을 사용(52x52, 26x26, 13x13)
  • Feature pyramid network 사용
    • High-level의 fine grained 정보와 low-level의 semantic 정보를 얻음

5. RetinaNet

5.1 Overview

1 Stage Detector Problems

  • Class imbalance

    • Positive sample(객체 영역) < negative sample(배경 영역)
  • Anchor Box 대부분 Negative Samples(background)

    • 2 Stage detector의 경우 region proposal에서 background sample 제거(selective search, RPN)
    • Positive / negative sample 수 적절하게 유지(hard negative mining)

5.2 Focal Loss

Concept

  • 새로운 loss function 제시 : cross entropy loss + scaling factor
  • 쉬운 예제에 작은 가중치, 어려운 예제에 큰 가중치
  • 결과적으로 어려운 예제에 집중

사용

1) Object Detection에서 background와의 class imbalance 조정
2) Object Detection 뿐만 아니라 Class imbalance가 심한 Dataset을 학습할 때 이를 활용
- Classification, Segmentation, Kaggle, etc

Summary

+ Recent posts