본문 바로가기

알아두면좋은IT상식

[딥러닝] YOLO(You Only Look Once) 객체 탐색 알고리즘

< 공부 전 나의 생각>**************************************************

세미나를 준비하기 전 YOLO 객체탐색 알고리즘, 크라우드 카운팅(군중 숫자 세기)에 대해서 공부를 해야 했다.

머신러닝에서 활용되는 기법중 하나라고 생각을 하였다. you only look once라는 단어의 의미에 맞게 "난 너하나만 본다"라는 의미로 보통의 객체인식은 1개의 이미지를 수천개로 분할하여 모델에 넣지만, YOLO는 단 1개의 이미지만  한번 사용하기 때문에 모델설계가 간단하고, 매우 빠른 처리속도를 가지고 있다.

 

따라서 실시간 콘서트장, 시위대 등 대규모 인파가 몰리는 곳에서 YOLO 알고리즘을 활용하여 인원파악, 예측경로, 사고위험도를 파악 하는데 사용하기 용이하다는 장점이 있다.(처리속도가 느리면 실시간 작업에는 활용할수 없다.)

 

<공부 중 고민>**********************************************************

version마다 어떤 차이를 보이는지 알고싶다. v5를 넘어선 PP-YOLO도 존재한다.

 

*용어조사하기*

CNN

R-CNN

Fast-CNN

Faster-CNN

DPM 

treshhold: 단순히 기준을 의미, treshhold>40 이면, 40보다 큰 수치는 모델이 True 라고 인식하는것과 같은 원리 이다.

 

*딥러닝 기반의 문자열 탐지법

SSD(Single Shot multibox detector)

FCN(Fully Convolutional Network)

 

<모델검증시 사용되는 기법>

정확도(Accuracy): 얼마나 잘 맞췄는가를 의미 --> 전체 데이터에 대한 올바른 결과의 비율

공식:(TP+TN)/(TP+FN+FP+TN)

 

 

정밀도(Precision): 탐지된 결과가 얼마나 맞는가? --> 전체 탐지된 결과중 올바르게 탐지된 결과의 비율

공식: TP/(TP+FP)

모델이 True라고 한것중 실제 True의 비율을 의미 *모델TRUE 기준*

 

#정밀도가 높아야 하는경우(FP가 감소되어야 함), 도둑이 감지되면 총을 발사 하는 AI가 있다고 하면, 확실하게 이 사람이 도둑이다 할때만 총을 발사해야 한다.

 

재현율(Recall): 얼마나 잘 탐지했는가? --> 전체 탐지 되어야 할 대상 중 실제 탐지된 대상의 비율

공식: TP/(TP+FN)

 

precision과 recall 모두가 높을수록 좋은 모델이다.

 

실제 True 중 모델이 TRUE 라고 한것의 비율을 의미 *실제TRUE 기준*

#재현율이 높아야 하는 경우: FN(맞는걸 틀리다고 하는 경우)를 낮추어야 한다. 가스가 누출되었는데 비상벨이 울리지 않는 경우를 의미한다.

 

이걸 바탕으로 정확도, 정밀도 ,재현율, F1 Score를 계산해보자

실제 계산 결과(개의 입장에서만)

mAP(mean average precision): 평균 정확도 계산 공식, 객체 탐지 에서 평가지표로 mAP를 활용한다. 이떼 IoU, Precision, recall이 활용된다. 아래의 이미지가 있다고 가정해보자 (초록색: 실제진리(Grund truth), 빨간색: 모델 예측값(bounding box))

IoU 수치가 0.3 이상이면 TP(맞는걸 맞다고 함), 그렇지 않다면 FP(틀린걸 맞다고 함)으로 분류한다.

Confidence(신뢰도)가 높은 box 부터 계산하여 누적된 Precision과 Recall의 값을 정리한다.

 

 

<F1 Score: 정밀도(Precision)와 재현율(Recall)의 조화평균>

조화평균을 쓰는 이유는?

영향력(Influence)이 큰 결과수치의 bias를 줄이는 목적으로 사용가능

조화평균의 기하학적 표기

서로 다른쪽의 base 라인으로 끝을 내릴떄 만나는 점이 조화평균수치이며, 작은쪽(Precision)에 더 가까운걸 알수 있다.

산술평균을 이용하는것보다 조화평균을 쓰면 큰 영향을 끼치는 성향(bias)을 줄일수 있는 장점이 있다.

F1 Score 계산 공식

 

IoU(Intersection over Union): 데이터셋에 대한 객체 검출하는 모델의 정확도를 측정하는 평가지표, 두개의 Bounding box가 얼마나 일치하는지를(교집합 부분) 확인하기 위해서 사용된다. 간단하게 (두 영역의 교집합 넓이)/(두 영역의 합집합넓이)로 쓸수 있다.

 

직접 YOLO 코드를 볼수 있으면 좋을것 같다

 

객체탐색 알고리즘의 정의를 알도록 하자

 

 

YOLO가 다른 객체탐색 알고리즘과의 차이점

YOLO 알고리즘은 다른 객체 탐지 모델과 비교해 다음과 같은 특징을 가지고 있습니다.

  1. End-to-end 학습 방식: YOLO 알고리즘은 입력 이미지를 한번에 하나의 네트워크를 통해 처리하며, 이를 통해 네트워크의 출력값은 객체의 위치 및 클래스 확률을 예측할 수 있다. 따라서 YOLO는 end-to-end 방식으로 학습되는데, 입력 이미지를 받은 후 객체의 위치와 클래스를 예측하는 과정이 한번에 이루어진다. 이는 다른 모델의 경우 RPN(Region Proposal Network)과 같은 별도의 구성 요소를 사용한 2단계(Object Proposal -> Object Classification)의 방식과 비교하여 속도 및 정확도를 향상시킬 수 있는 장점이 있다.
  2. 높은 정확도 및 빠른 속도: YOLO는 높은 정확도와 빠른 속도를 모두 만족하는 모델이다. 대부분의 GPU 환경에서 초당 45프레임 정도의 속도로 객체 탐지가 가능합니다. 또한, 주요 객체들의 크기나 모양이 다양할 때도 높은 정확도를 보입니다.
  3. 다양한 객체 탐지 가능: YOLO는 다양한 객체 탐지가 가능합니다. 다른 모델들은 보통 작은 객체에 대한 탐지 정확도가 낮은 경향이 있습니다. https://github.com/WongKinYiu/yolov3-dx12 해당모델 처럼 커스텀을 통한 다양한 작업이 가능하다는 점도 다른 모델보다 유리합니다.
  4. 다용도모델: YOLO 알고리즘은 다용도 모델로 개발되어 이미지, 비디오, 실시간 비디오 분석 등 다양한 응용 분야에서 사용됩니다.

< 공부 후 후기>*********************************************************

YOLO는 다양한 버전이 존재한다. ver1~ver5까지 나온것을 확인하였다. BUT version1~version3까지는 조셉 레드몬(워싱턴 대학 산하 PLSE 연구실 소속)씨가 주도적으로 맡았지만, 이후에 연구 포기를 선언하면서 version4와 version5는 다른 연구자가 이전 결과물들을 바탕으로 만들었다. 자율주행, 보안 및 감시, 스마트팩토리() 등 다양한 곳에서 활용이 가능

 

YOLO는 딥러닝 기반 객체 감지 알고리즘 기술로, 이미지에서 관심객체를 배경과 구분해 식별하는 자동화 기법으로 올바른 객체 감지를 위해서 경계박스를 설정해 객체의 상태를 나타내는 사물의 카테고리와 연관시킬 때 활용된다.

 

1-stage Detactor 라고도 불린다.

객체의 위치를 이미지 한번만 보고 예측하는 강력한 특징

간단한 처리과정으로 통합된 모델 사용

Faster R-CNN 보다 빠른 실시간 객체탐지 가능

 

YOLO v5 및 PP-YOLO도 존재한다.

 

YOLO 알고리즘의 작동 방식은 이미지를 그리드로 나누고 각 그리드 셀에 대해 바운딩 박스(Bounding Box, 객체탐지 모델이 예측한 결과를 의미)설정과 클래스 예측을 동시에 수행하며 객체 위치와 종류를 파악하는 방식으로 동작한다.

 

IoU계산 공식이 있는데, 이거 너무 어려운걸? -- > 교집합/합집합 개념으로만 알자

 

Ground truth: 실제 진리영역를 의미 (실제 결과가 참)

Bounding box: 모델이 예측한 영역

 

이때 mean average precision을 구할려면, 개별 클래스 AP(average precision)을 구한다. x축을 recall rate(재현률), y축을 (정밀도)로 두고 그래프를 2가지 방식으로 그릴수 있다. (이 그래프를 Precision & Recall curve 라고 부른다.) 이 그래프의 AUC(area under the curve)를 구하면 AP(average precision)이 되지만, 계산하는데 어려움이 존재해서 아래 2가지 방법을 계산하는데 사용한다.

 

참고로 이때 Confidences(신뢰도)가 가장 높은 BOX 부터 점을 찍이서 그래프를 그린다.

 

위의 내용을 바탕으로 점들을 그린 프리시전-리콜 커브

Confidences(신뢰도)가 높은것을 기준으로 점을 찍고 이어 나간 프리리콜커브 그래프

 

위의 그래프를 바탕으로 2개 방법을 통해서 AP를 계산한다.

 

interpolation이란? 

보간법이라고도 하며 새로운 점을 만들기 위해 수많은 점들을 평균화 하는것이다. 간단히 말해 두 점을 연결하는 방법을 의미한다.

 

방법1: 11-point interpolation --> 0.0 0.1 0.2 0.3 ... 1.0 까지의 recall를 기준으로한 점을 찍어 각각의 위치의 Precision을 구하고, 이들의 총합 / 11을 하여서 mean average Precision을 구한다.(mAP: 다중 클래스에 대한 성능척도, AP: 단일 클래스에 대한 성능척도를 의)

 

방법2: All-point interpolation --> 위에는 11개의 점들의 precision rate를 구하였지만, 이 방법은 모든 영역을 고려하는 것이다. 네모네모하게 그래프가 바뀌는데, 오른쪽에서 왼쪽으로 물이 중력에 의해 낙수된다고 생각하면 파악하기가 편하다.

오른쪽에서 왼쪽으로 낙수효과 발

이때 mAP = A1+A2+A3+A4  (각 면적들의 합 == mAP)가 된다

 

이렇게 YOLO 알고리즘의 정의, 기원, 작동방식, 성능척도(Precision, recall, mAP, F1 score)를 정리할수가 있다.

객체검출과 분류가 동시에 이루어 진다.

 

<Bounding box의 신뢰도(Confidence)를 계산하는 방법>

Objectness Score과 Class Confidence를 곱한 결과 이다.

 

Confidence = Objectness Score * Confidence

 

##Objectness Score

해당 셀이 객체를 얼마나 포함하고 있는지 정도를 나타내는 확률(객체의 존재 여부를 제공)

간단히 말해 박스에 객체가 있는지 없는지에 대한 정확도(물체가 있는지 없는)

 

##Class Confidence

클래스는 분류결과(카테고리)라고 생각하자

Bounding box가 특정 클래스에 속하는지를 나타냄(해당 클래스(카테고리)에 포함될 확률)

간단히 말해 객체가 특정 클래스 분류에 속할 확률을 의미한다

 

<YOLO 알고리즘의 버전별 발전>

YOLOv1:

-최초의 버전

-이미지를 그리드로 분할, 각 그리드셀에서 바운딩 박스와 클래스 확률을 예측하는 방식 사용

-작은 객체에 대한 정확도가 낮고, 큰 객체에 대한 위치 정확도가 떨어지는 문제가 발생

 

YOLOv2: v1의 단점을 개선하고 기능을 추가하였다.

-객체의 크기에 따른 발생하는문제는 Anchor box 개념과 다중스케일 특징 맵을 활용하여 다양한 크기와 비율의 객체를 처리할수가 있게 되었다.    # 앵커박스: 객체의 크기와 비율을 대표하는 사전정의된 box--> 이미지 그리드셀의 간격을 정하는데 사용이 된다.

-Darknet-19라고 불리는 더 깊은 네트워크 구조를 사용하여 성능을향상시킴

-다른 데이터셋인 coco데이터셋과 결합해 다중 클래스 객체 검출을 지원함(하나의 이미지에서 각기다른 여러개 객체 파악 가능)

 

YOLOv3

-Darknet-53 네트워크 구조 활용

-세 가지 다른 스케일의 특징 맵을 사용하여 객체를 검출하고,  각각의 스케일에서의 객체 예측을 개선

-다양한 크기의 바운딩 박스를 예측하기 위해 앵커 박스의 크기와 비율을 조정할수 있는 기능을 도입하였다.

 

YOLOv4

-CSPDarknet53이라는 새로운 백본 아키텍처를 도입하여 네트워크를 발전

-PANet(Pyramid Attention Network)를 사용하여 다양한 스케일의 특징 맵을 결합하고, 객체의 다양한 크기를 처리하는 데 도움이 되도록 함

-CIoU(Complete Intersection over Union) 손실함수를 사용하여 정확도를 향상(더 정교한 바운딩 박스 예측)

-데이터 확장 및 증강: Mosaic Augmentation과 데이터 증강기법을 도입하여 데이터다양성을 향상, 모델의 일반화 성능 개선

-객체의 크기에 따라 더 세부적인 튜닝을 할수 있는 객체 그룹화 기법을 사용하여 세분화된 학습을 도입

 

YOLOv5

-경량화 및 빠른추론: YOLOv5는 더 경량화도니 네트워크 구조와 동시에 더 빠른 추론 속도를 제공

-

 

버전업 과정을 보면 더 깊고 빠른 네트워크 구조, Bounding box설계법 향상(예측률 향상)에 관련이 있다는걸 알수있다.

 

<Average와 mean의 차이>

Average: 주어진 집합의 값들을 모두 더한후 전체개수로만 나눈 결과를 의미(일반적인 산술평균만 의미)

mean: 주어진 집합의 값들ㅇ르 모두 더한후, 값들의 개수로 나눈 결과를 의미

(조사한 샘플의 개수, 기하평균-조화평균-산술평균...들이 여기에 속함)

 

둘다 비슷하지만, 통계수학적으로 사용되는 단어는 mean이다.

 

알게된점: 흥미롭군요

 

참고 블로그 (감사합니다!!!!!!!!!!!!!!!!!!!!!!!!!!!)

https://velog.io/@kimkj38/Object-detection-metric-mAP-%EC%9B%90%EB%A6%AC-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

mAP(Mean Average Precision) 개념 이해하기

Object detection에 대해 공부를 하다보면 평가지표로 mAP라는 개념을 사용하는 것을 볼 수 있다. mAP에는 IOU와 Precision, Recall의 개념이 베이스로 깔려있길 때문에 함께 정리를 하였다.Intersectio over Union

velog.io

 

https://a292run.tistory.com/entry/mean-Average-PrecisionmAP-%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0-1

 

mean Average Precision(mAP) 계산하기

mean Average Precision(mAP) 계산하기 이전 글에서 mAP에서 객체 탐지 모델의 성능비교를 위해 사용한 mAP에 대해 좀 예제를 통해 알아보고자 한다. 1. Data 다음을 여러개의 객체가 존재하는 데이터에서 '

a292run.tistory.com

https://mickael-k.tistory.com/142

 

Probability score & Objectness(Confidence score)란?

yolo 시스템이나 기타 딥러닝 시스템에서 Probability와 Objectness 라는 것이 있다. 이 두개는 뭘까? Objectness Objectness는 이전에 한번 설명 한 적이 있다. 하지만 간단히 설명 하면, YOLO시스템을 통해 어

mickael-k.tistory.com