[Object Detection] 컴퓨터 비전의 활용 사례

하성진·2022년 3월 14일
0

Semantic Segmentation

  • Dense classification, Per pixel classification와 같은 의미로 사용됨
  • 픽셀마다 이미지를 특정 라벨로 분류하는 작업
  • 자율주행(특히, 라이더 센서를 사용하지 않는 자율주행)에 많이 활용되고 있음

[사전지식 #1] Fully Convolutional Network

  • 위치 정보를 보존하고자 생성하는 네트워크
  • Segmentation의 목적은 이미지의 각 픽셀에 대해 클래스로 구분하고, 오브젝트 및 배경을 분할하는 것
    • 기존의 Fully Connected Layer에선?
      • 이미지가 컨볼루션과 풀링을 통과하여 Fully Connected Layer를 생성하여 분류 작업을 진행
      • 이럴 경우, 기존의 이미지에 대한 위치 정보가 사라짐, 하지만 Segmentation에선 위치 정보가 중요
  • 이를 방지하고자, Dense Layer을 없애, 인푹과 아웃풋 사이즈가 동일하게 만들고자 함
  • 이렇게 진행할 경우 파라미터 수는 동일하게 유지됨

[사전지식 #2] Deconvolution

  • upsampling을 진행하는 과정
  • 기본적으로, FCN은 어느 사이즈나 진행할 수 있지만, 일반적으로 서브샘플링 과정을 거쳐 아웃풋 사이즈(차원)이 감소됨
  • 따라서, 이를 다시 늘려주고자하는 과정
  • 패딩을 많이 줘서, 아웃풋을 확대하는 방법이기 때문에 근본적으로 역연산은 아님

FCN 논문 리뷰 - Fully Convolutional Networks for Semantic Segmentation

Object Detection

  • 바운딩 박스를 찾는 것

[Method #1] R-CNN

1) Selective Search를 활용하여 이미지 안에 약 2000개의 ROI를 뽑아내어 모든 같은 크기로 변경

2) 각 ROI별로 CNN을 통과하여 피처를 계산 후, 선형 SVM을 활용하여 분류를 진행

  • 하지만, 이렇게 진행할 경우 ROI(region of interest)마다 CNN을 진행해야 하기 때문에, 약 2000번을 진행해야하기 때문에 비효율적
  • 또한, 이와 같은 방법의 경우 multi stage 파이프라인으로, 모델을 한번에 학습이 불가

[Method #2] SPPNet

1) 이미지를 ROI를 기준으로 crop이나 warp하기전에, CNN을 통과시켜 피처맵 먼저 얻음
2) 이를 바탕으로, ROI 부분에 해당하는 텐서만 가져와서 분류를 진행

  • 이로써, CNN을 여러번 돌리는 수고를 하지 않아 작동시간 감소

[Method #3] Fast R-CNN

1) Selective Search를 활용하여 ROI(Region of Interest) 영역을 지정

2) 전체 이미지에 대한 CNN를 통과하여 피처맵을 추출

3) 각 ROI부분을 가져와 ROI 풀링을 진행하여 고정된 크기의 피처벡터를 생성

4) FC 레이어를 통과한뒤, 브랜치로 나눔

4-1) 하나는 softmax를 통과하여 Object 분류를 진행

4-2) 다른 하나는 bounding box regression을 통해 selective search로 찾은 박스를 조정

  • 이로써, 단일 파이프라인을 구축하고, 모델을 한번에 학습시킬 수 있게됨
  • 하지만, 여전히 Selective Search를 통한 ROI 영역 지정은 시간이 많이 걸림

(논문리뷰) Fast R-CNN 설명 및 정리

[Method #4] Faster R-CNN


  • RPN + Fast R-CNN 구조를 취하고 있음
  • RPN(Region Proposal Network)이란?
    • Selective Search 부분에서 걸리는 시간을 단축하고자, ROI 생성하는 네트워크도 GPU에 넣어 컨볼루션 레이어에서 생성하도록 하자는 취지
    • 아래 그림과 같이, CNN을 통과한 피처맵에서 RPN에 의해 ROI를 생성
  • 하지만, 이역시 상대적으로만 빠를 뿐, 실제 서비스에 활용하기에는 매우 느림

(논문리뷰&재구현) Faster R-CNN 설명 및 정리

[Method #5] YOLO(You Only Look Once)

  • 기존의 모델들은 복잡한 처리과정으로 Human Visual System을 모방하기엔 부족
  • 기존의 ROI를 지정한 이후, 분류를 진행하는 모델들과는 달리, 네트워크의 최종 출력단에서 ROI (여기선 Bounding Box)찾기 및 분류를 동시에 이뤄지는 방식 => 하나의 회귀문제로 바뀐 격
    • 이미지가 주어지면 S*S 그리드로 나눔
    • 각각의 셀(그리드)은 다음과 같은 2가지 역할을 진행
      • 각 셀안에서 B개의 바운딩 박스를 예측하고, 각각의 Bounding Box에 대한 존재여부에 대한 확률을 계산
        => 셀당 B개의 Confidence Score

        ConfidenceScore=Pr(Object)IOUpredtruthConfidenceScore = Pr(Object) * IOU_{pred}^{truth}
        (만약 Grid에 Object가 존재하지 않을 경우 0)

      • 각 셀이 C개의 Object중 하나일 조건부 확률을 계산
        => 셀당 C개의 Conditional Class Probability

        ConditionalClassProbability=Pr(ClassiObject)ConditionalClassProbability = Pr(Class_{i}|Object)

      • 각각의 Bounding Box는 x, y, w, h, confidence로 구성

        • x : grid cell 내의 bouding box의 중심 x좌표가 차지하는 비율(0~1, 중간일 경우 0.5)
        • y : grid cell 내의 bouding box의 중심 y좌표가 차지하는 비율(0~1, 중간일 경우 0.5)
        • w : 전체 이미지(각 셀 아님) 대비 bouding box가 차지하는 비율(0~1, 전체 width의 절반일 경우 0.5)
        • h : 전체 이미지(각 셀 아님) 대비의 bounding box가 차지하는 비율(0~1, 전체 height의 절반일 경우 0.5)
      • 물체 존재여부를 확인

      • 동시에, 각각의 셀은 C개의 클래스(라벨)에 대한 확률을 예측

    • SS( B*5 + C)
profile
배움의 발자취를 남기는 공간입니다

0개의 댓글