본문 바로가기
딥러닝

[딥러닝] UltraLytics : YOLO & Reboflow : Universe _ 20241107

by 황오독 2024. 11. 7.

1. UltraLytics : YOLO : 실시간 객체 탐지 모델

* YOLO : You Only Look Once

- 이미지를 한 번만 스캔하여 여러 객체들을 동시에 찾음.

- Darknet Framework 기반의 YOLO v3을 PyTorch로 반환

- YOLO v11

https://github.com/ultralytics

 

Ultralytics

Simpler. Smarter. Further. Ultralytics has 41 repositories available. Follow their code on GitHub.

github.com

https://docs.ultralytics.com/

 

Home

Discover Ultralytics YOLO - the latest in real-time object detection and image segmentation. Learn its features and maximize its potential in your projects.

docs.ultralytics.com

 

1) YOLO Quick Manual

# 라이브러리 설치
!pip install ultralytics

#####################################
## 10/30 기준 해당 설정 필요
import os
os.environ['WANDB_MODE'] = 'disabled'
#####################################
# 시각화가 default라서 에러가 발생함.
# disabled로 설정해놓으면 됨.

# 라이브러리 불러오기
from ultralytics import YOLO, settings

# 모델 선언 (모델 구조 및 가중치 설정)
model = YOLO()

# ~~to 'yolo11n.pt'...
# => pt : 파이토치로 저장 (structure, weights_모델 구조화, 가중치)
# => 이렇게 학습된 것을 가져다 쓰는거임
# => n : 나노 (n,s,m,l,x) 나노-스몰-미디움-라지-엑스라지
# => 작을수록 속도가 빠름 (그닥 가볍지만도 않음)

# 모델 학습 (학습에 관련된 설정 가능)
model.train(model='/content/yolo11n.pt'
			data='coco8.yaml',
            epochs=10
            )

# 모델 검증 (학습된 모델 성능을 검증, 생략 가능)
model.val()

# 예측값 생성 (데이터의 예측 결과 생성)
result = model.predict(save=True, save_txt=True)

 

model.train() 시 아래와 같은 내용이 함께 출력된다.

 

* 결과 (사진)

 

2) YOLO_SlowStart

# 라이브러리 설치
!pip install ultralytics

#####################################
## 10/30 기준 해당 설정 필요
import os
os.environ['WANDB_MODE'] = 'disabled'
#####################################

# 라이브러리 불러오기
# YOLO 설정
from ultralytics import settings

settings # datasets_dir 유심히! '/content/datasest'로 되어있음
         # 데이터 저장된 장소(기본 경로)
         # 실제로 보면 안만들어짐. 이슈가 발생할 여지가 다분함

settings['datasets_dir'] = '/content/'
settings

from ultralytics import YOLO

# 모델 선언
## YOLO()로 실행 시, default는 yolo11n.pt가 선택되고, detect를 수행한다.
model = YOLO(model='yolo11n.pt', task='detect')

# 모델 학습
model.train(model='/content/yolo11n.pt', # 굳이 넣는 이유? 나중에 잘 커스텀 학습된 모델을 쓸 때 명시해야 하기 때문!
            data='coco8.yaml',
            epochs=20,
            patience=5,
            # save=True,
            # project='trained',
            # name='trained_model',
            # exist_ok=False,
            pretrained=True,
            # optimizer='auto',
            # verbose=False,
            # seed=2024,
            # resume=False,
            # freeze=None
            )
            
# train set / val set (검증용) / test set (평가용)_image, label 파일 존재해야 함.
## 기본적으로 .train() 과정에서 val 옵션이 True로 되어 있음.
# model.val() => test set을 넣어줘야 함.

# 예측값 생성 (Inference 과정, 추론과정, 예측과정)
# 기존에는 없는, 완전 새로운 데이터를 넣어야 함! (test, val, test 모두 여기서 쓰면 안됨)
## conf와 iou는 하이퍼파라미터!!!!!!!!!!!!!

results = model.predict(source='https://images.pexels.com/photos/139303/pexels-photo-139303.jpeg',
                        # conf=0.5,
                        # iou=0.5,
                        save=True, save_txt=True, line_width=2)
                        
## MS COCO는 (<- ImageNet 같은 느낌) 선학습모델
## 80 classes object detecting을 푼 모델
## Object Detection 모델을 학습할 때
## 사용한 데이터셋

## YOLO는 MS COCO 데이터셋으로 학습한
## object detection 모델입니다.

## 그 결과물이 yolo11n.pt에 담겨있는 것

## 추론해보고 싶은 이미지의 주소를 넣음.

file_path = ''

results = model.predict(source=file_path,
                        # conf=0.5,
                        # iou=0.5,
                        save=True, save_txt=True, line_width=2)

 

2. Roboflow : Universe

- Roboflow에서 제공하는 AI 모델 훈련 데이터셋 무료 라이브러리

https://roboflow.com/

 

Roboflow: Computer vision tools for developers and enterprises

Everything you need to build and deploy computer vision models, from automated annotation tools to high-performance deployment solutions.

roboflow.com

 

1) 사용 방법

 

2) 데이터셋 내부 구조


데이터셋 폴더의 내부 구조 data.yaml(파일 내부 구조) 폴더별로 images/labesl 존재
images/labels 폴더 내부에는 동일한 이름의 이미지 파일과 텍스트 파일이 저장되어있으며,
labels 폴더의 txt 파일에는 클래스 정보와 Normalize 된 x,y,w,h가 있음.

 

3) 전체 코드

# 라이브러리 설치와 불러오기는 생략함

# 모델 선언
model_transfer = YOLO('yolo11n.pt')

# 모델 학습
results_train = model_transfer.train(model='/content/yolov11n.pt',
                                     ###################################################
                                     data='/content/test_project-2/data.yaml', # 경로와 클래스가 입력되어 있음.
                                     ###################################################
                                     epochs=10,
                                     seed=2024,
                                     pretrained=True,
                                     )

# Overriding model.yaml nc=80 with nc=5
# 80개 학습된 MS COCO를 football datasets (fine-tuning)

# 원하는 사진으로 예측하기
image_path = 'https://w7.pngwing.com/pngs/100/204/png-transparent-shooting-shot-players-football-thumbnail.png'

results_pred = model_transfer.predict(source=image_path,
                                      save=True,
                                      )

 

이외에 종합실습할때 혼자서 재활용품 사진으로 분류를 해보았는데, 시간이 없어 epochs를 5번밖에 안줬더니, 결과가 별로였다.

데이터 개수도 500개 정도밖에 안되고, 병이랑 페트병이 비슷하게 생겨서 그런듯ㅋㅅㅋ