본문 바로가기

AI

[Object Detection] YOLO ver.2

YOLO ver.2

  • COCO Dataset을 가장 많이 사용. 실제 세계관련 데이터 (Real World). Flickr의 사진을 가져다쓴다.
  • 실제 테스트는 416 * 416으로 진행. ver1은 학습은 224 * 224로 하고 448 * 448로 테스트 진행.
  • Better : 학습과 테스트의 사이즈를 동일하게 둔다. batch normalization 활용, anchor 사용, multi-scaling training
  • Faster : darknet-19 사용
  • Stronger : 카테고리 개수를 늘렸다. --> YOLO 9000 = 카테고리 수를 9000으로 늘렸지만 성능이 매우 떨어져 실제로 적용하여 사용하지 않음

Better

  • Use anchor boxes : recall 7% 상승
  • 최종 출력이 13 * 13 * 125 이므로 버전 1보다 더 작게 쪼갰음을 알 수 있다.
  • 모든 grid cell에서 좌측 상단을 기준으로 박스를 그린다.

anchors

  • anchor는 cheatting이다. 하지만, 실제 inference에서 성능감소는 없다. 따라서 anchor를 사용할 수 있는 것이다.
  • anchor 박스 개수는 5개가 가장 적당하다.
  • ver1에서는 49 * 2로 98개의 박스가 생성된 반면, ver2는 최종출력 결과가 13 * 13이므로 13 * 13 * 5개의 boundary box가 생성된다.
  • grid cell에서 박스의 좌측 상단을 센터로 찍고 anchor박스를 그대로 가져온다. 1차 가안이 나온 상태에서 현재 grridcell에서 얼마나 박스를 수정해야하는가를 예측한다. 박스 정보가 (x,y,w,h,c)일 때 w,h는 y=ex(지수부)공식을 활용
  • x,y축으로 cell 기준으로 이동하고 w,h는 1.2배 키우는 것이 최종 수정점.
  • 최종적으로 출력되는 125개의 채널은 (앞 5개는 박스정보+20개의 카테고리)의 5개의 bbox로 구성되어진다.

multi scaling training

  • 네트워크에 입력되는 이미지 사이즈를 multiple하게 가져간다.
  • Resolution(해상도)와 무관하게 모델이 학습을 진행하도록 하기 위함이다. 그 결과로 예측력을 높이려했다.
  • 이미지 사이즈는 10개 중 랜덤하게 들어간다. 320(32 * 10), 352(32 * 11), 416(32 * 12), 448, 480, 512, 544, 576, 608(32 * 19)
  • 랜덤하게 넣은 이미지 사이즈에 따라 최종 결과는 10 * 10, 11 * 11, 12 * 12... 19 * 19로 도출된다. 이미지가 클 수록 더 촘촘하게 쪼갠다는 의미.
  • boundary box의 개수는 n * n * 5로 나오며 n은 10부터 19의 값으로 들어간다.
  • 출력 결과가 달라져도 center 지점과 boundary box의 사이즈에는 영향을 미치지 않는다.
  • 필터 개수는 2의 배수, 이미지 사이즈는 32의 배수를 활용하면 후에 사이즈 관련 문제가 생기지 않는다.
  • 진행 과정
    • image data 크롤링해왔을 때, 이미지는 정사각형 형태가 아니다. 이 때, 비율을 그대로 유지한 상태로 448 * 448로 만들어야하는데 이를 위해 random crop을 사용한다. (448 * 448은 10개의 랜덤한 이미지 사이즈 중 하나를 임의로 설정한 것. 10개 중 하나 선택되어진다)
    • random crop은 가로, 세로 값 중 더 작은 값으로 crop하여 정사각형 형태로 만든다.
    • 그 후, 원하는 사이즈인 448 * 448로 resize한다.
    • random crop과 resize를 거친 데이터를 모델에 넣고 학습을 진행한다.
  • train에서는 다양한 이미지 사이즈로 학습하지만, test에서는 computation effective한 사이즈인 416 * 416로 진행한다.
    • 448도 computation effective를 만족하지만 416이 13 * 32로 center가 정 가운데의 grid cell 내부 정 중앙에 위치하게 되므로 직관적이고 학습이 더 잘 이뤄진다.
    • 448의 경우 center를 구분하는데 머신이 헷갈려하므로 416을 사용해야한다.
    • 정 중앙에 center가 딱 1개 찍혀야 더 좋은 예측이 가능하다.

'AI' 카테고리의 다른 글

[Object Detection] YOLO ver.3  (0) 2021.06.16
[Object Detection] YOLO ver1  (0) 2021.06.14
Semantic Segmentation 코드 구현  (0) 2021.06.12
Binary Classification  (0) 2021.06.11
Segmentation  (0) 2021.06.10