YOLOv8을 사용한 객체 탐지¶
사전 준비¶
- YOLOv8을 사용하기 위해 ultralytics 패키지를 설치 필요
- GPU의 유형 변경
- 코랩 노트북 -> 런타임 -> 런타임 유형 변경 -> 하드웨어 가속기에서 GPU 선택
YOLO (You Only Live Once)는 인기 있는 컴퓨터 비전 모델
YOLO는 실시간 객체 탐지를 위한 매우 인기 있는 알고리즘으로, 영상이나 이미지에서 사람, 차량, 동물 등 다양한 객체를 빠르게 탐지하고 분류하는 데 사용됩니다.
Ultralytics는 컴퓨터 비전 분야에서 특히 딥러닝을 기반으로 한 객체 탐지(object detection) 기술로 잘 알려진 회사.
- YOLO 모델 배포: 이미지 및 비디오에서 객체를 탐지하는 YOLOv5 및 YOLOv8 모델을 오픈소스로 제공.
v1에서 v9까지: 간략한 역사¶
2015 : YOLOv1 : 단일 단계 객체 감지 모델 도입
2016 : YOLOv2 : 고속 작동 (67-40FPS)
: 9000+ 객체 범주 감지
2018 : YOLOv3 : 효과적인 백본 네트워크
: 다중 앵커, 다중 규모 특징 추출
2020 : YOLOv4 : 모자이크 데이터 증대 기술 도입
2021 : YOLOv5 : 하이퍼파라미터 최적화
: 통합 실험 추적
2022 : YOLOv6 : 오픈 소스화
: 자가 증류 전략, AAT 전략 도입
2022 : YOLOv7 : 속도와 정확성 향상
: 당시 가장 빠른 객체 감지 모델
2023 : YOLOv8 : 다중 작업 지원
: 새로운 아키텍처 도입
2024 : YOLOv9 : 프로그래머블 그래디언트 정보 도입
: 더 작은 모델로 높은 성능 달성
In [1]:
!pip install ultralytics
Collecting ultralytics Downloading ultralytics-8.2.93-py3-none-any.whl.metadata (41 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.9/41.9 kB 1.1 MB/s eta 0:00:00 Requirement already satisfied: numpy<2.0.0,>=1.23.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (1.26.4) Requirement already satisfied: matplotlib>=3.3.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (3.7.1) Requirement already satisfied: opencv-python>=4.6.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (4.10.0.84) Requirement already satisfied: pillow>=7.1.2 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (9.4.0) Requirement already satisfied: pyyaml>=5.3.1 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (6.0.2) Requirement already satisfied: requests>=2.23.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (2.32.3) Requirement already satisfied: scipy>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (1.13.1) Requirement already satisfied: torch>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (2.4.0+cu121) Requirement already satisfied: torchvision>=0.9.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (0.19.0+cu121) Requirement already satisfied: tqdm>=4.64.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (4.66.5) Requirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from ultralytics) (5.9.5) Requirement already satisfied: py-cpuinfo in /usr/local/lib/python3.10/dist-packages (from ultralytics) (9.0.0) Requirement already satisfied: pandas>=1.1.4 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (2.1.4) Requirement already satisfied: seaborn>=0.11.0 in /usr/local/lib/python3.10/dist-packages (from ultralytics) (0.13.1) Collecting ultralytics-thop>=2.0.0 (from ultralytics) Downloading ultralytics_thop-2.0.6-py3-none-any.whl.metadata (9.1 kB) Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3.0->ultralytics) (1.3.0) Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3.0->ultralytics) (0.12.1) Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3.0->ultralytics) (4.53.1) Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3.0->ultralytics) (1.4.7) Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3.0->ultralytics) (24.1) Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3.0->ultralytics) (3.1.4) Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.3.0->ultralytics) (2.8.2) Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.1.4->ultralytics) (2024.2) Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.1.4->ultralytics) (2024.1) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23.0->ultralytics) (3.3.2) Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23.0->ultralytics) (3.8) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23.0->ultralytics) (2.0.7) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.23.0->ultralytics) (2024.8.30) Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->ultralytics) (3.16.0) Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->ultralytics) (4.12.2) Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->ultralytics) (1.13.2) Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->ultralytics) (3.3) Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->ultralytics) (3.1.4) Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch>=1.8.0->ultralytics) (2024.6.1) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib>=3.3.0->ultralytics) (1.16.0) Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.8.0->ultralytics) (2.1.5) Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.8.0->ultralytics) (1.3.0) Downloading ultralytics-8.2.93-py3-none-any.whl (871 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 871.6/871.6 kB 16.6 MB/s eta 0:00:00 Downloading ultralytics_thop-2.0.6-py3-none-any.whl (26 kB) Installing collected packages: ultralytics-thop, ultralytics Successfully installed ultralytics-8.2.93 ultralytics-thop-2.0.6
In [5]:
from ultralytics import YOLO
import cv2 # OpenCV 라이브러리를 불러오기
from google.colab.patches import cv2_imshow # from google.colab.patches import cv2_imshow: Google Colab 환경에서 OpenCV 이미지를 표시하기 위한 함수
# YOLOv8 모델 로드
model = YOLO('yolov8n.pt') # YOLOv8의 경량 모델
# 이미지 로드
img = cv2.imread('Dog_rawPixel01.jpg')
# 객체 탐지
# 로드된 YOLOv8 모델을 사용하여 이미지에서 객체를 탐지합니다. results 변수에는 탐지 결과가 저장
results = model(img)
# 결과 시각화
# plot() 함수는 탐지된 객체 주변에 경계 상자를 그려 이미지를 반환
img_with_detections = results[0].plot() # 첫 번째 결과를 시각화
# 결과 이미지 표시
cv2_imshow(img_with_detections)
0: 480x640 2 dogs, 42.6ms Speed: 2.7ms preprocess, 42.6ms inference, 1.2ms postprocess per image at shape (1, 3, 480, 640)
In [ ]:
from ultralytics import YOLO
import requests
import cv2
import numpy as np
from google.colab.patches import cv2_imshow
# 웹에서 이미지 가져오기
url = 'https://images.unsplash.com/photo-1503256207526-0d5d80fa2f47?q=80&w=1286&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D'
resp = requests.get(url).content
img_array = np.asarray(bytearray(resp), dtype=np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
# YOLOv8 모델 로드
model = YOLO('yolov8n.pt') # YOLOv8의 경량 모델
# 이미지 로드
# img = cv2.imread('path/to/your/image.jpg')
# 객체 탐지
results = model(img)
# 결과 시각화
img_with_detections = results[0].plot() # 첫 번째 결과를 시각화
# 결과 이미지 표시
cv2_imshow(img_with_detections)
Output hidden; open in https://colab.research.google.com to view.
In [ ]:
# https://images.unsplash.com/reserve/oIpwxeeSPy1cnwYpqJ1w_Dufer%20Collateral%20test.jpg?w=600&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8JUVCJUFDJUJDJUVBJUIxJUI0fGVufDB8fDB8fHww
In [ ]: