OpenCV 비전 실무18장 · OpenCV 전처리와 YOLO 연계4 / 21← 이전목차다음 →MetaContents

18장. OpenCV 전처리와 YOLO 연계

ultralytics 와 사전학습 모델

요리를 처음 배울 때 육수부터 직접 끓이지 않고, 잘 만든 육수 팩을 사서 시작할 수 있습니다. 맛의 바탕은 이미 되어 있으니 우리는 건더기와 간만 맞추면 됩니다. 사전학습 모델은 이 육수 팩입니다. 누군가 큰 데이터셋으로 오랫동안 학습시켜 둔 가중치를 받아, 우리는 불러서 쓰거나 조금만 더 가르칩니다. ultralytics 는 이 육수 팩을 끓이고 데우는 도구 한 벌입니다.

설치, 가중치 준비, 불러오기, 추론의 네 걸음을 이은 흐름도

그림의 네 걸음이 ultralytics 로 YOLO 를 쓰는 순서입니다. 패키지를 설치하고, 가중치 파일을 준비하고, YOLO("yolo11n.pt") 로 불러온 뒤, predict 로 사진을 넣습니다. 여기서 육수 팩이 가중치 파일 yolo11n.pt, 냄비와 불이 ultralytics 패키지입니다.

설치와 버전

설치는 setup.md 의 순서를 따릅니다. 과목 폴더의 requirements.txt 로 설치했다면 ultralytics 와 PyTorch 도 이미 들어 있습니다. 이 과정의 결과는 ultralytics 8.4.198, PyTorch 2.15.0(CPU 판), torchvision 0.29.2(CPU 판)에서 얻었습니다. PyTorch 는 신경망을 계산하는 바탕 패키지로, ultralytics 가 안에서 씁니다. 아래는 설치를 확인하는 뼈대입니다(구글 코랩에서는 !pip -q install ultralytics 하나로 설치합니다).

PowerShell
# 가상환경을 켠 상태에서, 아직 설치하지 않았다면 목록대로 설치한다(-r = requirement file)
python -m pip install -r requirements.txt
# 설치된 버전을 확인한다. show = 패키지 정보 보기
python -m pip show ultralytics

사전학습 모델 고르기

YOLO11 은 크기별로 다섯 판이 있습니다. 클수록 더 잘 찾지만 느리고 무겁습니다. 이 과정은 그래픽 카드 없는 PC 에서도 돌도록 가장 작은 yolo11n 을 씁니다.

판머리글자의 뜻성격
yolo11nnano(아주 작은)가장 빠르고 가볍다. 이 과정에서 쓴다
yolo11ssmall(작은)n 보다 조금 무겁고 조금 더 잘 찾는다
yolo11mmedium(중간)그래픽 카드가 있으면 쓸 만하다
yolo11l, yolo11xlarge, extra large가장 잘 찾지만 가장 느리다

yolo11n.pt 는 COCO 데이터셋의 80가지 물체로 학습한 가중치입니다. 80가지에는 사람, 자동차, 개, 의자뿐 아니라 apple(사과), orange(오렌지), banana(바나나) 같은 과일도 있습니다. 그래서 실습 1에서 1장의 과일 진열대 그림을 그대로 넣어 봅니다. 결과는 뜻밖인데, 실습 1에서 확인합니다. 볼트, 너트, 와셔는 80가지에 없으므로, 부품을 찾게 하려면 전이 학습을 해야 합니다.

라이선스와 불러올 때 생기는 일

확인할 것내용
라이선스ultralytics 의 코드와 가중치는 AGPL-3.0 입니다. 공부와 연구에는 자유롭게 쓰되, 고친 프로그램을 남에게 서비스하면 코드를 공개해야 합니다. 코드를 공개하지 않는 상업용 제품에 쓰려면 ultralytics 의 기업용 라이선스를 따로 알아봐야 합니다. 쓰기 전에 공식 페이지에서 조건을 확인합니다
가중치 파일교안의 data/yolo11n.pt(약 5.4MB)를 미리 받아 두었습니다. 파일이 없으면 YOLO("yolo11n.pt") 가 인터넷에서 받아 옵니다
긴 진행 글불러오기 전에 os.environ["YOLO_VERBOSE"] = "False" 를 두면 긴 진행 글이 줄어듭니다
cv2.imread 가 바뀜ultralytics 를 불러오면 같은 프로그램 안의 cv2.imread 가 한글이 든 경로도 읽도록 바뀝니다(교안 PC 에서 확인). ultralytics 를 불러오지 않은 프로그램에서는 여전히 한글 경로를 못 읽으니, 실습은 지금처럼 data 폴더의 상대 경로로 씁니다

아래 예시는 YOLO 를 부르지 않고, 가중치 파일이 제자리에 있는지만 확인합니다.

Python
from pathlib import Path

weights = Path("yolo11n.pt")
# stat().st_size: 파일 크기(바이트). 1024 × 1024 로 나누면 MB 가 된다
print(weights.exists(), round(weights.stat().st_size / 1024 / 1024, 1), "MB")

실습에서 YOLO 를 불러오는 코드의 뼈대는 아래와 같습니다. 실행은 실습 1에서 합니다.

출력
import os
os.environ["YOLO_VERBOSE"] = "False"     # 긴 진행 글 줄이기(불러오기 전에)
from ultralytics import YOLO

model = YOLO("yolo11n.pt")               # 사전학습 가중치 불러오기
results = model.predict("fruit_stand.png", imgsz=320, conf=0.25, device="cpu", verbose=False)
r = results[0]                           # 사진 한 장의 결과

주의할 점

  • 가상환경을 켜지 않고 설치하면 다른 파이썬에 설치됩니다. 1장에서 본 대로 줄 앞의 (.venv) 를 먼저 확인합니다.
  • ultralytics 는 PyTorch 처럼 큰 패키지를 함께 설치하므로 설치에 몇 분 걸리고 내려받는 양도 큽니다. 수업 전에 미리 설치해 둡니다.
← 이전 절18장 · YOLO 다시 보기다음 절 →18장 · 전이 학습