You Only Look Once: Unified, Real-Tim Object Detection 논문에 대한 정리 내용
논문 출저 : https://arxiv.org/abs/1506.02640
2025-01-28 1차 수정
요약
Introduction
- 현재 감지 시스템은 Classifier를 재구현하여 사물 인식에 활용하고 있음. 즉 Classification으로 사물을 분류한뒤 위치와 사이즈를 평가하는 방식으로 되어있음
- 최근의 접근접은 R-CNN과 같이 영역 접근 하는 방식으로 Potential bounding boex를 생성하고 Classifier를 실행 함. 그 후, 이미지 후처리를 통해 바운드 박스를 재정의하고 중복된 영역을 삭제하고 재 정의 된 박스를 기준으로 사물의 점수를 판단.
- 복잡한 파이프 라인 구성으로 인해 처리속도가 느리고 최적화 하기 힘든 문제가 발생 했음
You only look once (YOLO)
- 기존의 복잡한 R-CNN의 파이프라인을 단수화 시키고 단일 회귀 모델로 분류하기 위해서 Yolo 모델을 활용

- Yolo는 CNN을 활용하여 박스를 바운딩 하고, 분류 된 박스를 분류하는 알고리즘을 한번에 구현함
YOLO 장점
- 처리속도가 빠름
rame detection로 분류 자체를 단순화 시켰기 때문에 파이프라인을 복잡하게 짤 필요가 없음. Yolo로 Video에서 실행할 시 레이턴시가 대략 25ms로 우수함
- 모든 이미지 영역을 처리
슬라이딩 윈도우와 영역 제안 기반 기술과는 달리 YOLO는 훈련 및 테스트 시에 이미지 전체를 볼 수 있으므로 클래스 및 외관에 대한 맥락정보를 암시적으로 획득이 가능함. 기존 R-CNN의 경우 배경을 잘못읽어 오인식이 되는 경우가 있는데 Yolo는 그런 부분이 없음
- 일반적인 사물의 특성을 학습
실제 이미지와 그림을 학습시킬 때, 새로운 도메인이나 예상치 못한 입력에도 대응이 가능함
Unified Detection
- 객체 검출의 별개 구성 요소들을 하나의 신경망으로 통합
- 입력 이미지로 S×S 사이즈로 분리, 객체의 중심이 그리드 셀안에 위치 하면해당 그리드셀은 해당 객체를 감지하는 역할로 사용. 이미지 원본 크기에서 S×S 로 나눈 개별구간에서 오브젝트가 몇개가 있든 상관없이 대표적으로 하나만 선택된다고 보면된다.
- 개별 그리드 셀은 Bounding Box 와 Confidence score를 예상. 이 스코어는 어떤 사물이 박스안에 들어있는지와 박스가 예상하는것이 얼마나 정확한지에 대해서 평가함.
- 해당 논문에서는 Bounding Box가 2개가 사용
- 각 그리드셀 하나당 B×5+Classnum 의 데이터가 저장 된다고 보면 된다.
- 최종적으로 Class가 20개이고 바운딩 박스가 2개가 있다면, 2×5+20 으로 총 30개의 텐서로 바운딩 박스의 정보를 평가한다고 보면 됨.
- 이 스코어는 Pr(Object)∗IOUpredtruth 으로 표현됨. 사물이 없는 경우에는 0으로 표현
- IOU는 예측된 바운딩 박스와 실제 객체의 교차 영역을 전체 영역으로 나눈값
- confidence score를 예측된 상자와 실제 상자 사이의 IOU(Intersection over Union, IOU)와 같도록 설정

Bounding box
바운딩 박스는 아래의 5가지 예상치로 구성되어 있음
- (x,y) : 박스의 중심 좌표
- width, height : 전체 이미지에서 상대적인 크기
- confidence : 다른 박스들과 해당 박스의 상대적인 IOU
Grid cell
- 각 그리드 셀은 조건부 클래스 확률 C로 표현함. 이 확률은 그리드셀에 해당 사물이 들어 있는 확률을 계산함
Pr(Classi∣Object)
- 각 그리드셀당 확률의 집합으로 표현하고 Bounding Box의 수와 독립적으로 계산
Test
- 조건부 클래스 확률과 각 박스의 confidence predction을 곱하여 개별박스의 class-specific confidence score를 계산함

- 해당 클레스가 박스에 나타날 확률과 예측된 상자가 사물을 잘 맞는지데 대한 점수를 인코딩
Network Design

- CNN으로 데이터를 구현 후 Pascal VOC 검출 데이터셋으로 평가 진행
- 네트워크 초기 컨볼루션 레이어는 이미지의 특성을 추출하고 그 뒤 완전 연결 레이어에서 출력 확률과 좌표를 예측.
- 해당 모델에는 24개의 CNN과 2개의 완전 연결 레이어가 있음
- 객체의 빠른 검출을 위해 Fast YOLO로 훈련 더 적은 수의 CNN(9개)더 적은 수의 필터를 사용하는 신경망을 사용.
- 네트워크 크기를 제외하고는 Yolo 및 Fast Yolo 간에 모든 훈련 및 테스트 매개변수는 전부 동일함
- CNN에서 최종 출력은 7∗7∗30 사이즈의 텐서로 출력. 각각의 그리드셀에서 2개의 바운딩 박스와 해당 바운딩 박스에 대한 클래스 확률 및 박스 좌표를 인코딩
Training
- ImageNet 1000클래스 대회 데이터셋에서 컨볼루션 레이어 사전 훈련 진행
- 훈련은 첫20개의 CNN을 사용한 후 mean pooling 레이어와 FNN 레이어로 이어짐
(Figure3 에서 마지막 7730 Conn.Layer를 제외하고 트레이닝 한다고 보면 됨)
- Ren 등의 사전 훈련된 네트워크에 컨볼루션 및 연결레이어를 추가 하면 성능이 향상 되는것을 확인
- 4개의 컨볼루션 레이어와 2개의 랜덤으로 초기화된 완전 연결 레이어를 추가
- 검출에서는 높은 이미지 해상도를 필요하여 228∗228 size에서 448∗448 size로 네트워크 입력 해상도를 보간하여 진행
final layer
- 최종 레이어에서는 분류 확률과 바운딩 박스를 예상함
- 바운딩 박스의 너비와 높이를 이미지의 너비와 높이로 정규화 하여 0~1사이의 값으로 변환
- 바운딩 박스의 X및Y좌표를 특성 그리드 셀 위치의 오프셋으로 매개변수화 하여 0~1사이로 제한
- 가중치는 leaky Relu 함수 사용

Optimize
- 네트워크의 출력값의 Sum-squared error를 이용해서 최적화를 진행.
- Sum-squared error를 사용하는 이유는 최적화가 쉽다
- 평균 정밀도를 최대화 하기 어려운 문제가 발생함
- 위치 오차와 분류 오차를 동일 하게 가중
- 이미지의 대부분 셀은 사물을 포함하지 않기 때문에 confidence score를 0으로 밀어 버리는 문제가 있음. 이러한 문제 떄문에 학습 초기에는 그래디언트가 발산되어 학습 난이도 증가
- 위의 단점을 해결 하기 위해 객체를 포함하지 않는 상자의 위치 예측 손실을 증가시켜 confidence prediction를 줄일려고 함
- λcoord와 λnoobj라는 두 개의 매개변수를 사용
λcoord=5와 λnoobj=5 로 세팅
- 바운딩 박스의 사이즈와 관련 없이 동일하게 오류를 가중 시키는 문제가 발생. 큰 상자의 작은 편차가 작은 상자의 편차보다 덜 중요하다는것을 반영 해야됨.
- 각 바운딩 박스의 너비와 높이 대신, 바운딩 박스의 제곱근으로 예측함
Yolo Multibounding box Predict
- YOLO는 각 그리드 셀 당 여러 개의 바운딩 박스를 예측
- 훈련 시에는 하나의 바운딩 박스는 하나의 사물만 인식하도록 하여야 함
- 특정사물에서 IOU 값이 가장 높은 예측값을 가진 바운딩 박스 지정하도록 하여야함
- 각 Predictor는 특정 size,aspect ratios, 사물의 클래스, 전반적인 추론을 상향 시켜줌
Loss function

- 1iobj은 셀 i에 객체가 있으면 1로 표현
- 1i∗jobj 은 셀 i의 j번째 바운딩 박스가 Predictor로 해당 클래스에 대한 예측에만 관여를 한다는것을 나타냄
- 위의 두 상수를 사용하여 해당 클래스에 대해 관여가 되어 있을 경우에만 Bounding box error 좌표 오류에 대한 Loss function 연산을 진행
Trainning eporch
-
Pascal Voc 2007 및 2012의 훈련 및 검증 데이터 셋에서 약 135 에포크로 진행
Batch size = 64
momentum = 0.9
decay = 0.0005
-
learning rate는 epoch에 따라 변경
- 초기 epoch에서는 learning late를 10−3 에서 10−2로 점진적으로 증가.
(높은 학습률에서 시작하면 학습모델의 가중치가 발산을 하는것을 방지, 구체적인 epoch는 발산이 되지 않는 영역에서 지정할 필요가 있음)
- learningrate=10−2, 75 epoch를 훈련
- learningrate=10−3, 30 epoch로 훈련
- learningrate=10−4, 30 epoch로 훈련
-
과적합을 피하기 위해 Drop out과 데이터 증강을 사용
- 초기 connected layter 이후 Dropout = 0.5
- 이미지 학습셋 증강은
- 원본 이미지에서 최대 20% 까지의 범위에서 무작위 스케일링 및 변환을 진행
- HSV scale로 이미지를 변환하여 random하게 saturation과 value를 변환
inference
- 테스트 이미지에 대한 검출과 예측은 단일 네트워크 평가만 필요합니다.
- PASCAL VOC에서 네트워크는 이미지 당 98개의 바운딩 박스와 각 상자에 대한 클래스 확률을 예측합니다.
- YOLO는 분류기 기반 방법과 달리 단일 네트워크 평가만 필요하므로 테스트 시에 속도에서 이점
- S*S 그리드 분류은 바운딩 박스 예측에서 공간적 다양성을 제한함
- 기본적으로 어떤 그리드 셀에 객체가 속하는지 명확하며 네트워크는 각 객체에 대해 하나의 상자만 예측
- 일부 큰 객체나 여러 셀의 경계에 가까운 객체는 여러 셀에 의해 잘 로컬라이즈될 수 있습니다. 비 최대 억제를 사용하여 이러한 다중 검출을 수정할 수 있습니다.
- R-CNN이나 DPM과 마찬가지로 성능에 중요하지는 않지만, non-maximal suppression는 mAP에 2-3%를 추가합니다.
Limitation of Yolo
- 각 그리드 셀이 2개의 상자를 예측하고 하나의 클래스만 가질 수 있기 때문에 바운딩 박스 예측에 강력한 공간 제약이 있음. 이로 인해서 모델이 예측할 수 있는 인근 객체의 수를 제한함. 작은 개체가 여러개 있는 이미지에서 분류에 약점을 보임
- 바운딩 박스를 기반으로 학습하기 때문에 새로운 이미지나 종횡비가 바뀌는 이미지에 대한 것에 대한 일반화에 어려움이 있음
- 손실 함수가 바운딩 박스 Size에 관련없이 동일하게 처리함. 작은 바운딩 박스에서 작은 오류의 영향이 커지는 문제가 있음