Python μ¬μ©λ²
YOLOv8 Python μ¬μ© μ€λͺ μμ μ€μ κ²μ νμν©λλ€! μ΄ κ°μ΄λλ 물체 κ°μ§, μΈλΆν λ° λΆλ₯λ₯Ό μν΄ Python νλ‘μ νΈμ YOLOv8 μ μννκ² ν΅ν©νλ λ° λμμ΄ λλλ‘ μ€κ³λμμ΅λλ€. μ¬κΈ°μμλ μ¬μ νμ΅λ λͺ¨λΈμ λ‘λ λ° μ¬μ©νκ³ , μ λͺ¨λΈμ νμ΅μν€κ³ , μ΄λ―Έμ§μ λν μμΈ‘μ μννλ λ°©λ²μ λ°°μλλ€. μ¬μ©νκΈ° μ¬μ΄ Python μΈν°νμ΄μ€λ YOLOv8 μ Python νλ‘μ νΈμ ν΅ν©νμ¬ κ³ κΈ κ°μ²΄ κ°μ§ κΈ°λ₯μ λΉ λ₯΄κ² ꡬννλ €λ λͺ¨λ μ¬λμκ² μ μ©ν 리μμ€μ λλ€. μ§κΈ μμν΄λ³΄μΈμ!
Watch: λ§μ€ν°νκΈ° Ultralytics YOLOv8 : Python
μλ₯Ό λ€μ΄, μ¬μ©μλ λͺ μ€μ μ½λλ§μΌλ‘ λͺ¨λΈμ λ‘λνκ³ , νμ΅νκ³ , μ ν¨μ± κ²μ¬ μΈνΈμμ μ±λ₯μ νκ°νκ³ , ONNX νμμΌλ‘ λ΄λ³΄λΌ μλ μμ΅λλ€.
Python
from ultralytics import YOLO
# Create a new YOLO model from scratch
model = YOLO('yolov8n.yaml')
# Load a pretrained YOLO model (recommended for training)
model = YOLO('yolov8n.pt')
# Train the model using the 'coco8.yaml' dataset for 3 epochs
results = model.train(data='coco8.yaml', epochs=3)
# Evaluate the model's performance on the validation set
results = model.val()
# Perform object detection on an image using the model
results = model('https://ultralytics.com/images/bus.jpg')
# Export the model to ONNX format
success = model.export(format='onnx')
κΈ°μ°¨
νλ ¨ λͺ¨λλ μ¬μ©μ μ§μ λ°μ΄ν° μΈνΈμμ YOLOv8 λͺ¨λΈμ νλ ¨νλ λ° μ¬μ©λ©λλ€. μ΄ λͺ¨λμμλ μ§μ λ λ°μ΄ν° μΈνΈμ νμ΄νΌνλΌλ―Έν°λ₯Ό μ¬μ©νμ¬ λͺ¨λΈμ νμ΅μν΅λλ€. νλ ¨ κ³Όμ μλ μ΄λ―Έμ§μμ κ°μ²΄μ ν΄λμ€μ μμΉλ₯Ό μ ννκ² μμΈ‘ν μ μλλ‘ λͺ¨λΈμ 맀κ°λ³μλ₯Ό μ΅μ ννλ μμ μ΄ ν¬ν¨λ©λλ€.
κΈ°μ°¨
Val
Val λͺ¨λλ YOLOv8 λͺ¨λΈμ νμ΅ν ν κ²μ¦νλ λ° μ¬μ©λ©λλ€. μ΄ λͺ¨λμμλ μ ν¨μ± κ²μ¬ μΈνΈμμ λͺ¨λΈμ νκ°νμ¬ μ νλμ μΌλ°ν μ±λ₯μ μΈ‘μ ν©λλ€. μ΄ λͺ¨λλ λͺ¨λΈμ νμ΄νΌνλΌλ―Έν°λ₯Ό μ‘°μ νμ¬ μ±λ₯μ κ°μ νλ λ° μ¬μ©ν μ μμ΅λλ€.
Val
μμΈ‘
μμΈ‘ λͺ¨λλ μλ‘μ΄ μ΄λ―Έμ§ λλ λμμμ λν΄ νμ΅λ YOLOv8 λͺ¨λΈμ μ¬μ©νμ¬ μμΈ‘νλ λ° μ¬μ©λ©λλ€. μ΄ λͺ¨λμμλ 체ν¬ν¬μΈνΈ νμΌμμ λͺ¨λΈμ΄ λ‘λλλ©°, μ¬μ©μλ μΆλ‘ μ μνν μ΄λ―Έμ§ λλ λμμμ μ 곡ν μ μμ΅λλ€. λͺ¨λΈμ μ λ ₯λ μ΄λ―Έμ§ λλ λμμμμ κ°μ²΄μ ν΄λμ€ λ° μμΉλ₯Ό μμΈ‘ν©λλ€.
μμΈ‘
from ultralytics import YOLO
from PIL import Image
import cv2
model = YOLO("model.pt")
# accepts all formats - image/dir/Path/URL/video/PIL/ndarray. 0 for webcam
results = model.predict(source="0")
results = model.predict(source="folder", show=True) # Display preds. Accepts all YOLO predict arguments
# from PIL
im1 = Image.open("bus.jpg")
results = model.predict(source=im1, save=True) # save plotted images
# from ndarray
im2 = cv2.imread("bus.jpg")
results = model.predict(source=im2, save=True, save_txt=True) # save predictions as labels
# from list of PIL/ndarray
results = model.predict(source=[im1, im2])
# results would be a list of Results object including all the predictions by default
# but be careful as it could occupy a lot memory when there're many images,
# especially the task is segmentation.
# 1. return as a list
results = model.predict(source="folder")
# results would be a generator which is more friendly to memory by setting stream=True
# 2. return as a generator
results = model.predict(source=0, stream=True)
for result in results:
# Detection
result.boxes.xyxy # box with xyxy format, (N, 4)
result.boxes.xywh # box with xywh format, (N, 4)
result.boxes.xyxyn # box with xyxy format but normalized, (N, 4)
result.boxes.xywhn # box with xywh format but normalized, (N, 4)
result.boxes.conf # confidence score, (N, 1)
result.boxes.cls # cls, (N, 1)
# Segmentation
result.masks.data # masks, (N, H, W)
result.masks.xy # x,y segments (pixels), List[segment] * N
result.masks.xyn # x,y segments (normalized), List[segment] * N
# Classification
result.probs # cls prob, (num_class, )
# Each result is composed of torch.Tensor by default,
# in which you can easily use following functionality:
result = result.cuda()
result = result.cpu()
result = result.to("cpu")
result = result.numpy()
λ΄λ³΄λ΄κΈ°
λ΄λ³΄λ΄κΈ° λͺ¨λλ YOLOv8 λͺ¨λΈμ λ°°ν¬μ μ¬μ©ν μ μλ νμμΌλ‘ λ΄λ³΄λ΄λ λ° μ¬μ©λ©λλ€. μ΄ λͺ¨λμμλ λͺ¨λΈμ΄ λ€λ₯Έ μννΈμ¨μ΄ μ ν리μΌμ΄μ μ΄λ νλμ¨μ΄ μ₯μΉμμ μ¬μ©ν μ μλ νμμΌλ‘ λ³νλ©λλ€. μ΄ λͺ¨λλ λͺ¨λΈμ νλ‘λμ νκ²½μ λ°°ν¬ν λ μ μ©ν©λλ€.
λ΄λ³΄λ΄κΈ°
λμ λ°°μΉ ν¬κΈ° λ° μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ¬μ©νμ¬ κ³΅μ YOLOv8n λͺ¨λΈμ ONNX μΌλ‘ λ΄λ³΄λ λλ€.
νΈλ
μΆμ λͺ¨λλ YOLOv8 λͺ¨λΈμ μ¬μ©νμ¬ μ€μκ°μΌλ‘ κ°μ²΄λ₯Ό μΆμ νλ λ° μ¬μ©λ©λλ€. μ΄ λͺ¨λμμλ 체ν¬ν¬μΈνΈ νμΌμμ λͺ¨λΈμ λ‘λνκ³ μ¬μ©μκ° μ€μκ° λΉλμ€ μ€νΈλ¦Όμ μ 곡νμ¬ μ€μκ° κ°μ²΄ μΆμ μ μνν μ μμ΅λλ€. μ΄ λͺ¨λλ κ°μ μμ€ν μ΄λ μμ¨ μ£Όν μ°¨λκ³Ό κ°μ μ ν리μΌμ΄μ μ μ μ©ν©λλ€.
νΈλ
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # load an official detection model
model = YOLO('yolov8n-seg.pt') # load an official segmentation model
model = YOLO('path/to/best.pt') # load a custom model
# Track with the model
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True)
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")
λ²€μΉλ§ν¬
λ²€μΉλ§ν¬ λͺ¨λλ YOLOv8 μ λν λ€μν λ΄λ³΄λ΄κΈ° νμμ μλμ μ νλλ₯Ό νλ‘νμΌλ§νλ λ° μ¬μ©λ©λλ€. λ²€μΉλ§ν¬λ λ΄λ³΄λΈ νμμ ν¬κΈ°, λ΄λ³΄λΈ νμμ λν μ 보λ₯Ό μ 곡ν©λλ€. mAP50-95
λ©νΈλ¦(κ°μ²΄ κ°μ§ λ° μΈλΆνμ©) λλ accuracy_top5
λ©νΈλ¦(λΆλ₯μ©)κ³Ό ONNX, OpenVINO, TensorRT λ±κ³Ό κ°μ λ€μν λ΄λ³΄λ΄κΈ° νμμμ μ΄λ―Έμ§λΉ λ°λ¦¬μ΄ λ¨μμ μΆλ‘ μκ°μ νμΈν μ μμ΅λλ€. μ΄ μ 보λ μ¬μ©μκ° μλμ μ νμ±μ λν μꡬ μ¬νμ λ°λΌ νΉμ μ¬μ© μ¬λ‘μ λ§λ μ΅μ μ λ΄λ³΄λ΄κΈ° νμμ μ ννλ λ° λμμ΄ λ μ μμ΅λλ€.
λ²€μΉλ§ν¬
νμκΈ°
Explorer APIλ κ³ κΈ μ맨ν±, λ²‘ν° μ μ¬λ, SQL κ²μ λ±μ κΈ°λ₯μ ν΅ν΄ λ°μ΄ν° μΈνΈλ₯Ό νμνλ λ° μ¬μ©ν μ μμ΅λλ€. λν μμ°μ΄ μ²λ¦¬ κΈ°λ₯μ νμ©ν΄ μμ°μ΄λ₯Ό μ¬μ©ν΄ μ½ν μΈ λ₯Ό κΈ°λ°μΌλ‘ μ΄λ―Έμ§λ₯Ό κ²μν μλ μμ΅λλ€. Explorer APIλ₯Ό μ¬μ©νλ©΄ μμ λ§μ λ°μ΄ν° μΈνΈ νμ λ ΈνΈλΆμ΄λ μ€ν¬λ¦½νΈλ₯Ό μμ±νμ¬ λ°μ΄ν° μΈνΈμ λν μΈμ¬μ΄νΈλ₯Ό μ»μ μ μμ΅λλ€.
νμκΈ°λ₯Ό μ¬μ©ν μλ§¨ν± κ²μ
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data='coco8.yaml', model='yolov8n.pt')
exp.create_embeddings_table()
similar = exp.get_similar(img='https://ultralytics.com/images/bus.jpg', limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(
img=['https://ultralytics.com/images/bus.jpg',
'https://ultralytics.com/images/bus.jpg'],
limit=10
)
print(similar.head())
from ultralytics import Explorer
# create an Explorer object
exp = Explorer(data='coco8.yaml', model='yolov8n.pt')
exp.create_embeddings_table()
similar = exp.get_similar(idx=1, limit=10)
print(similar.head())
# Search using multiple indices
similar = exp.get_similar(idx=[1,10], limit=10)
print(similar.head())
νΈλ μ΄λ μ¬μ©
YOLO
λͺ¨λΈ ν΄λμ€λ νΈλ μ΄λ ν΄λμ€μ μμ λ 벨 λνΌμ
λλ€. κ° YOLO μμ
μλ λ€μμ μμνλ μ체 νΈλ μ΄λκ° μμ΅λλ€. BaseTrainer
.
νμ§ νΈλ μ΄λ μμ
```python
from ultralytics.models.yolo import DetectionTrainer, DetectionValidator, DetectionPredictor
# trainer
trainer = DetectionTrainer(overrides={})
trainer.train()
trained_model = trainer.best
# Validator
val = DetectionValidator(args=...)
val(model=trained_model)
# predictor
pred = DetectionPredictor(overrides={})
pred(source=SOURCE, model=trained_model)
# resume from last weight
overrides["resume"] = trainer.last
trainer = detect.DetectionTrainer(overrides=overrides)
```
νΈλ μ΄λλ₯Ό μ½κ² μ¬μ©μ μ§μ νμ¬ λ§μΆ€ν μμ
μ μ§μνκ±°λ R&D μμ΄λμ΄λ₯Ό νμν μ μμ΅λλ€. μ¬μ©μ μ§μ μ λν΄ μμΈν μμ보기 Trainers
, Validators
κ·Έλ¦¬κ³ Predictors
μ¬μ©μ μ§μ μΉμ
μμ νλ‘μ νΈ μꡬ μ¬νμ λ§κ² μ‘°μ ν μ μμ΅λλ€.
μμ± 2023-11-12, μ λ°μ΄νΈ 2024-04-18
μμ±μ: glenn-jocher (9), AyushExel (1), RizwanMunawar (1), Laughing-q (1), maianumerosky (1)