본문 바로가기

AstraGo

Vision 분야를 주도하는 객체 알고리즘 YOLO시리즈 알아보기

yolo-YOLO-컴퓨터비전-vision

오늘날 AI 분야는 컴퓨터 비전(Vision)를 빼놓고 말할 수 없게 되었어요. 머신러닝 및 신경망을 사용하여 작업에 영향을 미칠 수 있는 결함과 문제를 컴퓨터가 미리 식별해 인간 보다 더 빠르게 작동할 수 있게 만들어주죠.

 

이처럼 컴퓨터 비전은(Computer Vision), 컴퓨터가 이미지와 비디오를 통해 시각 정보를 인식하고 해석함으로써, 시각적 데이터를 고루 이해하고 분석하는 것을 목표로 하는데요! 이런 컴퓨터 비전 분야에는 다양한 알고리즘과 머신러닝 기술을 통해 이루어져요. 그 중 이미지 분류와 객체 검출은 비전 분야에서도 가장 대표적인 사례로 꼽을 수 있는데요!

 

지난 콘텐츠에서 소개해드린 YOLO모델에 이어, 이번 콘텐츠에서는 버전별 객체 알고리즘과 AstraGo에서의 활용 방법을 함께 알려드리는 시간을 가져보겠습니다. 오늘은 그 중에서도 AstraGo에 탑재되어 있는 SOTA 모델이 YOLOv5와 YOLOv8에 대해 비교해보고, 데이터를 준비하는 방법에 대해 소개해드리려 합니다.

 


YOLO, 다시한 번 간단하게 소개해주세요.

yolo-YOLO-컴퓨터비전-vision-objectdetection
이미지 출처: BASIC AI

 

YOLO(You Only Look Once)는 Object Detection 모델 중 하나로, 빠른 속도와 정확도를 가지는데요. Only Look Once라는 뜻처럼 단일 네트워크 패스를 통해 처리해 객체의 위치와 분류를 동시에 예측할 수 있다는 특징을 가져요. 특히 동영상처럼 실시간 객체 인식과 검출에 아주 유리한데요. YOLO 모델은 현재 YOLOv1부터 YOLOv8까지 버전별로 출시되며, 다양한 응용 분야에서 사용되고 있어요.

 

▼ YOLO 알고리즘과 객체 탐지 원리 알아보기 ▼

 

YOLO 알고리즘의 역사와 버전별 특징

YOLO 시리즈는 객체 감지 분야에서 많이 사용되는 딥러닝 모델로, 2016년 YOLOv1로 최초 시작해 매해 시리즈를 출시하면서 네트워크 구조와 학습 방법을 개선하고, 검출의 정확도와 속도를 향상하고 있답니다!

 

버전이 높아질 수록, 객체 검출 정확도는 물론이고, 알고리즘의 효율을 높일 수 있도록 다양한 시스템을 탑재하고, 객체 감지, 인스턴스 세분화 및 이미지 분류 모델을 훈련하기 위한 통합 프레임워크로 구축되었어요.

 

 

yolo-YOLO-컴퓨터비전-vision-objectdetection
이미지 출처: Geeks for Geeks

 

YOLOv1: 최초의 YOLO 모델로, 전체 이미지를 그리드로 나누고 각 그리드에서 객체를 탐지해요. 약 45FPS로(Frames Per Second)속도가 빨라 실시간 처리에 적합하다는 장점을 가지고 있지만, 작은 객체 탐지에는 성능이 떨어진다는 한계가 있어요.

 

 

YOLOv2: 때문에 v2에서는 v1의 성능을 개선하고 다양한 크기의 객체를 탐지할 수 있도록 앵커 박스를 도입했어요. 이를 통해 다양한 비율과 크기의 객체를 더 잘 탐지할 수 있게 되었어요. 또한 Batch normalization, finer resolution 등 기법들이 적용되어 더 많은 데이터셋을 훈련시킬 수 있게 되었어요!

 

 

YOLOv3: v3에서는 Multi-Scale detection의 다중 스케일 예측을 도입하여 다양한 크기의 객체를 더 잘 탐지할 수 있어요. 또한, 새로운 백본 네트워크인 Darknetq-53을 사용하여 객체의 클래스 수에 상관없이 다중 스케일에서 예측할 수 있도록 구조적으로 개선되었답니다.

 

 

YOLOv4: v4부터는 본격적으로 최신 기술과 기법을 접목하여 높은 정확도와 속도를 동시에 제공할 수 있는데요. 다양한 데이터 증강 기법과 신경망 최적화를 통해 높은 효율성을 보여주고, 60 FPS 이상의 처리 속도로 실시간 애플리케이션에 적합하게 되었어요.

 

 

YOLOv5: 4시리즈를 지나 5시리즈부터는 더 큰 변화가 있었어요. 공식 YOLO 알고리즘이 아닌, Ultralytics에서 개발되며, PyTorch 기반으로 구현되었어요. 이때 다양한 모델 크기(S/M/L)의 다양한 성능 옵션은 기본으로 제공되고, 내장된 데이터 증강 및 간편한 배포 옵션으로 사용자가 쉽게 활용할 수 있어요. 특히 v5는 높은 속도와 정확도는 기본이고, 동시에 코드의 유연성이 향상되었어요.

 

 

YOLOv6: YOLOv5의 후속 모델로, 실시간 객체 탐지 성능과 효율성을 더욱 개선했는데요. 더욱 향상된 모델 구조와 경량화를 통해 성능을 극대화시키고, 모바일 및 엣지 디바이스에서의 효율성이 강조된 모델이에요.

 

 

YOLOv7: v7부터는 효율성과 정확도를 개선하기 위해, Dynamic Head와 Model Scailing의 혁신 개념을 도입했는데요. 객체의 크기와 밀집 상황에 따라 더 많은 조정을 지원하여, 실시간 영상 처리에서 두각을 나타내기 시작했어요. 특히 IoT 및 엣지 컴퓨팅 환경에서 빠른 응답 속도를 자랑한답니다!

 

 

YOLOv8: 마지막으로 YOLOv8은 YOLO 시리즈의 가장 최신 버전 모델이에요. 여기에는 새로운 아키텍처와 훈련 기법이 적용되어 다양한 객체 탐지 작업에서 우수한 성능을 발휘하는데요. 작은 물체와 복잡한 장면에서도 높은 탐지 성능을 제공하여, 높은 AP(Average Precision)값을 기록했어요! 특히 v8은 보다 직관적인 API 구현 방식으로 사용자들이 쉽게 접근할 수 있도록 설계되어, 연구자와 엔지니어들이 기존 코드에 빠르게 통합할 수 있다는 장점을 가지고 있어요.

 

 


AstraGo에서 사용되는 YOLO 모델

yolo-sota모델-astrago-아스트라고
이미지 클릭 시, 아스트라고 페이지로 이동

 

앞선 시리즈 변화에 따라, YOLO 모델은 정확도와 속도, 유연성을 모두 강화하여 실시간 객체 검출 분야(Object Detection)에서 중요한 역할을 하고 있어요. 그중 AstraGo는 YOLOv5와 YOLOv8을 허브에 지원하고 있는데요! AstraGo Hub에서 지원하는 모델의 목록으로 즉시 실행 가능한 ML 모델의 엔드투엔드 YAML 구성을 확인할 수 있어요.


AstraGo에서는 허브 목록에 있는 YOLO모델을 통하여, 더욱 빠른 워크로드 생성이 가능해요. 아래의 프로젝트 가이드에 따라, 워크로드를 생성하고 모델 학습을 진행할 수 있어요.

 
Project Guide
1️⃣ 일상적인 문제나 업무상의 문제를 해결하기 위해 이미지나 영상에서 감지하고자 하는 대상(Target)을 선택해요.

2️⃣ 모델 학습을 위한 데이터를 확보해요. 공개 데이터셋이나 대상이 포함된 이미지와 영상을 수집해요.

3️⃣ 수집된 이미지와 영상을 분석하여 대상을 감지하고 해당 특징을 기록해요.

4️⃣ 노이즈(잔상, 흐림, 초점 문제, 먼지, 반사)로 인해 대상의 특징이 정상 데이터에 비해 현저히 낮을 경우,
전처리(preprocessing) 과정을 통해 보정하거나 제거합니다.

5️⃣ 전처리된 데이터를 분석하여 데이터 가공 기준을 정립하고 필요한 경우 별도의 문서를 작성합니다.

6️⃣ 데이터 가공 기준에 따라 수집된 데이터를 가공하고 검수하며, 모델 학습을 위한 입력 형식에 맞게 라벨링 주석을 변경합니다.

7️⃣ 모델을 학습하고 결과를 분석합니다.
 

1. 데이터셋 준비

가장 먼저, YOLOv5 또는 YOLOv8 모델을 학습시키기 위해서는 가공된 학습 데이터가 필요해요. 학습 데이터는 이미지 파일과 해당 이미지에 대한 객체 검출 대상이 라벨링 된 주석(Annotation) 파일이 필요합니다.

■ 파일 구조: 다수의 데이터가 필요하므로 학습을 위한 데이터셋을 다음과 같은 형태로 구성해요.

 

1.데이터셋에 data.yaml 파일 생성

train: /tmp/datasets/train/images
val: /tmp/datasets/valid/images
test: /tmp/datasets/test/images


nc: 3
names: ['football', 'player', 'referee']


roboflow:
workspace: roboflow-100
project: soccer-players-5fuqs
version: 2 license: CC BY 4.0
url: https://universe.roboflow.com/roboflow-100/soccer-players-5fuqs/dataset/2

 

2. 데이터셋 내에 train, valid, test 폴더로 구성하여 각 폴더에 이미지 및 주석(Annotation) 파일 업로드

yolov8_sample_datasets
├── data.yam
├── test
│ ├── images
│ │ ├── 0000001000_v1.png
│ │ ├── 0000001001_v1.png
│ │ ├── 0000001002_v1.png
│ │ ├── 0000001003_v1.png
│ │ ├── 0000001004_v1.txt
│ │ └── ...
│ └── labels
│ ├── 0000001000_v1.txt
│ ├── 0000001001_v1.txt
│ ├── 0000001002_v1.txt
│ ├── 0000001003_v1.txt
│ ├── 0000001004_v1.txt
│ └── ...
├── train
│ ├── images
│ │ ├── 0000002000_v1.png
│ │ ├── 0000002001_v1.png
│ │ ├── 0000002002_v1.png
│ │ ├── 0000002003_v1.png
│ │ ├── 0000002004_v1.png
│ │ └── ...
│ └── labels
│ ├── 0000002000_v1.txt
│ ├── 0000002001_v1.txt
│ ├── 0000002002_v1.txt
│ ├── 0000002003_v1.txt
│ ├── 0000002004_v1.txt
│ └── ...
└── valid
├── images
│ ├── 0000003000_v1.png
│ ├── 0000003001_v1.png
│ ├── 0000003002_v1.png
│ ├── 0000003003_v1.png
│ ├── 0000003004_v1.png
└── labels
├── 0000003000_v1.txt
├── 0000003001_v1.txt
├── 0000003002_v1.txt
├── 0000003003_v1.txt
├── 0000003004_v1.txt
└── ...

2. 학습 파라미터

 
파라미터
int/float/str
설명
예시
data_dir
str
데이터셋 경로
/DATA/yolo_dataset/train, val, test
image_size
int
입력 이미지 사이즈, 입력한 수치대로 resize
select: 320 512 640 768 960 1280
epochs
int
전체 데이터셋이 네트워크를 통해 전달되고 학습되는 횟수
100
batch_size
int
select: 1, 2, 4, 8, 16, 32
8
learning_rate
float
모델의 가중치를 업데이트하는 데 사용되는 스텝의 크기
0.01 or 0.001 …
save_model_dir
str
학습된 모델 저장경로

3. 결과 확인

1. Metric

Object detection에서 성능 평가 지표는 모델이 얼마나 잘 객체를 탐지하고 분류하는지를 측정하는 데 중요합니다. 주요 평가 지표로는 정밀도(Precision), 재현율(Recall), AP(Average Precision), mAP(mean Average Precision) 등이 있습니다. 이 지표들은 모델이 생성한 예측이 얼마나 정확한지(정밀도), 모델이 실제 객체를 얼마나 잘 찾아내는지(재현율), 그리고 전반적인 성능(평균 정밀도)을 평가합니다.

 

2. Results

학습된 결과파일인 모델의 가중치 {저장파일명}.pt는 별도 다운로드 가능합니다.