네이버 AI 부스트캠프 4기 : P-stage Object Detection 3

nask·2022년 11월 24일

Object Det 5강 : 1 stage Detectors

  • 기존 RCNN Family 등 2 stage detectors 들은 localization과 classification의 두 단계를 거치기 때문에 속도가 매우 느림

  • 1 stage detector는 localization과 classification을 한번에 수행하여 Real world에서 응용 가능할 정도로 빠름

  • 또한, 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높음(Background error가 낮음)

YOLO v1

  • 1 stage detector의 등장

  • Region proposal 단계 없이 전체 이미지에서 bounding box + 클래스 예측(맥락적 이해)

Network

  • GoogLeNet 변형

  • 24개의 conv layer로 특징 추출하고 2개의 fc layer로 bbox 좌표 및 확률 계산

Pipeline

  • 입력 이미지를 SxS 그리드 영역으로 나눔 (S=7)

  • 각 그리드 영역마다 B개의 Bounding box와 Confidence score 계산 (B=2)
    신뢰도(confidence) = Pr(𝑂𝑏𝑗𝑒𝑐𝑡) × 𝐼𝑂𝑈(𝑝𝑟𝑒𝑑,𝑡𝑟𝑢𝑡ℎ)

  • 각 그리드 영역마다 C개의 class에 대한 해당 클래스일 확률 계산 (C=20)
    conditional class probability = Pr(𝐶𝑙𝑎𝑠𝑠 𝑖|𝑂𝑏𝑗𝑒𝑐𝑡)


  • 하나의 그리드 cell에 해당하는 값으로 그림과 같이 5개의 정보를 담으며, 나머지는 class의 개수(20)만큼 class score 정보를 담음

  • 각 바운딩 박스의 confidence score와 class score를 곱해 최종
    score vectore 계산

  • 위 과정을 각각의 grid cell마다 반복하여 score vector들을 총 98개(2x7x7) 생성

  • 정해진 threshold(0.2)보다 작은 값을 가진 score는 0으로 set한 뒤 내림차순 정렬하고 NMS 적용

  • Loss는 Localization loss와 Confidence Loss, 그리고 Classification loss를 더해 구하며 각λ\lambda는 가중치임

  • Localization loss는 각 그리드 셀의 각 바운딩 박스 별로 오브젝트가 존재할 경우, 중심점의 위치에 대한 regression loss + width/height에 대한 regression loss의 합임

  • Confidence loss는 각 그리드 셀의 각 바운딩 박스 별로 오브젝트가 존재할 경우/존재하지 않을 경우에 대한 Confidence loss을 더한 값의 합임

  • Classification loss는 각 그리드 셀이 오브젝트를 포함할 경우의 mse loss의 합임

Merit

  • Faster R-CNN에 비해 6배 빠른 속도

  • 다른 real-time detector에 비해 2배 높은 정확도

  • 이미지 전체를 보기 때문에 클래스와 사진에 대한 맥락적 정보를 가지고 있음

  • 물체의 일반화된 표현을 학습

  • 사용된 dataset 외 새로운 도메인에 대한 이미지에 대한 좋은 성능을 보임

SSD

  • YOLO의 단점1 : 7x7 그리드로 나누어 bounding box prediction 진행하기 때문에 그리드보다 작은 크기의 물체는 검출이 불가능
  • YOLO의 단점2 : 신경망을 통과하며 마지막 feature만 사용하기 때문에 정확도 하락

=> Extra convolution layers에 나온 feature map들 모두 detection 수행하여 크고 작은 물체 모두 정확히 탐지

추가로, Fully connected layer 대신 convolution layer 사용 및 Default box 사용하여 속도 향상

Network

  • VGG-16(Backbone) + Extra Convolution Layers

  • 입력 이미지 사이즈 300 x 300

Multi-scale feature maps

  • 여러 개의 feature map을 사용하여 3x3 conv 진행
  • 5x5 feature map의 예시
  • 큰 feature map은 작은 물체 탐지에, 작은 feature map은 큰 물체 탐지에 유리

  • feature map의 각 cell마다 서로 다른 scale, 비율을 가진 미리 정해진 box 생성
    Faster R-CNN의 anchor box와 유사

  • Offsets는 center_x, center_y, width, height

  • NcN_c는 𝑛𝑢𝑚 𝑐𝑙𝑎𝑠𝑠𝑒𝑠 20 + 𝑏𝑎𝑐𝑘𝑔𝑟𝑜𝑢𝑛𝑑 (1)

Training

  • Hard negative mining 수행

  • NMS(Non maximum suppression) 수행

  • Localization loss로 Smooth L1, Confidence loss로 Softmax 사용

Yolo v2

  • V1보다 Better, Faster, Stronger

Better

  • Batch normalization

  • High resolution classifier
    : VGG를 448x448의 고해상도 이미지로 새롭게 finetuning함

  • Convolution with anchor boxes
    : K means clusters on COCO datasets(5개의 anchor box가 주어져 좌표값 대신 offset 예측하여 학습이 쉬움)

  • Fine-grained features
    : Early feature map의 low level 정보를 late feature map에 합쳐주는 passthrough layer 도입(26x26 feature map을 분할 후 결합)

  • Multi-scale training
    : 다양한 입력 이미지 사용(이미지 자체가 다른 것으로 multi-scale feature map과는 다름)

Faster

  • Backbone model
    : GoogLeNet → Darknet-19
    ▪ 마지막 fully conected layer 제거
    ▪ 대신 3x3 convolution layer로 대체
    ▪ 1x1 convolution layer 추가

Stronger

  • WordTree 구성으로 Classification 데이터셋(ImageNet), detection 데이터셋(Coco) 함께 사용(9418 카테고리)

    Ex. “요크셔테리어” = 물리적객체(최상위 노드) – 동물 – 포유류 – 사냥개 – 테리어(최하위 노드)

    ImageNet 데이터셋 : Coco 데이터셋 = 4: 1

    Detection 이미지 : 특정범주에 대해서는 classification loss도 계산
    ex. 개 이미지 : 물리적객체 – 동물 –포유류 – 개 에 대해서 loss 계산

    Classification 이미지 : classification loss만 역전파 수행 (IoU)

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 정보를 얻음

RetinaNet

Focal Loss

  • 1 stage detector의 문제점인 Class imbalance 문제(객체 영역보다 배경 영역이 훨씬 큼)해결

  • cross entropy loss + scaling factor

  • 쉬운 예제에 작은 가중치, 어려운 예제에 큰 가중치 두어 어려운 예제에 집중

  • Classification, Segmentation, Kaggle 등 다양하게 활용 가능한 loss

0개의 댓글