졸과 첫 미팅후 숙제
요약하면
1. yolo 모델이 뭔지? 써야하는 이유?
2. yolo 쓰려면 pytorch를 쓸 줄 알아야 함 -> pytorch 알아오기
3. 실제 회사에서 사람수 카운트를 어떤식으로 하는지? (센서 사용 등)
4. 사람수 카운트하는 본질적인 이유 고민해오기
1번 문제에 대해 정리하였다.
YOLO는 You Only Look Once. 즉 한 번에 보고 바로 처리를 하겠다 라는 속도가 빠르다는 장점을 내세운 객체 검출 모델이다.
객체 검출은 사물이 어떤 것인지 분류하는 Classification과 사물이 어디 있는지 위치 정보를 나타내는 Localization문제로 나눌 수 있는데, YOLO는 이를 한 번에 하는 1-stage-detection 방법을 사용한다.
대략적으로 알아보자
입력 이미지(1)이 네트워크를 통과하면 2개의 데이터(2), (3)을 얻는다.
각각의 grid cell은 B개(B=2?)의 크기가 일정하지 않은 Bounding Box와 각 Bounding Box에 대한 confidence score를 갖는다. 신뢰도가 높을수록 굵게 박스를 그려 줌. (confidence score: 물체를 포함한다는 박스에 대한 예측이 얼마나 정확한지를 의미)
동시에 (2)에서와 같이 어떤 사물인지 classification작업이 동시에 진행. 각 그리드에서 해당 객체의 확률과 가장 높은 확률을 가진 클래스를 검출해 해당 그리드의 클래스를 확정한다.
각각의 바운딩 박스는 x, y, w, h와 confidence로 구성
(x, y): Bounding Box의 중심점
(w, h): 전체 이미지의 width, height에 대한 상대값
confidence: 예측 box와 실제 정답 사이의 IOU
IOU: 바운딩 박스의 위치 정확도에 대한 평가 도구. 예측한 바운딩 박스와 실제 물체의 바운딩 박스 두 개의 교집합을 총 너비로 나눈 값으로 수치가 클수록 정확도가 높다
각각의 그리드 셀은 conditional class probability를 가짐.
Conditional Class probabilty : Pr * P(Clsss[i] | Object)
평가 할 때 Conditional Class probablity와 confidence prediction을 곱하는데 이 점수는 class가 박스안에 존재하는지와 박스가 물체에 얼마나 적합한지 모두 포함
확정된 클래스의 확률이 threshold 이상인 그리드를 이용하여 bounding box를 그린다.
예시
이미지를 4X4 그리드로 나누고 B=2(각 그리드 셀마다 예측하는 바운딩 박스가 2개), 전체 고려하는 class 개수가 20개라고 가정하자.
첫 번째 예측된 바운딩 박스의 정중앙 좌표인 x, y 좌표와 바운딩 박스의 너비와 높이를 전체 이미지로 나눠 정규화한 w와 h(0~1사이 값을 가짐) 그리고 박스 내부에 물체가 존재할 확률 confidence score인 Pc까지 총 5가지 출력이 나오게 된다. 여기서 confidence score인 Pc는 Pr에 IOU를 곱해준 값이다. Pr은 해당 바운딩 박스 내부에 물체가 있으면 1 없으면 0 값.
마찬가지로 두 번째 바운딩 박스에 대해 예측한 5가지 값에 대해서도 텐서로 넣어준다.
마지막으로 그리드 셀에 있는 객체가 어떤 클래스인지 확률이 들어가게 된다Pr(Classi|Object): 물체가 바운딩 박스 내에 있을 때, 그리드 셀에 있는 객체가 i번째 클래스에 속할 확률.
이로써 하나의 그리드 셀에 대한 아웃풋이 나오게 되며, 이 과정을 모든 그리드셀(4 X 4)에 대해 적용시킨다.
그 결과 4 X 4 X 30의 아웃풋 텐서가 나오게 된다.
실시간 객체 탐지에 빠른 처리 속도와 높은 정확도 모두 충족시키는 것이 가능하다는 점 때문에 사용한다. Fast R-CNN이나 Faster R-CNN은 정확도는 높지만, 속도에서 차이가 많이 나 실시간으로 객체를 검출하기 힘들 수 있다. R-CNN계열과 YOLO의 FPS를 비교해보면 6배 정도 차이가 나는 것을 볼 수 있다.
YOLO v5가 v4에 비해 전반적으로 성능이 우수하다.
상황 별 적합한 모델 선택
속도, 성능의 Trade-Off를 고려하여 선택
(YOLOv3-tiny > YOLOv3-320 > YOLOv3-416 > YOLOv3-608 = YOLOv3-spp)
왼쪽에 있을수록 속도가 빠르고 요구 사양이 낮지만 정확도가 떨어짐
Detection 해야 하는 object의 크기에 따라 모델 종류 고려
⇒ 다른 제약 사항이 없다면 최신 버전을 사용하는 것이 좋음
YOLO 사용 예시