Abstract
- 객체 검출을 공간적으로 분리된 경계 상자와 관련된 클래스 확률로의 회귀 문제로 정의
- Single Pipieline으로 이루어져 있기 때문에 검출 성능을 End-to-End 최적화 가능
- 초당 45 프레임 실시간 이미지 처리
- 네트워크 크기를 줄인 Fast YOLO의 경우 초당 155 프레임 처리
Intro
- 전통의 방식
- 기존의 분류기는 (Deformable Parts Models, DPM, 2008년) sliding window 접근 방식을 활용하여, 분류기를 전체 이미지에 걸쳐 균일한 간격으로 실행합니다. - 알고리즘 기반
- DPM 보다 최근의 방식인 R-CNN(2014년)은 이미지에서 잠재적인 경계상자를 생성한 다음, 제안된 상자에 대해 분류기를 실행합니다. 분류 후 후처리를 통해 Bounding Box의 경계와 중복된 검출에 대한 처리를 해야하기 때문에 파이프라인이 각각의 처리에 대해 별도로 훈련해야되게 됩니다. 이는 복잡할 뿐만 아니라 최적화 하기 어렵고, 처리 속도 또한 느립니다.
- YOLO
- 이미지 픽셀로부터 Boudning Box(BBox) 좌표와 Class Probabilities 에 대해 직접 회귀 문제로 재구성 합니다.
- 단일 합성곱 네트워크가 여러 BBox 좌표와 해당 상자에 대한 클래스 확률을 동시에 예측합니다.
- 검출을 회귀문제로 정의하기 때문에 복잡한 파이프라인이 필요하지 않습니다.
- TitanXGPU 에서 배치 처리 없이 초당 45 프레임으로 동작합니다.
Fast YOLO는 초당 155 프레임을 처리합니다.
( 25 밀리 초 미만의 지연시간으로, 스트리밍 비디오를 실시간으로 처리할 수 있음을 의미합니다.) - Fast R-CNN 의 경우 이미지의 배경 패치를 객체로 오인하는 오류를 범하게 되는데, 이는 큰 Context를 보지 못하기 때문입니다. 반면에 YOLO는 Context를 encoding하는게 내재되어 있기 때문에 그러한 오류를 범하지 않습니다.
- YOLO는 빠른 대신 여타 S.O.T.A. 모델 만큼의 정확도를 따라잡지는 못했습니다. 특히 작은 객체의 경우 정확한 위치 지정에 어려움을 겪고 있고 이러한 Trade OFF에 대해 실험을 통해 자세히 연구 중 입니다.
https://www.youtube.com/watch?v=MPU2HistivI
Unified Detection
- 전체 이미지 특징을 사용하여 BBox 예측 ( 모든 BBox를 동시에 )
- 그리드 셀
- 입력 이미지를 SxS 그리드로 나누어 객체의 중심이 그리드 셀 내 위치하는 경우, 해당 그리드 셀은 해당 객체를 검출하는 역할을 담당합니다.
- 각 그리드 셀은 해당 상자에 대한 신뢰도 점수를 예측합니다.
- 신뢰도 점수는 예측한 상자와 실제 값 사이의 IOU (Intersection over Union) 으로 정의 됩니다.
- 각 경계 상자 값 정의
- x, y, w, h, 신뢰도
- (x, y) : 상자의 중심 좌표
- w, h : 전체 이미지에 대한 너비와 높이
- 신뢰도 : 예측한 상자와 실제 상자 사이의 IOU
- 테스트
- 조건부 클래스 확률과 개별 상자의 신뢰도 예측값을 곱하여 클래스별 신뢰도 점수를 얻는다.
- 해당 클래스가 상자에 나타날 확률과 예측한 상자가 객체에 얼마나 잘 맞는지를 모두 인코딩
Design
- 24 Conv. layers following 2 FCL
- 1x1 Conv. layer을 사용한 병목 구조 ( 파라미터 갯수 줄이기 )
- Final Output : 7 x 7 x 30 tensor
- PASCAL VOC, 20 label, 224 x 224 resolution.
Implementation
- 프레임워크
- Darknet 프레임워크 (학습과 추론 모두)
- 사전 훈련 모델
- ImageNet 1000 클래스 데이터셋으로 사전 훈련
- 위 Figure의 첫 20개 Conv. layers 사용, mean pooling layer과 FCL 추가
- 일주일 훈련
- ImageNet 2012, 사전 모델 정확도 88% ( 상위 5개 모델 과 비슷한 정확도 )
- 검출 모델
- Pretrained Model에 Conv. layer과 FCL 추가 하여 성능 향상 ( Ren et al.)
- 무작위로 초기화된 가중치를 가진 4 개 합성곱 층과 두 개의 FCL 추가
- 세밀한 해상도를 위해, 224x224 에서 448x448로 이미지 resize
- 예측
- 바운딩 박스 너비와 높이를 이미지의 너비와 높이로 정규화 ( 0 ~ 1 사이의 값 )
- 바운딩 박스의 x, y 좌표는 특정 그리드 셀 위치의 상대 주소로 표현 ( 0 ~ 1 사이의 값 )
- Sum Squard Error 를 최적화하는 것을 목적함수로 둠.
Loss Function
- 우려할만한 이슈
- 위치 결정 오차와 분류 오차를 동등하게 가중하는 것은 비 이상적일 수 있음
- 수많은 객체를 포함하지 않는 그리드 셀 ( 신뢰도 점수가 0에 근접한 )의 존재로 인해 객체를 포함하는 그리드 셀의 기울기를 압도할 수 있음.
- 모델의 불안정성을 유발할 수 있고, 훈련 초기 발산하게 할 수 있음.
- 큰 상자에서의 작은 오차는 작은 상자에서의 오차보다 중요성이 적음 (상대적으로)
- 하나의 그리드 셀당 여러 개의 경계 상자를 예측할 수 있음.
- 이슈 해결
- 객체를 갖지 않는 그리드에 대해 낮은 가중치 적용 (0.5),객체를 갖는 그리드는 높은 가중치(5) 적용
- 상자의 너비와 높이 대신 제곱근으로 예측
- Ground Truth 와의 IOU가 가장 높은 예측을 기준으로 책임있는 그리드에 대해 예측을 할당.
- 각 예측기는 특정 크기, 너비 높이 비 또는 클래스의 객체를 더 잘 예측하게 되어 전반적인 검출륭를 향상 시킵니다.
- 주의할 점
- 손실 함수가 해당 그리드 셀에 객체가 존재할 때만 분류 오차에 벌칙 부과
- 그리드 셀 내에서 가장 높은 IOU 갖는 예측기에만 경계 상자 좌표 오차에 벌치 부과
Hyper Parameter
- epochs : 10^-3 에서 시작하여 10^-2 까지 서서히 증가
- 높은 학습률에서 시작하면 불안정한 기울기로 인해 모델이 종종 발산함
- 이후 75 epoch 동안 10^-2로 훈련하다가, 다음으로 30 epoch 동안 10^-3으로 훈련, 마지막으로 30epoch 동안 10^-4로 훈련
- 드롭아웃 : 첫번 째 레이어 뒤에 0.5 드롭아웃 레이어 사용 (레이어 간의 상호 적응 방지)
- 데이터 증강
- 원본 이미지 크기의 최대 20%의 무작위 스케일링, 이동
- HSV 색 공간에서 무작위로 노출과 채도를 최대 1.5배 조정
Inference
- Pascal Voc 에서 네트워크는 각 이미지당 98 개의 BBox와 클래스 확률을 예측
- Grid Desigin 을 통해 공간적 다양성을 고려
- 네트워크는 객체 당 하나의 BBox만을 예측
- 일부 큰 객체나 여러 셀의 경계에 걸쳐 있는 객체는 여러 셀에 의해 오히려 더 잘 지역화 될 수 있습니다. 이에 대해 Non-maximal Suppression (NMS) 을 적용하면 이러한 점에 대해 개선할 수있고, mAP를 약 2~3% point 추가합니다.
Conclusion
다른 모델과의 조합 결과
- YOLO + Fast R-CNN
- 배경 탐지 오류를 크게 줄일 수 있었다.
- Fast R-CNN이 예측한 BBOX 에 대해 YOLO가 유사한 예측을 하는지 확인 후, 두 BBOX의 겹침과 예측된 확률을 기반으로 예측을 강화
- Voc 2007 테스트에서 Fast-RCNN 은 71.8%를 기록, 위 앙상블 적용 결과 75% 달성
- 그러나 이는 속도 이점을 활용한 예시는 아닙니다.
* 키워드 : Region Proposal, Feature Extraction + FPN + Network Prediction, IOU, NMS, mAPm Anchor Box
'DL' 카테고리의 다른 글
U-Net 실습1 - DataSet 다운 및 Split, Docker에서 GUI 설정하기 (0) | 2023.07.06 |
---|---|
[History] 2018, ImageNet을 기반으로 하는 이미지 분류 알고리즘 리뷰 (0) | 2023.07.02 |
순환 신경망 실습 (0) | 2023.06.25 |
[Transformer] Attention is all you need (보완 예정) (0) | 2023.06.22 |
[ResNet] Deep Residual Learning for Image Recognition (0) | 2023.06.22 |