Unsupervised Visual Representation Learning Overview (Self-Supervision)

|

Unsupervised Visual Representation Learning Overview (Self-Supervision)

  • 참고
    • https://www.youtube.com/watch?v=eDDHsbMgOJQ
    • https://www.slideshare.net/HoseongLee6/unsupervised-visual-representation-learning-overview-toward-selfsupervision-194443768

What is “Self-Supervision”?

  • 지도학습(Supervised learning)은 강력하지만 많은 량의 labeled data가 필요함
    • 주로 다양한 문제들을 해결함에 있어서 labeled data를 사용하는 지도학습 모델을 많이 사용함
      • 많은량의 양질의 데이터만 있다면 좋은 성능을 낼 수 있음
    • 하지만 이는 labeled data가 없으면 사용 불가능하다는 문제가 있음
      • 이러한 labeled data를 만드는데도 매우 큰 human factor가 필요함
    • 이처럼 labeled data 문제를 해결하고자 다양한 방법의 un/self supervised learning 방법들이 연구됨
  • Self-supervised visual representation learning
    • 본 글에선 비지도 학습(Unsupervised learning)의 한 분야인 self-supervised learning을 이미지 인식분야에 적용한 연구들에 대해 다룸
    • Unlabeled data를 이용해서 모델을 학습시키며, 모델이 이미지의 higher level의 semantic한 정보들을 이해 할 수 있도록 학습됨
      • 이를 위해 필요한게 pretext task
    • Pretext task란, 딥러닝 네트워크가 어떤 문제를 해결하는 과정에서 영상 내의 semantic한 정보들을 이해 할 수 있도록 배울 수 있도록 학습되게 하는 임의의 task
      • Pretext task는 딥러닝 네트워크가 semantic 정보를 학습하도록 사용자가 임의대로 정의하게 됨
    • 이렇게 pretext task를 학습하며 얻어진 feature extractor들을 다른 task로 transfer시켜 주로 사용함
  • Self-supervised visual representation learning에서 사용하는 pretext task들
    • Exempler, 2014 NIPS
      • Exampler가 처음에 나오고, 이와 관련된 연구들이 계속해서 진행됨
    • Relative Patch Location, 2015 ICCV
    • Jigsaw Puzzles, 2016 ECCV
    • Autoencoder Base Approaches - Denoising Autoencoder(2008), Context Autoencoder(2016), Colorization(2016), Split-brain Autoencoders(2017)
    • Count, 2017 ICCV
    • Multi-task, 2017 ICCV
    • Rotation, 2018 ICLR

Exemplar

  • Discriminative unsupervised feature learning with exemplar convolutional neural networks, 2014 NIPS
  • STL-10 데이터셋을 사용해 실험
  • STL-10의 96x96크기의 영상 내에서 considerable한 gradient가 있는(객체가 존재할 만한 영역) 부분을 32x32 크기로 crop
  • 이렇게 crop된 32x32 크기의 패치를 seed patch로 하고, 이 seed patch가 하나의 class를 의미하도록 함
  • Seed patch를 data augmentation에 사용하는 transformation들을 적용시켜 추가영상을 만들어냄
views views
  • 위처럼, seed image를 data augmentation을 적용시켜 여러개로 부풀리고, 부풀려진 data를 seed image로 판독하도록 네트워크를 학습시킴
  • 예를들어
    • Deer seed 1번 영상으로 총 23장의 영상을 생성한 후, 해당 seed를 1번 클래스로 지정
    • Deer seed 2번으로(1번과 다름) 총 23장의 영상을 생성한 후, 해당 seed를 2번 클래스로 지정
    • 이런식으로 총 N개의 영상에 대해 N개의 클래스가 존재하게 됨
  • Classifier는 하나의 seed image랑 augmented 영상들을 같은 class로 분류하도록 학습됨
  • 하지만 이런 경우, ImageNet과 같이 백만장의 영상으로 구성된 데이터셋은 총 백만 개의 class가 존재하게 되는 꼴
    • 학습 난이도가 올라가며 파라미터수도 매우 많아지게 됨
  • 따라서 이런 Exemplar 방식은 큰 데이터셋에는 적합하지 않음

Relative Patch Location

  • Unsupervised Visual Representation Learning by Context Prediction, 2015 ICCV
    • 위의 Exemplar 방식의 단점을 해결한 논문
  • 한 장의 영상에서 3x3개의 패치들을 뜯어오고, 가운데 패치를 기준으로 1번부터 8번까지 할당
  • 가운데 패치 기준으로 임의로 선택된 패치가 1번부터 8번 패치 중 몇 번 패치인지 예측하도록 모델이 학습됨
    • 3x3 패치 기준 총 8개의 클래스만 존재하는 꼴
views
  • 위 사진 좌측처럼 사람이 예측하기도 어려운 문제를 학습시키면 이미지 전반의 representation을 배울 수 있을 것이라는 가정에서 나온 연구
    • AlexNet 기반의 네트워크를 사용함
  • 위 사진 우측처럼 patch는 일정하게 만들어지지 않고 약간 위치가 바뀌게끔 설정됨
    • 일정하게 patch를 만들게 되면 모델이 trivial solution만을 추론하는 경우가 발생 할 수 있으므로, 이를 위해 약간의 위치 조정을 적용함
      • Gap, Randomly jitter 등이 적용
    • 하지만 이 방법도 완벽하게 trivial solution을 피하지는 못함
      • 이를 완벽히 피하는 solution이 jigsaw puzzle 방법
  • 위의 방식대로 feature extractor를 학습시킨 후 다른 task에 해당 모델을 transfer 시켰을 때 성능이 좋았음
views

Jigsaw Puzzles

  • Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles, 2016 ECCV
    • 직소퍼즐 풀게하는 pretext task
  • 앞과 비슷하게 3x3 패치를 뜯고, 임의의 permutation을 적용해 직소퍼즐처럼 셔플링을 수행함
  • 여기서 네트워크는 어떤 permutation이 적용되어 해당 patch가 만들어졌는지를 예측하게 됨
    • 셔플링 된 위치가 본래 어디 위치인지를 추론해야 함
      • 직관적 이해는 밑에서..
  • 하지만 9!=362,880 으로 classifier에겐 약 36만개의 class를 배워야 하게 됨
    • 불가능!
  • 따라서 유사한 permutation을 제거해 100개의 pre-defined permutation을 사용함
  • 최종적 으로 네트워크의 출력은 permutation index를 예측한 100-d의 벡터가 됨
views
  • Network는 AlexNet 기반의 모델을 사용했음
  • 논문 방법의 직관적 이해는 아래와 같음
views
  • 위 사진처럼 총 9조각 기준으로 각자 자기 원래 위치에 해당하는 위치 값을 추론하게 됨
    • 사진의 예시 기준 총 9개의 AlexNet 기반의 네트워크를 사용함
      • 모델의 weight는 서로 sharing

Autoencoder-Base Approaches

  • Denoising Autoencoder, Context Autoencoder, Colorization, Split-brain Autoencoders
  • Learn image features from reconstructing images without any annotation
    • 아래와 같은 일련의 이미지 복원 과정을 통해 네트워크가 영상 전반의 representation을 학습 할 수 있게 된다는 가정
views
  • Denoising Autoencoder: 랜덤 노이즈가 섞인 원본 raw data에서 네트워크를 거쳐 원본 raw data를 복원하는 방법
  • Image Colorization: 흑백 영상을 색을 입혀 컬러 영상으로 바꿔주는 방법
  • Context Autoencoder: 영상 내 중간에 뚫린 부분을 추측/복원하는 방법
  • Split-Brain Autoencoder: 이미지의 절반을 잘랐을 때, 네트워크가 나머지 잘린 이미지 절반을 맞추도록 하는 방법

Count

  • Representation Learning by Learning to Count, 2017 ICCV
  • 한 patch의 object의 특징들을 가상의 vector로 표현함
    • ex. 각 패치 안에 코 2개, 눈 4개, 머리 1개 등등..
    • 이런 특징들은 각 패치나 전체 영상이 up/down sampling 되어도 유지가 되어야 함
  • 각 패치의 특징 벡터들의 합은 원래 이미지의 특징 벡터의 합과 같다는 가설에서 제안된 논문
views
  • 메인 아이디어는
    • 이미지를 네트워크에 넣고, feature extractor를 통해서 최종 출력으로 위와 같은 패치별 특징 벡터를 구하도록 모델을 구현 후 학습시키게 됨
  • 위 사진 우측처럼 네트워크는 학습되게 됨
    • 원본 이미지를 그냥 down sampling 했을 때 추론되는 특징 vector와
    • 각 patch별로 네트워크에 들어갔을 때 얻어지는 특징 벡터들의 합이 같도록 학습됨
  • 하지만 한 장의 영상만으로 학습 될 경우, 모든 feature를 0으로 추론하는 등의 trivial solution을 만들어내게 될 수 있음
    • 이를 위해 패치로 잘리는 영상 x와 완전히 다른 영상 y를 넣었을 때 다른 feature vector가 나오도록 하는 contrastive loss를 추가
views
  • Feature vector는 calculating loss(l2 loss)에서 사용됨
  • Trivial solution을 피하기 위한 contrastive loss

Multi-task

  • Multi-task Self-Supervised Visual Learning, 2017 ICCV
  • 2017년 당시 주로 쓰였던 위의 4가지 self supervised learning들을 동시에 multi task로 학습시키는 방법
    • 다른 4개의 self supervised learning 방법들을 한 개의 네트워크에 학습
    • 앞의 context prediction task인 Relative Patch Location + Colorization + Exemplar + Motion Segmentation이 적용됨
  • 성능을 ImageNet classification, PASCAL VOC 2007 detection, NYU V2 depth prediction으로 측정함
views
  • 실험 결과를 봣을 때 4개를 모두 적용했을때의 결과가 가장 좋았음

Rotations

  • Unsupervised representation learning by predicting image rotations, 2018 ICLR
    • 이미지의 rotation을 추론하도록 학습하는 pretext task
  • 각각 영상을 랜덤하게 회전시킴
    • 회전영상으로 원본에서 몇 도 회전했는지를 예측함
    • 0, 90, 180, 270의 4개 클래스가 존재
  • 논문의 가설은
    • 회전을 잘 예측하기 위해선 원래 영상의 canonical orientation을 잘 이해해야 하고, 이를 잘 이해하려면 영상 전반의 특징을 잘 이해 할 것이다라는 전제로 모델을 구현함
    • 그리고 적용시켰을때도 성능이 실제 좋아졌음
views

성능 측정의 방법

  • 앞의 방법들의 성능을 어떻게 측정할 것인가?
    • 모델의 일반화 성능을 보기 위해 ImageNet 분류 task에 각 feature extractor들을 transfer learning시킴
  • 모든 self supervised learning들을 ImageNet pretraining 시킴
    • 이 때, label 정보는 사용하지 않고 해당 방법들의 pretext task를 따라 학습
  • 다음으로, 모든 feature extractor들을 freeze하고, 뒤에 linear classifier를 붙여서 classification 결과를 확인
    • Logistic regression으로 classifier를 구성했으며, 여기선 ImageNet 데이터 셋의 레이블 정보를 활용하여 supervised learning시킴
      • 일종의 feature extractor as a fixed feature extractor transfer learning
views
  • 실험엔 Batch size 192, SGD momentum (coefficient 0.9), weight decay 5e-4, learning rate 0.01 적용
  • Learning rate decay는 총 30 epoch동안 10, 20 epoch에서 10배씩 줄어들게 적용됨
    • 총 epoch가 매우 적기때문에 크게 의미있는 실험결과로 보긴 어려움
      • 특히 from scratch로 학습하는 경우 epoch를 매우 크게 가져가지만, 실험에선 그러지 않음
views
  • 위 표에서 Conv1, Conv2, .. 는 AlexNet의 해당 layer까지 parameter를 freeze시키고 뒷부분을 학습시켰다는 의미
    • ex. Conv2 는 Conv1과 Conv2가 freeze
  • ImageNet labels: 일반적인 supervised learning으로 모델을 학습시킴
  • Random/Random rescaled: 각 방법대로 conv layer weight parameter를 초기화하고 해당 레이어까지 freeze하고 학습시킴
  • Self-supervised: Feature extractor를 ImageNet 데이터셋을 이용해 레이블 정보를 활용하지 않고 각 논문의 pretext task에 따라 학습시키고 해당 레이어별로 freeze시키고, linear classifier를 붙였을 때의 결과들을 의미함

  • 실험 결과를 보면, 모델 성능이 좋기 위해선 feature extractor가 이미지의 전반적인 semantic한 정보들을 잘 이해하고, representation을 잘 학습해야만 단순한 linear classifier 하나만으로도 성능이 잘 나올 수 있는것을 확인 할 수 있음

  • 다음으로, PASCAL VOC 2007을 이용해 classification, detection, segmentation의 3가지 task에 대해서도 transfer 시켜봄
views
  • 앞과 동일하게 이미지넷으로 각 방법별 pretraining 시키고 새 task로 transfer learning 시킴
    • 하지만 conv layer별로 freeze가 아니라 모두 다 weight parameter가 update되도록 설정(un-frozen)
  • Random의 방법들을 볼 때, 적은 epoch로도 좋은 성능을 낸 것을 볼 수 있음

  • 전반적으로 ImageNet pretrainined feature extractor를 썼을 때 보다도 성능이 좋은 것은 아니지만, detection같은 경우엔 mAP가 2밖에 차이가 나지 않을 정도로 나쁘지 않은 결과를 보임

  • 위 실험들이 갖는 의미
    • 레이블이 없는 경우에도 이렇게 self supervised learning의 pretext task로 feature extractor를 pre-training시켜 본래 task에 적용시키면(transfer) 비슷한 성능을 낼 수 있음을 의미함
  • 본 글에서 다뤄지지 않은, 동일 내용을 다루는 논문들은 아래와 같음
    • Deep Cluster (2018 ECCV)
    • Revisiting Self-Supervised Visual Representation Learning (2019 CVPR)
      • 앞의 논문들이 AlexNet만 갖고 실험했던것을 문제삼음
      • 성능을 최대한으로 끌어올리기 위해 위처럼 다양한 pretext task를 적용시키는것도 중요하지만, 모델의 표현력이라는 기본기에도 충실한 실험을 해야한다는 관점에서 연구한 논문
    • Selfie (2019 arXiv)
    • Deeper Cluster (2019 ICCV)
    • S4L (2019 ICCV)
      • Semi supervised learning에 self supervised learning을 섞은 논문
views
  • Deep Cluster
    • Unlabeled data들을 pretrained 네트워크에 넣어 feature map을 뽑고, feature map을 clustering 기반으로 sudo label을 만들어 학습시키는 방법
  • Deeper Cluster
    • Deep cluster의 개선 버전
  • 위 두 방법 모두 상당히 좋은 성능을 보인다고 함

Summary

  • 이런 self-supervised learning은 un-supervised learning에 속하는 문제
  • Unlabeled data를 이용해 학습 시키는데 다양한 pretext task들을 창작해 영상의 전반적인 representation을 배울 수 있도록 문제를 만들고 학습시킴
  • Pretext task로 pre-trained 된 feature extractor들을 다른 task에 transfer 시켰을 때의 결과를 분석함
views
  • 위의 방법들이 unsupervised learning이기에 supervised learning만큼 좋은 성능을 낼 순 없음
  • 하지만 from scratch 학습보다는 좋은 성능을 보였음
  • 또한 feature extractor들이 꽤 semantic한 정보들을 잘 배워서 단순한 linear classifier 하나만으로도 꽤 의미있는 성능을 보일 수 있었음

EfficientDet:Scalable and Efficient Object Detection

|

EfficientDet:Scalable and Efficient Object Detection

Original paper: https://arxiv.org/pdf/1911.09070v1.pdf

Authors: Mingxing Tan, Ruoming Pang, Quoc V. Le (Google)

  • 참고 글
    • https://hoya012.github.io/blog/EfficientDet-Review/

Introduction

  • EfficientNet 이 classification task를 타겟으로 작성된 논문이라면, 본 논문은 object detection task를 타겟으로 작성된 논문
views
  • 위의 MS COCO 결과를 볼 때, Feature Pytamid Network(FPN) 구조와 AutoML로 찾은 무거운 backbone인 AmoebaNet을 섞어서 사용한 모델이 COCO에서 가장 좋은 성능을 보임
  • 제안하는 방법은 이러한 AutoML 기반의 모델들의 성능을 크게 상회함
  • 특히 연산량, 연산 속도 관점에서는 굉장히 효율적인 모델을 제안함

Main Challenge and Solution

  • Speed와 accuracy는 서로 trade-off 관계를 갖기 때문에(참고) 높은 정확도와 효율을 동시에 가져가기는 어려움
  • 본 논문에서는 object detection에서 속도와 정확도를 모두 높게 가져가는 모델을 설계할 때 고려해야 할 점 중 크게 2가지를 challenge로 삼음

Challenge 1. Efficient Multi-scale Feature Fusion

  • FPN은 2017년 공개된 이후 대부분의 object detection 연구에서 사용되고 있음
  • 1-stage detector의 대표 모델인 RetinaNet, M2Det, AutoML의 NAS를 FPN구조에 적용한 NAS-FPN등 FPN을 적용하고 성능을 개선하고자 하는 연구들이 많이 진행되어옴
  • 하지만 본 논문에선 이러한 선행 연구들이 모두 서로 다른 input feature들을 합칠 때 feature의 구분없이 단순히 더하는 방식을 사용하고 있음을 지적함

  • 논문에선 서로 다른 input feature들은 해상도(resolution)가 서로 다르기에 output feature에 기여하는 정도를 다르게 가져가야 함을 주장함
    • 단순히 더하게 되면 같은 weight로 기여하게 됨
  • 이를 위해 간단하지만 효과적인 weighted bi-directional FPN(BiFPN) 구조를 제안함
  • BiFPN 구조를 사용하면 서로 다른 input feature들의 중요성을 학습을 통해 배울 수 있으며, 이를 통해 성능을 많이 향상시킬 수 있음
    • 자세한 구조는 후술

Challenge 2. Model Scaling

  • EfficientNet에서 제안한 Compound Scaling 기법은 모델의 크기와 연산량을 결정하는 요소들(input resolution, depth, width)을 동시에 고려하여 증가시키는 방법을 의미함
    • 이 compound scaling 기법을 통해 높은 성능을 달성 할 수 있었음
  • 위의 아이디어를 object detection에도 적용 가능하며, backbone, feature network, box/class prediction network 등 모든 곳에 적용함

Main Contribution

  • 본 논문에서 제안하는 핵심 내용은 크게 2개
    • BiFPN
    • Model scaling
  • 위의 두 방법을 적용시켜 MS COCO에서 가장 높은 mAP 점수를 달성하고, 기존 방법들 대비 매우 적은 연산량(FLOPS)으로 비슷한 정확도를 달성함
  • Main contributions
    • Weighted bidirectional feature network (BiFPN)를 제안
    • Object detection에도 compound scaling을 적용하는 방법을 제안
    • BiFPN과 compound scaling을 접목해 좋은 성능을 보이는 EfficientDet 구조를 제안

BiFPN

Cross-Scale Connections

  • Feature Pyramid Network를 이용한 방법들을 모아둔 그림은 아래와 같음
views
Feature network design
  • (a): 전통적인 Feature Pyramid Network(FPN)의 구조
  • (b): PANet. FPN에 추가로 bottom-up pathway를 FPN에 추가함
  • (c): AutoML의 NAS를 FPN구조에 적용시킨 NAS-FPN
    • 불규칙적인 FPN 구조를 보임
  • (a)와 (b)의 구조는 같은 scale에서만 connection이 존재하지만, (c)부터는 scale이 다른 경우에도 connection을 형성한 Cross-Scale Connection 을 적용시킴
  • (d)와 (e)는 본 논문에서 추가로 제안하고 실험한 방식
  • (f): 본 논문에서 제안하는 BiFPN 구조

  • (e)의 simplified PANet 방식은 PANet에서 input edge가 1개인 node들은 기여도가 적을 것이라 판단하고 제거해 얻은 network 구조
  • (f) BiFPN은 (e)에 보라색 전처럼 같은 scale에서 edge를 추가해 더 많은 feature들이 fusion되도록 구성을 한 방식
  • PANet은 top-down과 bottom-up path를 하나만 사용했지만, 본 논문에서는 이러한 구조를 여러번 반복하여 사용함
    • 이를 통해 더 high-level한 feature fusion이 가능하다고 주장함
views
BiFPN의 성능 향상 분석
  • 논문에선 BiFPN의 성능 향상을 살펴보기 위해 2개의 ablation study를 수행함
  • Table 3에선 같은 backbone(EfficientNet-B3)에서 FPN을 BiFPN으로 바꿨을 때의 성능을 측정함
    • 이 때의 mAP는 약 4.1 증가했으며, parameter 수와 FLOPS도 적게 사용하고 있음을 보여줌
  • Table 4에선 여러 Feature network 방식들에 따라 성능이 어떻게 바뀌는지를 분석한 결과
    • BiFPN을 사용했을 때 성능이 가장 좋은 것을 확인 가능

Weighted Feature Fusion

  • FPN에서 서로 다른 resolution의 input feature들을 합칠 때, 일반적으로는 같은 해상도가 되도록 resize 수행 후 합침
    • 하지만 이러한 경우엔 모든 input feature를 동등하게 처리하게 된다는 문제점이 존재
  • 본 논문에서는 위의 문제를 개선하기 위해 각 input feature에 weight를 주고, 학습을 통해 weight를 배울 수 있는 방식을 제안함
  • 총 3가지 방식을 제안하고 있으며, 각 방식을 하나의 그림으로 정리하면 다음과 같음
views
Weighted Feature Fusion
  • Weight는 3가지 종류로 적용 가능함
    • Scalar(per-feature)
    • Vector(per-channel)
    • Multi-dimensional tensor(per-pixel)
  • 본 논문에선 scalar를 사용하는 것이 정확도와 연산량 측면에서 가장 효율적임을 실험을 통해 확인함
    • 모든 실험에선 Scalar weight를 사용함
  • Unbounded fusion은 말 그대로 unbounded이기에 학습에 불안정성을 유발 할 수 있음
    • Weight normalization을 적용시켜 학습 불안정성 문제 해결
  • SoftMax-based fusion은 많이 사용하는 SoftMax를 사용한 것이지만 GPU 하드웨어에서 속도저하를 유발시킴을 실험을 통해 확인함

  • 따라서 본 논문은 Fast normalized feature fusion 방법을 제안함
    • 우선 weight들은 ReLU를 거치기에 non-zero임이 보장되며, 분모가 0이 되는것을 막기 위해 $\epsilon$인 0.0001 크기의 값을 넣어줌
    • Weight 값이 0~1 사이로 normalize 되는 것은 SoftMax와 유사하며, ablation study를 통해 SoftMax-based fusion 방식보다 좋은 성능임을 확인시켜줌
views
Weight feature fusion ablation study
  • 위의 Table 5는 SoftMax fusion과 Fast fusion을 비교한 결과
    • Fast fusion을 사용하면 mAP의 하락이 약간 있지만 30%의 속도향상을 달성 할 수 있음
  • 그림 5에선 input 1과 input 2의 weight를 training step에 따라 plot 한 결과를 확인 할 수 있음
    • 학습이 계속될수록 weight가 빠르게 변하는 것을 확인 할 수 있음
    • 이는 feture들이 동등하지 않게 output feature에 기여하고 있음을 의미함
    • Fast fusion을 적용시켜도 SoftMax fusion과 양상이 비슷한것을 확인 할 수 있음

EfficientDet

  • 위에서 설명한 BiFPN을 기반으로 EfficientDet이라는 1-stage detection method를 제안함

EfficientDet Architecture

views
EfficientDet 구조
  • EfficientDet의 구조는 위의 그림과 같음
    • 별다른 특이점 없이 그냥 그림 그대로 deconv 된 feature를 concat/connect 하여 사용함

Compund Scaling

  • Backbone network에는 EfficientNet-B0~B6를 사용했으며, ImageNet pre-trained network를 사용함
  • 실험에 사용한 Compound Scaling configuration은 아래와 같음
views
Compound Scaling for EfficientDet
  • EfficientNet의 Compound Scaling처럼 input의 resolution과 backbone network의 크기를 늘려줌
  • 또한 논문에서 제안한 BiFPN과 Box/class network도 동시에 키워줌
    • 각 네트워크별로 어떻게 키웠는지는 위 그림 우측의 (1), (2), (3)에서 확인 가능함

실험 결과

views
MS COCO 결과
  • 제안하는 모델은 MS COCO에서 가장 높은 mAP를 달성함
    • 2019년 11월 기준 SOTA 성능을 보임
  • 기존 방식들 대비 연산 효율이 압도적으로 좋음
views
EfficientDet의 model size, inference latency 비교
  • 모델의 크기(parameter 수), inference latency를 GPU와 CPU에서 측정한 실험 결과
  • 단순히 FLOPS가 적다고 해서 항상 inference latency가 적다는 보장이 없으므로 실제 inference time을 보여줌
    • 정말 유용한 비교 방법인듯
  • 위의 그림을 보면, 제안하는 방법이 정확도도 높고 모델 크기도 작고 inference time도 작아서 빠르게 동작하고 있음을 보여주고 있음
  • 모델 학습에 관한 자세한 training strategy는 논문에서 확인 가능함

결론

  • 본 논문에선 2018년을 기점으로 다양한 detection method들의 성능을 단숨에 서열정리함
  • 성능보다도 inference time의 관점에서 매우 효율적
    • MS COCO와 같은 연구용 데이터셋 뿐만 아니라 실제 데이터셋과 같은 실제(practical) application에서도 충분히 적용가능한 방법
  • Object detection에서도 EfficientNet의 방법이 적용되었으니, 조만간 Semantic/Instance segmentation에도 적용된 논문들이 나올 수 있음

CNN이 동작하지 않는 이유

|

CNN이 동작하지 않는 이유

  • 참고
    • https://blog.slavv.com/37-reasons-why-your-neural-network-is-not-working-4020854bd607
    • http://samediff.kr/wiki/index.php/Neural_net%EC%9D%B4working%ED%95%98%EC%A7%80%EC%95%8A%EB%8A%9437%EA%B0%80%EC%A7%80%EC%9D%B4%EC%9C%A0

먼저 시도 해 볼 것들

  1. 해당 task에서 잘 동작한다고 알려진 모델들을 가져다가 시도
    • Multi-box loss, CE loss 등 잘 동작한다고 알려진 평이한 loss를 이용해 첫 학습을 시도하는편이 좋음
  2. Regularization(Generalization), Normalization 등의 일반화/정규화 방법들을 모두 off
  3. Model을 fine-tuning하는 중이라면 preprocessing을 다시한번 확인
    • 원래 모델에 주어진 preprocessing들을 그대로 적용시켜야 함
  4. Input data가 제대로 들어가는지를 확인
  5. 샘플링 된 작은 크기의 데이터셋으로 우선 학습을 시작해보기
    • 해당 샘플 데이터셋에 모델을 overfitting 시킨다음 조금씩 데이터셋 크기를 키워가며 학습
  6. 마지막으로 위에서 제거한 사항들을 하나씩 더해가며 학습
    • Regularization, Normalization, Custom loss, Complex model 등등
  7. 그래도 제대로 학습되지 않는다면 아래의 사항들을 확인

1. Dataset Issues

  • 어이없는 실수들을 확인해보기
    • Dimension을 뒤바뀌어 있거나
    • 모두 0으로만 만들어진 vector가 네트워크로 들어가고 있거나
    • 같은 data batch만 반복해서 네트워크로 들어가고 있는 등
    • 하나하나 값들을 출력해보며 확인하기
  • 랜덤 데이터를 넣어보고 loss의 변화를 살펴보기
    • 만약 계속해서 비슷하다면, network의 중간 어디에선가 값들이 쓰레기 값들로 변하고 있다는 것을 의미함
      • Vector의 값이 모두 0이 된다던지 등등
  • 전체 데이터 중 몇 개만 네트워크에 입력시켰을 때, 네트워크가 추론하는 label과 동일 데이터를 shuffle하고 입력시켰을 때 네트워크가 추론하는 label과 동일한지를 점검해보기
  • 네트워크가 올바른 문제를 풀고 있는지를 점검해보기
    • 주식 데이터같은것은 원래 랜덤 데이터로 패턴이 존재할 수 없음
    • 즉, 주어진 task, 문제 자체가 올바른 것인지를 확인해야 함
      • Classifier에게 시계열 데이터를 학습시켜 미래 값을 추론하게 시키는 등..
  • 데이터 자체가 더러운(noisy) 데이터인지를 확인하기
    • Noise가 너무 많다거나 mis-label이 너무 많다거나 하는 문제들
    • 이러한 문제들은 데이터셋을 일일히 분석해 확인하는 방법밖엔 없음
  • 데이터 셋에 shuffle을 꼭 적용하기
    • Ordered data가 들어가게 될 경우 학습이 잘 안됨!
  • Class imbalance 확인하기
    • https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/
  • 트레이닝 셋은 충분한지
    • Fine-tuning 말고 네트워크를 from scratch로 학습시키기 위해선 많은 양의 데이터가 필요함
    • Classification 기준 class당 최소 1000개의 영상은 있어야 한다고 함
  • Batch안에 최대한 많은(다양한) label이 들어가도록 하기
    • 이는 shuffle 시켜서 해결 가능
  • Batch size 줄이기
    • Batch size가 너무 크면 generalization 능력을 떨어트리게 됨
    • https://seongkyun.github.io/papers/2019/01/04/Dont_decrease_the_lr/
    • https://arxiv.org/abs/1609.04836

2. Data Regularization/Normalization

  • 데이터 셋 정규화 시킬것(Normalization)
    • 데이터 셋을 training, validation, test set으로 나누고
    • 나뉘어진 training set에 대해 평균, 분산을 구해 data normalization을 수행
  • 일반화 방법인 data augmentation을 너무 많이 시키게 되면 under-fitting이 발생하게 됨
  • Pre-trained model을 사용할 때는 항상 입력되는 값을 신경써야 함
    • 학습된 네트워크에 입력되는 데이터가 어느 값 분포를 갖도록 정규화 되었는지 신경써야 함
      • 0~1 사이의 분포인지, -1~1 사이의 분포인지, 0~255 사이의 분포인지..

3. Implementation Issues

  • 좀 더 간단한 문제를 풀어보기
    • Object detection을 하고 싶다면, 일단 객체의 위치만 찾거나 classification만 하도록 학습시켜보기
  • 우연히 찍어서 정답이 맞을 확률을 확인해보기
    • 예를 들어 10개의 클래스를 맞추는 문제에서 우연히 답을 맞추는 negative log loss는 -ln(0.1)=2.302가 됨
  • Loss function을 custom하게 만들어 적용한다면, 해당 loss가 잘 동작하는지 일일이 확인할 필요가 있음
    • 라이브러리가 제공하는 loss를 사용한다면 해당 loss function이 어떤 형식의 input을 받는지를 명확히 해야 함
      • Pytorch의 경우, NLL Loss와 CrossEntropy Loss는 다른 입력을 받음
        • CE loss의 경우 one-hot 입력을 사용함
    • Total loss가 여러 작은 loss function term들의 합이라면, 각 term의 scale factor를 조절해야 할 수 있음
    • Loss 외에도 accuracy를 사용해야 할 수 있음
      • Metric을 loss로 잡는것이 정확한지, accuracy로 잡는것이 정확할지를 판단해야 함
  • Network architecture를 직접 만들었다면, 하나하나 제대로 동작하는지 확실히해야 함
    • 학습중 weight parameter update가 수행되지 않는 frozen layer가 있는지 확인하기
    • 네트워크의 표현력(expressiveness, expressive power)이 부족 할 수 있음
      • 이는 네트워크의 효율화나 크기를 키워 극복 가능
    • Input이 (k, H, W)=(64, 64, 64)로 모두 같은 dimension 크기를 갖는다면 학습이 잘 되고 있는지 중간에서 확인하기 어려움
      • Prime number로 vector(feature map)를 생성하게 조절해서 잘 동작하는지 확인해보기
  • Optimizer를 직접 만들었다면(gradient descent algorithm), gradient가 떨어지도록 잘 동작하는지를 확인해보기
    • http://ufldl.stanford.edu/tutorial/supervised/DebuggingGradientChecking/
    • http://cs231n.github.io/neural-networks-3/#gradcheck
    • https://www.coursera.org/lecture/machine-learning/gradient-checking-Y3s6r

4. Training Issues

  • 네트워크에 샘플링된 매우 작은 크기의 데이터를 입력시켜 학습시킨다음 잘 동작하는지를 확인하기
  • Network weight parameter의 초기화가 중요함
    • 초기화에 따라 네트워크가 잘 학습되지 않을 수 있음
    • (Xavier)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]나 (He)[https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/He_Delving_Deep_into_ICCV_2015_paper.pdf]의 방법을 사용
    • 하지만 어떤 구조라도 최고의 parameter initialization 방법은 pre-trained model의 weight 값으로 초기화 시킨 후 fine-tuning 하는 방법
      • https://seongkyun.github.io/papers/2019/11/06/imagenet_transfer/
  • Hyperparameter를 조절해보기
    • 일반적으로 최적의 학습용 하이퍼파라미터를 찾기위해 하나하나 직접 시도해보긴 어렵지만, 대부분의 논문에서 실험적으로 사용한 세팅을 그대로 가져다 사용하는것을 추천
      • Learning rate, LR decaying 등등
    • 하이퍼파라미터를 잘못 설정해도 네트워크가 학습되지 않고 gradient exploding이 되는경우가 허다함!
  • Regularization(data augmentation, dropout, weight decay 등)과 Normalization(Batch normalization 등) 방법들을 줄여보기
    • (여기)[https://course.fast.ai/] 에서는 overfitting 문제 해결 전 underfitting시키는 요소들을 제거시켜 우선적으로 overfitting 상태로 네트워크를 만들어보라고 함
  • Loss가 전반적으로 우하향 하고 있다면(줄고 있다면), 일단 좀 더 기다려보기
  • 각 딥러닝 framework들은 phase에 따라(training/test) batch normalization, dropout등이 다르게 동작하는것을 인지하기
  • 학습 과정 시각화하기(중요)
    • 각 layer의 activations, weights, updates를 모니터링 할 것
    • 변화량이 적어야(약 0.001정도) 학습이 다 된것임
      • https://cs231n.github.io/neural-networks-3/#summary
    • Tensorboard나 Crayon을 사용하면 됨
  • Activation 값들의 평균이 0을 상회하는지 확인하기
    • Batch norm이나 ELU activation function 사용하기
  • Weight, biases의 분포는 gaussian 분포를 따르는것이 좋음
    • 단, LSTM은 예외
    • 해당 값들이 inf로 발산하는지를 주시해야 함
  • Optimizer를 잘 쓰면 빠르게/효율적으로 학습 가능함
    • 매우 정리 잘 되어있는 좋은 글: https://ruder.io/optimizing-gradient-descent/
    • Momentum SGD + step lr decaying을 사용하거나, Adam을 사용하는것이 일반적
  • Exploding/Vanishing gradients
    • Gradient clipping을 처리해야 할 수도 있음
    • Activation의 표준편차는 주로 0.5에서 2 사이이며, 이를 벗어나면 vanishing/exploding activation을 의심해봐야 함
  • Increase/Decrease Learning Rate
    • 현재 lr에서 0.1이나 10을 곱하면서 학습 진행시키기
  • RNN의 학습 시의 NaN은 큰 문제
    • 처음 100 iteration안에 NaN이 출력된다면 lr을 줄여봐야 함
    • 0으로 나눌 때 뿐만 아니라 log에 0이나 음수가 들어가도 나올 수 있으니 알고있어야 함
    • Layer by layer로 조사해보면서 NaN을 찾아야 할 수도 있음

YOLOv3:An Incremental Improvement

|

YOLOv3:An Incremental Improvement

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

Authors: Joseph Redmon, Ali Farhadi

  • 참고 글
    • https://www.youtube.com/watch?v=HMgcvgRrDcA
    • https://www.slideshare.net/JinwonLee9/pr207-yolov3-an-incremental-improvement

Background

IoU & mAP

views
  • mAP란?
    • Precision-Recall 그래프에서 빨간 선 기준으로 아래 면적이 Average Precision(AP)
      • Precision이 특정 값으로 fix 되었을 때의 recall값을 plot
        • Recall: 해당 precision을 기준으로 찾아진 정답의 rate
    • 각 클래스간 평균이 mean Average Precision, mAP가 됨

Indroduction

  • 본 논문은 일종의 tech report 개념
  • YOLO의 성능을 개선시켰지만 super interesting한 결과는 아님
    • 작은 changes들을 모아서 성능을 개선시킨 정도
  • 빠르진 않지만, 더 낫고 강력한 성능을 가짐
  • 저자는 자기 트위터 끊었다고 더이상 태깅하지 마라…고 함

Bounding Box Prediction

  • YOLOv2와 동일
    • 미리 Anchor box 정의 후, regression을 통해 얼마나 움직일지에 대한 부분을 예측
  • YOLOv3는 anchor box역할을 하는 dimension cluster들을 이용해 bounding box들을 예측함
  • 네트워크는 4개의 box값을 예측하며, 각각 $t_x, t_y, t_w, t_h$로 x, y 위치와 width, height를 의미함
views
  • Box prediction은 추론된 rough한 박스 좌표를 정확한 GT값으로 맞춰주는 일종의 regression이므로 squared error loss를 사용함
    • $b_x=\rho(t_x)+c_x$
    • $b_y=\rho(t_y)+c_y$
      • $\rho$: Sigmoid function
      • 실제 움직여야 하는 값을 나타니는 $t_x, t_y$는 sigmoid에 의해 0~1사이의 값으로 매핑됨
      • 즉, bounding box의 중심은 다을 칸(다른 grid cell)로 벗어날 수 없음
    • $b_w=p_w e^{t_w}$
    • $b_h=p_h e^{t_h}$
      • Width와 height에 대한 term
      • $t_w, t_h$는 각각 width와 height로 얼만큼 움직여야하나를 의미
      • 원래 결과인 $p_w$와 $p_h$에 exponential term으로 곱해짐
  • YOLOv3는 각 bounding box가 갖고있는 일종의 confidence인 objectness score를 이용해 객체의 위치를 탐지
    • Logistic regression을 통해 objectness score는 0~1사이 값을 갖게 됨
  • GT와 가장 많이 겹치는 box prior의 objectness score는 1이 되도록 설정됨
    • 일반적인 SSD등의 방법에서 background class와 hard negative mining을 사용하는것과 다름
  • YOLOv3는 각 GT에 대해 bounding box가 1개씩 할당됨
    • 이로인해 background class와 hard negative mining이 필요없음
      • 해당 알고리즘은 오탐되는경우에 대해 background class의 정보량이 너무 많아저 imbalance를 줄이고자 학습과정에서 적용되는 방법임
    • 다른 방법들은 GT와 IoU가 가장 큰 것 + IoU가 0.7(일반적으로)이상 되는 것 전부 다 box를 치게 됨
      • 정답이 아닌 경우 모두 background로 할당되로, 이로인해 background class의 정보량이 증가해 별도 처리(hard negative mining)를 하지 않으면 학습이 불가능하게 됨

Class Prediction

  • 다음으로 YOLOv3는 영상 내 찾아진 객체들의 위치에 대해 multilabel classification을 수행
    • 일반적으로 COCO 기준 80개 class를 할당해 softmax를 수행해 하나의 class를 찾음
    • 이 논문은 80개의 class별로 각각 확률을 sigmoid를 취해 binary classification을 수행함
      • 이로인해 multiclass classification이 되도록 함
  • 왜 구지 multiclass classification?
    • Google openimage dataset과 같은 데이터셋을 위한 처리
      • 600개 클래스로 중복되는 상위-하위 클래스가 포함됨
    • Person의 경우 women처럼 hierarchical한 클래스들이 존재하는 경우, 여러 클래스를 동시에 고려해야하므로 binary classification이 적용됨

Predictions Across Scales

  • 3가지 scale에 대해 3개의 bounding box(aspect ratio)를 사용함
    • 3x3으로 총 9개의 bounding box들을 추론
    • Scale에 따라 resolution이 바뀌므로 정확하게 9개라고 보기에는 조금 애매함
  • 이 때 찾아진 tensor size는 $N\times N\times(3\times(4+1+80))$
    • $N\times N$: NxN개의 grid cell들
    • 3: 3개의 scale에서 bounding box 찾기
    • 4: x, y, w, h
    • 1: objectness score
    • 80: MS COCO classes score
views
  • 위 그림에서 grid cell이 총 NxN개가 존재한다고 하면(개 사진)
    • 빨간색으로 칠해진 해당 grid cell에서 해당 scale에서의 aspect ratio로 정의된 크기의 anchor box 3개를 뽑게 됨
    • Depth 방향으로 (4+1+80)x3 으로 총 255의 depth가 쌓임

Anchor Boxes

  • 기존의 방법(SSD나 RCNN)들은 정해진 aspect ratio 사용
    • k-means clustering으로 얻어진 aspect ratio를 이용해 해당 비율을 갖는 객체만 찾게 됨
  • YOLO는 갖고있는 training set을 분석해서 anchor box의 aspect ratio를 정함
  • MS COCO기준 scale별로 총 9개의 cluster를 정함
    • Small: 10x13, 16x30, 33x23
    • Medium: 30x61, 62x45, 59x119
    • Large: 116x90, 156x198, 373x326

Number of Bounding boxes

  • YOLOv1: 98 boxes (7x7 cells, 2 boxes per cell @448x448)
  • YOLOv2: 845 boxes (13x13 cells, 5 anchor boxes @416x416)
  • YOLOv3: 10,647 boxes (@416x416)

  • YOLOv3는 10배정도 많은 box들을 사용함
    • 1-stage 성능 높히기 위해선 피할 수 없는 선택!

Feature extraction

  • Darknet-53 사용
    • 아래 표에서 BFLOP/s 는 1초당 가능한 연산량을 의미
views
  • Darknet-53이 속도와 연산량 측면에서 ResNet-152보다 1.5배정도 나은 성능을 보이며, 정확도도 비슷하고 속도는 2배정도 빠름
  • Darknet-53은 1초당 가능한 연산량이 가장 큼(floating poing operations per second)
    • 이는 제안한 구조가 GPU를 가장 잘 활용하는것을 의미함
    • 이로인해 더 빠르고 효율적으로 동작
views
Darknet-53의 구조

YOLOv3 Architecture

views
  • YOLOv3는 위와 같은 일반적인 FPN과 구조가 비슷함
    • 위 그림의 왼쪽은 일반적인 SSD와 같은 구조로, feature extractwor의 앞쪽에서 나온 feature map은 표현력이 부족함
    • 이를 보완하기 위해 우측처럼 다시 deconvolution으로 feature map의 크기를 확장시켜 high-level feature를 뽑도록 함
    • 왼쪽과 오른쪽의 feature map을 concat해서(왼쪽에서 위치정보 등을 갖고오는 식으로) 표현력을 향상시켜 사용함
views
  • 위 그림은 YOLOv3의 구조로, FPN과 거의 유사한 구조
    • 왼쪽부터 오른쪽으로 순서대로 가장 큰 객체, 중간 크기 객체, 가장 작은 객체를 찾도록 할당됨
    • 각각 feature extractor에서 생성된 feature map을(가로 방향) detection layer를 거쳐(세로 방향) 객체를 찾게 됨

Training

  • 일반적인 네트워크들과 다르게 hard negative mining의 적용 없이 전체 이미지를 학습시킴
    • Hard negative mining은 detection시 뽑힌 bounding box중 실제 제대로 탐지된 객체의 갯수가 매우 적어 background class에만 데이터량이 매우 많아 네트워크가 학습되지 않는 현상을 방지하기 위해 적용됨
    • YOLO 계열은 대신 objectness score로 1개의 GT를 탐지하는 bounding box를 이용해 네트워크가 학습되므로 background class와 hard negative mining이 필요 없음
      • Objectness score를 갖고 thresolding을 통해 GT와 가장 많이 겹치는것을 1로 설정해 남기고 나머지를 날리게 됨
        • 이로 인해 hard negative mining이 필요 없음
  • Multi-scale training, data augmentation 방법들, batch normalization등과 같은 일반적인 normalization, regularization 방법들을 적용시켜 네트워크를 학습시킴
    • Multi-scale training은 이미지를 다양한 resolution으로 scaling하여 물체의 크기에 대한 정보를 증대시킴(학습 정보량 증가)

Result

views
  • RetinaNet보다는 성능이 좋진 않지만, 이건 비합리적인 MS COCO Metric의 문제라고 줄기차게 말함
    • IoU threshold를 0.5부터 0.95까지 0.05단위로 쪼개서 테스트하고 평균을 때리는 방식 자체가 불합리하다고 함
    • 고정된 IoU threshold를 사용하는게 오히려 합당하다고 함
      • 그리고 그 때 YOLOv3의 성능이 제일 합리적이다(속도대비)
  • IoU=0.5(AP50)처럼 고정된 IoU thresold를 사용할 경우, YOLOv3의 성능은 매우 좋음
  • Multi-scale prediction에 대해서도 YOLOv3의 AP는 상대적으로 높음
views
  • 저자는 일부러 속도대비 성능이 좋다는걸 강조하기위해 RetinaNet의 그래프를 그대로 가져다가 표현함
  • 위 그래프는 IoU threshold 0.5 기준 결과임

Things We Tried That Didn’t Work

  • 실험했지만 도움되지 않았던 방법들
  • Anchor box x, y offsets predictions
    • $d_x, d_y$를 width, height의 비율로 계산하게 했더니 오히려 성능이 나빠짐
      • $\hat{G}_x=P_w d_x(P)+P_x$
      • $\hat{G}_y=P_h d_y(P)+P_y$
      • $\hat{G}_w=P_w exp(d_w(P))$
      • $\hat{G}_h=P_h exp(d_h(P))$
  • Linear x, y, predictions instead of logistic regression
    • Linear regression으로 x와 y좌표를 직접 뽑게 했더니 성능이 오히려 나빠짐
  • Focal Loss
    • RetinaNet에서 나온 loss function으로, class별 imbalance한 정보량을 해결하기위한 방법
    • YOLOv3에 적용시킨 결과 오히려 mAP가 2점정도 떨어짐
  • Dual IoU threshold and truth assignment
    • Faster R-CNN에서 나온 방법
    • Thresold가 0.3미만은 negative, 0.7이상은 positive, 나머지는 버림으로 처리함
    • 적용시킨 결과 성능이 하락함

What This All Means

  • YOLOv3은 진짜 좋은 detector라고 함
    • 빠르고 정확하니까
  • MS COCO Metric의 IoU threshold 기준인 0.5:0.95:0.05 는 정말 비합리적이고 최악
    • 하지만 오래된 방식인 PASCAL VOC(IoU=0.5)의 성능은 굉장히 좋았음
  • Russakovsky et al. 논문에서는 사람한테도 IoU threshold가 0.3일때와 0.5일때를 학습시키고 구분짓게 했더니 사람도 잘 못했다고 함
    • 즉, COCO가 thresold를 0.5:0.95:0.05로 하는건 비합리적이고 좋지 못한, 구지 그렇게 해야하나 싶은 방법이라고 주장함

Rebuttal

  • RetinaNet의 논문들은 non-zero point에서 그래프가 시작함
  • 0부터 그래프가 시작되도록 plot하면 아래와 같음
views
  • 연산시간도 훨씬 빠르고, FPS도 훨씬 좋은 결과를 확인 할 수 있음

  • PASCAL VOC가 0.5를 threshold로 쓴 건 Ground-Truth(GT) bounding box가 inaccuracy가 포함되어있기에 고의적으로 낮은 IoU thresold를 사용한 것임
  • COCO는 segmentation mask가 포함되어 있어 PASCAL VOC보다는 레이블링이 잘 되어있긴 하나, 아직도 mAP 평가방식이 합리적이라는 이유는 설명될 수 없음
    • IoU thresold가 0.5보다 높아야 한다는, 더 bounding box를 잘, 정확하게 그려야한다는 정당성을 부여할 이유는 되지 못함
  • 만약 detection model이 분류를 정확히 했는데 bounding box를 조금 잘못 친 경우, threshold가 높은 경우 틀렸다고 판단하게 된다면 그게 옳은 판단이라고 볼 순 없음
    • 이는 classification이 box regression보다 덜 중요하다 하는것인데 말이 안됨
  • 사람이 보기에도 classification을 잘못한것은 명확하지만, bounding box를 잘못 친것은 덜 분명하게 파악함
    • 따라서 bounding box를 그렇게 tight하게 판단하는것은 옳지 못함

mAP’s Problems

views
  • 위 그래프는 실제 mAP를 측정하는 Precision-Recall graph
    • Precision을 높히면 recall은 줄어들게 되는 구조
    • 실제 그래프는 금색 선이지만, 계산시엔 구간 최댓값을 나타내는 초록색 선 아래의 면적으로 계산하게 됨
      • 구간 최댓값
    • 만약 Precision이 1일 때 Recall이 1이 된다면, 위 그래프의 mAP는 1이 됨
      • 오탐 결과들(초록색 선 밑의 금선)을 반영하지 못하는 metric 방법
views
  • 실제 위 그림에서, Detector 1과 2의 mAP는 모두 1로 동일함
    • 모두 각 객체의 위치에 낮은 확률(precision)로라도 box를 그렸기 때문
    • 하지만 2번 detector는 명백하게 오탐한 결과들이 존재하지만, mAP metric에선 이를 반영하지 못함

A New Proposal

  • mAP는 class별 AP를 평균 낸 결과이므로 엉망임
  • 이렇게 class별로 따로 하지 말고, 전체 클래스를 다 한번에 계산하는 global average precision을 사용한다면 더 합리적일 것
  • 또는 mean을 하긴 하되, class가 아니라 image별로(per-image) 평균을 내는것이 더 합리적일 것
    • 이미 AP 자체가 Average Precision으로, 여기에 class별로 평균을 또 때려 이를 mean을 붙이는것 자체가 바보같은 일이라고 함
  • 결론적으로, bounding box를 그리는건 멍청한 일이고, mask가 굉장히 합리적인 방법이라고 생각
    • YOLO는 masking을 하도록 학습시킬 수 없지만 저자는 mask의 true believer(신봉자)라고 함..
  • 전반적으로 특이한 논문

CNN이 잘 동작하는 이유

|

CNN이 잘 동작하는 이유

  • 출처: https://laonple.blog.me/220594258301
    • 공부하다가, 문득 생각나서 정리해봄

Receptive Field

  • Receptive Field, 즉 수용영역은 외부 자극이 전체 영향을 끼치는 것이 아니라, 특정 영역에만 영향을 준다는 의미
  • 영상에서 특정 위치에 있는 픽셀들은 그 주변에 있는 일부 픽셀들과만 correlation이 높음
    • 따라서 해당 위치에서 멀어질수록 그 영향력은 감소하게 됨
  • 이와 유사하게 영상해석에서 인식알고리즘 수행 시 영상 전체 영역에 대해 서로 동일한 연관성으로 처리하지 않고, 특정 범위에 한정해 처리한다면 훨씬 효과적이게 됨
  • 이러한 RF의 특성을 영상정보에만 한정짓지 않고 locality를 갖는 모든 신호들에 유사하게 적용할 수 있다는 아이디어에 기반해 출현한 것이 CNN

CNN의 특징

  • Locality(Local Connectivity)
    • CNN은 RF와 유사하게 local 정보를 활용함
      • 공간적으로 인접한 신호들에 대한 correlation 관계를 비선형 필터를 적용해 추출함
    • 이런 필터를 여러 개를 적용하면 다양한 local 특징을 추출할 수 있게 됨
    • 일련의 convolution과 pooling등의 subsampling을 통해 영상의 spatial한 크기가 줄어들게 되고, 그 과정에서 local feature들에 대한 filter연산을 반복적으로 적용하며 점차 global한 feature들을 얻을 수 있게 됨
  • Shared Weights
    • Convolution 연산 수행 시, 동일한 계수(kernel값들)를 갖는 filter를 전체 영상(혹은 feature map)에 대해 반복적으로 사용(sliding window 연산)함으로 변수의 수를 획기적으로 줄일 수 있음
    • Topology, 즉 영상 내 객체의 크기나 위치에 무관한 항상성(invariance)을 얻을 수 있게 됨
      • Filter(convolution) 연산과 pooling 등 sub-sampling 연산과정을 통해 feature map에는 local feature가 아닌 global feature에 대한 정보들이 담기게 됨
        • Spatial 방향으로 작아질수록 더 global한 feature가 얻어짐