일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Crawling
- 파이썬 이미지 처리
- 파이썬
- YouTube
- sql eda
- Machine learning
- CCP자격증
- 뷰티 광고
- 데이터분석
- ASAC14일차
- ML
- EDA
- join
- pandas
- Python
- 크롤링
- deep learning
- cnn optuna
- JSON
- SQL
- 백준
- ASAC5기
- 머신러닝
- selenium
- Shorts
- ASAC
- DFS
- BFS
- text summarization
- 프로그래머스
- Today
- Total
낼름낼름 동동이
[ASAC 0620] yolo 이론 공부 1 본문
6월 20일의 기록
어제 좀 늦게 잤더니 바로 늦게 일어나 버렸다… 일찍 잠들자… 루틴을 바꾸면 컨디션이 확 안좋아지니까
오늘은 yolo 수업을 좀 들으면서 남은 시간에는 집중해서 딥러닝 프로젝트를 계속 이어서 해야지
YOLO
Object Detection의 대표적인 모델이다.
이 이미지를 보면 객체 검출 모델의 발전 과정을 확인해볼 수 있다.
이 중 YOLO는 조셉 레드몬에 의해 2015년 등장하게 되는데, 핵심 컨셉은 real time object detection 즉, 실시간 객체 검출이었다.
(yolo의 뜻도 You Only Look Once라는 뜻으로 한 번에 가능하다는 뜻을 내포..)
기존 방식인 2 stage 계열 같은 경우 객체를 검출하는데 시간이 조금 걸린다. 자율주행 자동차와 같은 실시간으로 사물이 어디에 위치하는지 파악되어야 하는 작업에서는 사용될 수 없다. 따라서 2 stage detection 방식의 느린 속도 때문에 이를 한 번에 하는 1 stage detection 방식이 나오게 되며 , 그 시초 모델이 YOLO다.
YOLO는 classification 과 Localization을 동시에 하여 실시간으로 객체의 검출이 가능하다는 점이 크게 달라진 부분인데, 그럼 이를 어떻게 할 수 있었을까?
- 2 stage Detector이렇듯 2번 딥러닝 모델이 돌기 때문에 2 stage라는 이름이 붙여졌다.
- 당연히 속도가 느리다.
- : 2 stage Detector는 이미지를 입력받으면 먼저 사물이 위치한 곳을 찾아내는 작업을 한다.(= Region Proposal) 그 후 해당 사물이 무엇인지 분류하는 작업을 진행한다.(= Classification)
- 1 stage Detector먼저 이미지를 입력받으면 이미지를 잘게 그리드 형태로 쪼개고 각 그리드에 대해 Detection을 진행하는데 이때 같은 사물이면 연결짓는 흐름으로 진행된다.
- : 위와 달리, 1 stage Detector는 딥러닝이 1번만 돈다.
1-Stage VS 2-Stage
우리가 1 stage Detector에서 주목해서 보아야할 점은 “Multi class를 object detection을 하는데 어떻게 1 stage로 했는가?” 이다.
아래 이미지가 yolo의 동작 원리를 설명한 이미지다.
1 Stage이므로 한 번에 2가지 동작을 진행하게 되는데,
- 먼저 사진이 입력되면 (1) 처럼 가로 세로를 동일한 그리드 영역으로 나눈다.
- 그 후 각 그리드 영역에 대해서 어디에 사물이 존재하는지 (3)처럼 바운딩박스와 박스에 대한 신뢰도 점수를 예측한다. 이때, 신뢰도가 높을수록 굵게 박스를 그려 준다. 이와 동시에 (2) 처럼 어떤 사물인지에 대한 classification작업이 동시에 진행된다.
- 그러면 굵은 박스들만 남기고 얇은 것들 즉, 사물이 있을 확률이 낮은 것들은 지워 준다.
- 최종 경계박스들을 NMS(Non- Maximum Suppression) 알고리즘을 이용해 선별하면 (4) 이미지처럼 3개만 남게 된다.
이렇게 흐름이 흘러가게 된다.
classification 전까지의 Yolo의 구조는 GoogleNet을 변형한 형태를 띄고 있다.
IOU 지표를 활용해서 bounding box와 실제 ground truth bounding box 가 겹치는 영역의 비율이 어떻게 다른지 확인을 해보자
이미지를 4X4 그리드로 나눈다 가정하고, (실제 논문에서는 7X7) 이때 각 그리드 셀마다 예측하는 바운딩 박스는 2개이며 전체 고려하는 class 개수는 20개로 가정, 첫 번째 바운딩 박스는 파란색 이때 예측된 바운딩 박스의 정 중앙 좌표인 x,y 좌표 그리고 바운딩 박스의 너비와 높이를 전체 이미지로 나눠 노멀라이즈 한 w와 h(0~1 사이의 값을 가진다) 그리고 박스 내부에 물체가 존재할 확률 Confidence score인 pc까지 총 5가지 아웃풋이 나온다.
Confidence score인 PC는 pr에 IOU를 곱해준 값이다. pr은 해당 바운딩 박스 내부에 물체가 있으면 1 없으면 0 값이다.
물체가 없을 때는 0이 되므로 상관없고, 물체가 있을 때는 IOU 값을 가지게 된다. 즉, 가장 겹치는 부분이 많은 곳을 찾아올 수 있다는 의미
📌 IOU (intersection Over Union)
여기서 IOU 지표란 바운딩 박스의 위치 정확도에 대한 평가 도구로 활용한다. 예측된 바운딩 박스와 실제 물체의 바운딩 박스 두 개의 교집합을 총 너비로 나눈 값이며 수치가 클수록 정확도가 높은 것이다.
즉, 박스 두개가 겹치는 면적이 클수록 정확하다는 의미를 가진다.
📌 YOLO 동작 과정 예시 (이어서 설명)
위에서 설명한 과정을 한번 더 진행하면 예측한 5가지 값에 대해 1차원 텐서로 넣어준다.
하늘색 박스(Pr)를 보면 그리드 셀에 있는 오브젝트가 어떤 클래스 인지 확률이 들어가게 된다. 이로써 하나의 그리드 셀에 대한 아웃풋이 나오게 되며, 이 과정을 모든 그리드 셀(16개)에 대해 적용시켜 준다.
그러면 최종적으로 4X4X30의 아웃풋 텐서가 나오게 된다.
왜 4x4x30인 이유는 4x4 그리드 셀 각각 마다 5개의 값을 예측하는 2개의 바운딩 박스와 (5*22) 거기에 예시로 들었던 20개의 클래스 일 각각의 확률인 20개가 들어가서 30개가 된다.
이렇게 YOLO는 동작하게 된다.
yolo에서 사용한 Network Design에 대해서 알아보면 최초 인코딩 과정은 GoogleNet의 구조로 영감을 받았다고 설명하고 있다.
대신 Inception 블록 대신 단순 컨볼루션으로 네트워크를 구성하였다. 총 24개의 conv layer와 2개의 fc layer로 구성되어 있다.
앞의 20개의 conv layer에 대해서는 1000개 클래스의 ImageNet 데이터셋으로 Pretrained 된 부분이고 뒤에 4개의 conv layer와 2개의 fc layer를 붙여서 Pascal VOC 데이터로 Fine tuning 시킨 과정을 거쳤다.
중간 노란색 부분에 1x1 reduction layer를 사용하여 연산량을 감소시키기도 하였다.
다음에는 Training Stage부터는 내일부터 계속..
'데이터분석 > 머신&딥러닝' 카테고리의 다른 글
[ASAC 0625] 딥러닝 프로젝트에 대한 회고 (0) | 2024.06.26 |
---|---|
[ASAC 0621] Yolo 이론 2 (0) | 2024.06.24 |
[ASAC 0619] Transfer Learning, Fine Tuning (0) | 2024.06.19 |
[ASAC 0603] ResNet 논문 리뷰 (0) | 2024.06.03 |
[ASAC 0529] CNN_Optuna & Image_Intro (0) | 2024.05.29 |