인공지능 개발하기/기술 & 논문 리뷰

[논문 리뷰] YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)

선의공 2024. 3. 6. 21:21
반응형

 
논문: You Only Look Once : Unified, Real-Time Object Detection :
https://arxiv.org/pdf/1506.02640.pdf

 
 

이번 포스팅에서는 yolov1 에 대한 논문 리뷰를 해보려고 합니다.
 
학원에서 진행한 미니 프로젝트인
yolov1~yolov5 까지의 논문 분석 후
전이학습을 통한 yolov5 커스터마이징의 진행 과정을 정리해볼 예정입니다.
이 중 첫번째 포스팅인 yolov1 논문 리뷰입니다.
 


 
 

 
먼저 yolo 이전의 Detector 의 한 종류인 R-CNN Detector 계열들은 
가장 좋은 Detecting 성능을 자랑해왔습니다.
 
하지만 Localization(객체 위치탐지), Classification(탐지 객체 분류)에 대한 처리를
두번에 나눠서 진행하는 2-Stage-Detecting 방식을 사용하므로서
정확도는 높지만 Detecting 속도가 늦다는 단점이 있었습니다.
 
그래서 소개된 것이 바로 Yolov1 논문입니다.
욜로는 Localizaion, Classification 을 한 동작에 동시에 수행하므로서
 Detecting 속도를 높였다고 소개합니다.
 
 

 

모델을 훈련하기 위해 해당 이미지처럼
실제 이미지에 직접 라벨링을 해주고
이미지와 라벨링 정보를 훈련값에 같이 넣어주는데요,
이 라벨링 된 바운딩박스를 'Ground Truth Box' 라고 합니다.
 

 
모델은 훈련을 위해 Grid cell을 SxS개를 생성하고
각 Grid cell 마다 B개의 바운딩박스를 생성한다고 합니다.
생성된 바운딩박스는 중심점이 Grid cell에 위치하게 됩니다.
논문에서는 7x7개의 Grid cell.
2개의 바운딩박스를 생성해주었다고 합니다.
(이 값이 유동적인 값인지는 나와있지 않았습니다 )
 

 
각 모델이 예측한 바운딩박스에는 x,y,w,h,c 의 정보를 저장하고 있습니다.
 
x = 바운딩박스의 중심점의 x값
y = 바운딩박스의 중심점의 y값
w = 바운딩박스의 너비
h = 바운딩박스의 높이
c = confidence score 
입니다.
 
 

confidence score는 객체가 있는지 없는지 판단하는
Pr(Object) 값과 IoU라는 일치도 판단 지표를 곱해서 구해줍니다.
물체가 얼마나 일치하는지의
예측 물체 위치의 정확도에 대한 평가 지표입니다.
 

IoU란 Ground Truth Box(실제값)와 모델의 예측 바운딩 박스의
일치도를 평가하는 지표입니다.
Interssection over Union 의 줄임말입니다.
면적의 교차부분/ 면적의 합 이라고 생각하시면 됩니다!
 

 
위에서 설명한 방식이 객체의 위치를 탐지하는 역할의 방식이었다면,
conditional class probabilities는 객체의 종류를 판단하는 역할을 합니다.
각 GridCell 에는 모든 입력 이미지 데이터셋의 
Class(label)에 대한 확률을 갖고 있고
각 GridCell 마다 가장 큰 확률의 class를 객체의 종류로 예측합니다.
 

앞서 구한 객체의 위치 정보와 객체의 종류 정보를 곱해서
class specific confidence score을 구해 줄 수 있습니다.
Detector에 필요한 정확도, 객체정보에 대한 종합 점수라고 이해했습니다.
 

 

이 후 non-max suppression 알고리즘으로
여러 개의 객체 마다의 바운딩박스 중 가장 높은 점수의 
바운딩박스만 남기고 나머지를 지워주는 작업을 진행합니다.
class specific confidence score의
class 별로 바운딩박스를 정렬한 뒤 IoU의 기준으로
가장 높은 바운딩 박스를 남기고 지워줍니다.
 
여기서, 서로 다른 종류의 바운딩박스 2개가 많이 겹쳐있다면,
종류에 상관없이 IoU가 높은 
바운딩박스를 남기고 나머지는 지우므로
겹쳐있는 객체에 대한 정확성이 떨어질 수 있습니다.
 

 
NMS를 통과해 최종적으로 Detecting 된 결과입니다.
위 이미지는  아까 라벨링한 Ground Truth Box와 비슷하게
Detect 되었다고 볼 수 있겠네요. 
 

yolo의 네트워크 구성입니다. 
사실상 앞에 부분은 CNN 층, Convolutional Layer를 통과해
feature maps를 추출하는 역할을 하고(backbone 이라 부르더라구요)
Darknet이라는 프레임워크를 사용한 모델을 적용해주었다고 설명합니다.
이 부분은 전이학습된 네트워크인데요,
미리 훈련을 해놔서 어느정도의 이미지의 특징을
잡을 수 있도록 만들었습니다.
 
1x1의 Conv Layer 이 후
3x3 Conv layer가 오는 구조는 GoogLeNet에서 따온 아이디어라고 합니다.
yolo는 총 24개의 Conv Layer, 2개의 FC Layer를 갖습니다. 
 
전이학습 대상 데이터는 Imagenet dataset입니다.
이 이미지데이터는 224x224의 크기를 가지는데
yolo는 이 이미지를 448x448로 키워 훈련시켜서
높은 해상도의 이미지로의 Detect가 가능하도록
했다고 합니다.
 
output 은 feature maps 부분입니다.
이미지의 특징을 추출한 데이터입니다.
S*S*(B*5 + C)의 데이터개수를 가집니다.
SxS는 그리드셀의 개수,
B는 바운딩박스의 개수,
C는 데이터셋의 클래스 개수입니다.
모든 그리드 셀의, 바운딩박스 데이터 + 객체분류 데이터 개수를 가지고 있어
해당 식으로 표현할 수 있습니다.
 

 
 
yolo의 손실함수입니다.
Localization loss + Confidence loss + Classification loss 로 구성됩니다.
비교 대상은 실제 값인 Ground truth box와
모델의 예측값인 Bounding box 입니다.
Localizaion loss와 Confidence loss 는 객체 위치 손실 값입니다.
Classification loss는 객체 종류 분류에 대한 손실 값입니다.

앞에 붙은 람다부터 설명하겠습니다.
coord는 coordinate(객체의 위치), noobj : no object(객체가 포착되지않음)을 나타냅니다. 
yolo는 1-Stage-Detector로서 한번에 객체의 위치와 분류를 진행하므로서,
객체의 위치 정보와 분류에 대해 하나의 가중치를 가집니다.
 

위의 confidence score의 객체가 없는 경우에 0으로 수렴하게 되므로
나중에 역전파시 Gradient error가 발생하게 된다고 합니다.
그래서 패널티를 다르게 해 
영향을 받는 쪽의 Localizaion의 비중은 5를 곱해 크게 만들어주고,
영향을 주는 쪽의 Confidence 중 객체가 없는 loss에 0.5를 곱해 비중을 적게 만들어 주었다고 합니다. 
(비중을 주는 것은 곧 가중치를 주는 것이라고 합니다.)
 

위 시그마는 S^2 = 모든 그리드셀을 찾아다님
B = 각 그리드셀마다의 바운딩박스를 찾아다님

obj 보이시나요?
바운딩박스에 객체가 있는 경우 1을 반환한다는 수식입니다.

즉, 이 수식은 모든 바운딩박스에 대해서 객체가 존재하는 바운딩박스라는 뜻입니다.

width, height에 대한 loss 비교에는 루트가 붙었는데요,
바운딩 박스의 크기가 크다고 해서 로스가 커지는 오류를 방지하고자 루트를 씌웠다고 합니다.
 

실제 confidence 점수는 1 혹은 0이 될 것입니다.
모델이 예측한 confidence 점수와 비교하면서 손실도를 구합니다.
 

classification loss 부분의 수식입니다. 실제 클래스와 모델이 예측한 클래스 확률에 대한
손실도를 구하고 있습니다. 
 
 
 

yolo와 Fast R-CNN의 비교 분석입니다.
객체가 아닌 배경을 객체로 인식하는 Background error를 2배 감소시켰다고 합니다.
(그치만, 객체를 식별하는 error는 2배...증가한 것 같네요)
FPS (Frame per sec)은 2배 정도 증가되었다고 합니다.
 
그러나 논문에서는 작거나 겹치는 Object를 예측하지 못하고,
훈련 외적의 새로운 형태의  Bounding box를 예측하지 못한다고 합니다.
속도는 빠르지만 Detector의 정확도 수치인 mAP가 떨어진다고 합니다. 
 
그렇다면 정확도 비교 수치의 mAP란 무엇일까요??

먼저 TP, FP, FN, (TN도 있지만 요기서는 설명을 생략하겠습니다)를 알아야합니다.
 
모델이 예측한 Bounding box와 Ground truth box를 비교해볼때
이 두 값의 IoU가 0.5 이상이면 모델이 제대로 탐지한 경우 = True Positive = TP라고 합니다.
IoU가 0.5 미만이면 모델이 잘못 탐지한 경우 = False Positive = FP라고 합니다.
모델이 탐지하지 못한 경우가 있다면 False Negative = FN이라고 합니다.
 
precision 은 이미지에서 보이듯 TP/TP+FP
모델의 탐지한 경우인 (TP + FP) 중 제대로 탐지한 경우의 수치를 나타냅니다.
 
recall은 TP/TP+FN 
제대로 탐지한 경우와 탐지하지 못한 경우 중 제대로 탐지한 경우의 수치를 나타냅니다.
 
이 precision과 recall의 커브그래프를 그려보면
아래와 같은 형태가 되고

 
그래프의 아래 면적이 'AP'라는 지표가 됩니다.
Detector에서는 각 클래스마다 이 AP를 가지고 있습니다.
 
이 AP의 평균을 mAP라고 하고
앞서 말씀드린대로 Detector의 가장 중요한 수치가 됩니다.
 


 
이번 포스팅에서는 yolov1의 논문을 읽고
분석해보았습니다.
 
틀린부분 있으면 지적 댓글 부탁드립니다.

반응형