YOLO! 욜로! 아니죠 You Only Look Once!
이번에 특강으로 배운 욜로를 사용해보자!
머신러닝을 배우는 과정중에 제일 재밌던 시간인듯하다.
뭔가 코드를 넣었을때 딱딱 나와주는게 좋다.
이걸로 프로젝트도 한다고하니 열심히 정리해봐야겠다.
화.이.팅!
Yolo란?
You Only Look Once 의 약자로 Object detection 분야에서 많이 알려진 모델이다.
처음으로 one-stage-detection 방법을 고안하여 실시간으로 Object Detection이 가능하게 만들었다.
한 개의 네트워크에서 탐지를 원하는 물체의 영역(bounding box)와 이름을 표시합니다. 원리는 다음과 같습니다.
- 이미지를 입력으로 받습니다.
(한 장의 이미지이든 비디오이든 웹캠 스트림이든, 컴퓨터 캡쳐 화면이든 nparray로 치환할 수 있다면 뭐든지 받습니다.) - S x S 크기의 그리드로 이미지를 나눕니다. 각 그리드에서 예측을 한 후 이를 종합해서 bounding box를 구성합니다.
Object detection? 객체 탐지!
Object Detection는 컴퓨터 비전 기술의 세부 분야중 하나로써 주어진 이미지내 사용자가 관심 있는 객체를 탐지하는 기술입니다.
객체 탐지 모델을 만들기에 앞서, 우선시 되어야 할 과정은 바운딩 박스를 만드는 것 입니다.
바운딩 박스란 (X 최소값, Y 최소값, X 최대값, Y 최대값)으로 표현되는 타겟 위치를 사각형으로 표현한 것입니다.
Object Detection의 구조와 종류
백본(Backbone)은 입력이미지를 feature map으로 변형시켜주는 부분이다.
헤드(Head)는 Backbone에서 추출한 feature map의 location 작업을 해주는 부분으로, predict classes 와 bounding boxes 작업이 수행된다. 헤드는 크게 Dense Prediction과 Sparse Prediction으로 나누어진다.
Sparse Prediction을 사용하는 Two-Stage Detector: Predict Classes 와 Bounding Box Regression 분리 ex) R-CNN, R-FCN Dense Prediction을 사용하는 One-Stage Detector: Predict Classes 와 Bounding Box Regression 통합 ex) YOLO, SSD
넥(Neck) 은 Backbone 과 Head를 연결하는 부분으로, feature map을 정제하고 재구성한다.
Yolo 특징
1. 이미지 전체를 한번만 보는 것
R-CNN: 이미지를 여러장으로 분할하고 CNN 모델을 이용하여 이미지를 분석했다. 따라서 이미지 한장을 보더라도 여러장의 이미지를 분석하는 것과 같았다. 하지만 YOLO는 이러한 과정없이 이미지를 한 번만 보는 특징을 가지고 있다.
2. 통합된 모델을 사용하는 것
기존 Object Detectin 모델은 전처리모델 + 인공신경망 을 결합하여 사용했다. 하지만 YOLO에서는 위를 통합한 모델을 사용한다.
3. 실시간으로 객체를 탐지할 수 있는 것
기존의 R-CNN보다 6배 빠른 성능을 보여준다.
절차
input(이미지) → CNN → FC(Fully Connected) → PT(Prediction Tensor) 를 반복
- 이미지를 S*S의 그리드로 분할 (논문에서는 7*7)
그리드마다 하나의 객체를 예측한다. 미리 설정해 둔 경계를 통해서 객체의 위치와 크기를 파악한다. 여러 객체가 한 셀에 있으면 탐지를 못할 수도 있다. 각 Grid cell 은 조건이 있다.- B개의 boundary boxes를 예측하고, 각 box는 하나의 box confidence score을 가지고 있다.
- 예측된 box 수에 관계 없이 단 하나의 객체만 탐지한다.
- boundary box는 객체의 위치 (x,y), 객체의 크기 (w,h), box confidence score로 구성된다.
- box confidence score는 box가 객체를 포함하고 있을 가능성을 반영한다.
- C개의 conditional class probabilities를 예측한다.
- 탐지된 객체가 어느 특정 클래스에 속하는 지에 대한 확률
- B개의 boundary boxes를 예측하고, 각 box는 하나의 box confidence score을 가지고 있다.
- 이미지 전체를 신경망에 넣고 특징 추출을 통해 예측 텐서(Prediction Tensor) 생성
- S * S * (B*5 +C)
- 7x7 grids, 2 boundary boxes, 20 classes = 7* 7 * 30
- 이제 YOLO는 7730 텐서를 예측하는 CNN 네트워크를 구축해야한다
이렇게 오늘 OpenCV, Yolo 에 대해서 알아보았다.
추가로 사람인식하는 과정을 실습으로 해보았는데 그건 따로 정리해서 올리도록하겠다.
내일도 잘해보자 화이팅! (거의 화이팅무새)
'Sparta Coding Club > Today I Learned [TIL]' 카테고리의 다른 글
[TIL] #DAY - 031 - 로그인 기능 (내일배움캠프AI 3기, 풀지 못한 숙제(1)) (0) | 2022.10.17 |
---|---|
[TIL] #DAY - 030 - Many To Many 관계 (내일배움캠프AI 3기) (0) | 2022.10.17 |
[TIL] #DAY - 028 - 프로젝트 매니지먼트! (내일배움캠프AI 3기) (0) | 2022.10.13 |
[TIL] #DAY - 027 - 머신러닝의 회귀와 분류 (내일배움캠프AI 3기) (0) | 2022.10.11 |