Group Study (2022-2023)/Machine Learning

Part 3. Convolutional Neural Network(2)

alacori1010 2022. 11. 26. 00:37

먼저 간략하게 object dectection란 물체의 위치를 탐지하는 bounding box regression과 물체를 분류하는 object classfication 으로 이뤄져있습니다. object detection은 이 두과정을 몇단계로 나누느냐에 따라 1-stage detector, 또는 2-stage detector라고 하는데, 우리가 오늘 다룰 yolo는 1-stage detector 입니다! yolo는 정확한 성능보다 자율주행이나 로봇같이 real-time application을 위한 빠른 속도의 알고리즘에 초점을 두고있습니다. 1-stage detector 는 input image를 입력받으면 feature extractor를 통해 feature 에 대한 정보를 얻고 각 grid 별 연산을 하는 식으로 구성되어있습니다.

Bounding box prediction

object detection 을 위헤서는 해당 object가 위치하는 지역을 b-box로 예측해내는게 필요합니다. yolo는 b-box 를 보다 안정적으로 예측하기 위해 anchor box 설정하고, 이를 기준으로 보다 효율적으로 예측하길 기대합니다

- anchor box

위 그림에서 b는 예측하고자하는 bounding box이고, p가 anchor box입니다. target값에 시그모이드를 곱해 b-box의 중심좌표가 1의 크기를 갖는 cell을 벗어나지 않도록 합니다.

-loss

세가지의 loss 모두 오차제곱의 합을 이용하고 있습니다. 먼저, b-box regression loss 의 경우 indicator function을 쓴것이 특징이라고 볼수있는데요, loss를 모든 b-box에 대해 연산하지 않고 object에 해당하는 b-box에 대해서만 연산한것이라고 합니다. 다음 object confidence loss는 예측한 object에 대한 loss를 의미합니다. object가 없어야하는 구간도 포함하는게 특징인데 여기에 r를 0.5로 곱해줌으로써 background에 대한 가중치를 낮게 주는것이 특징입니다. 여기서 C는 object가 있을 확률에 IoU(intersection over union)을 곱해준 값을 의미합니다.마지막으로 classification loss인데요, class별 확률값에 대한 오차제곱을 구한값을 사용합니다.

-anchor box size

yolo v3는 세개의 scale에 대해 각각 3개의 anchor box를 추출합니다. 이때, anchor box의 사이즈는 데이터의 가로세로 사이즈를 기준으로 k-means clustering 을 9개의 cluster로 진행하고, 그 결과 대표값들을 anchor box의 가로세로로 지정합니다.

Class Prediction

yolo v3은 하나의 박스에 복수의 객체가 존재하는 경우에 대한 예측 성능을 높이기 위해 class prediction 과정에 변화를 주었습니다. 저자는 multi class 이미지가 많은데 softmax 를 통해 단 하나의 class 만을 찾도록 하니 성능향상에 도움이 되지 않았다고 합니다. 따라서 저자는 각 class가 맞는지 아닌지 찾도록 하는 binary classification으로 바꿔서 접근하였습니다.

  • softmax → logistic
  • binary cross entropy loss

Feature extractor

앞서 1stage detector 는 input image에 대해 feature extractor를 적용한다고 말씀드렸는데, yolov3의 feature extractor는 다음과 같습니다. yolov2의 backbone에 layer를 추가하여 총 53개의 convolution layer 로 구성되어있어 DarketNet53이라고 불립니다.

Training yolov3

앞서 yolo v3은 세개의 scale에 대한 featuremap을 추출한다고 말씀드렸었는데, 개인적으로 이부분이 가장 이해하기 어려웠습니다. 416x416 이미지를 입력하여 52x52, 26x26, 13x13 크기의 feature map을 추출합니다. 그 다음 해상도가 가장 낮은 13x13 feature map을 1x1 과  3x3 conv layer로 구성된 FCN(fully convolutional network)에 입력합니다. 이후 FCN의 outputchannel이 512가 되는 지점에서 feature map을 추출한 뒤 2배로 upsampling을 수행하고 아래에 있는 feature map과 concatenate해주는데, 이 과정을 반복하고 loss-funciton을 통해 학습한다고 합니다.

다음은 yolov4에 대한 설명입니다. yolov4의 논문은 주로 다양한 아키텍쳐들을 위주로 다루고있습니다. yolo v4는 2가지 새로운 아키텍쳐들을 사용하였는데 BoF와 BoS입니다.

  1. BoF(bag of freebies) : 효과적이고 효율적인 학습을 위한 기법들 data augmentation, regularization, normalization, loss function
  2. BoS(bag of specials) : 정확도 향상을 위한 추가적인 모듈기법 enlarging receptive field, attention mechanism, feature integration

  • bounding box regression loss : DIoU
  • data augmentation : cutmix(한 이미지에 2개의 class), mosaic data augmentation(한 이미지에 4개의 class)
  • regularization method : dropblock(일정한 범위 out시킴)
  • nomalization of the network activation by their mean and variance : Cross-iteration Batch normalization(CBN)
  • activations : swish, mish(relu보다 gradient가 smooth함)
  • skip-connections : cross stage patial connections(CSP) (CSP : 기존의 cnn 연산량을 줄이는 기법, 학습할때 중복으로 사용되는 기울기 정보를 없앰으로써 연산량을 줄이면서도 성능을 높인다)

이렇게 다양한 아키텍쳐를 사용하여 이전 모델 대비 속도와 성능을 개선하였다고 합니다.