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 내부 정 중앙에 위치하게 되므로 직관적이고 학습이 더 잘 이뤄진다.