Tiện ích đơn giản
Hàm ultralytics
package cung cấp nhiều tiện ích để hỗ trợ, tăng cường và tăng tốc quy trình làm việc của bạn. Mặc dù có nhiều tiện ích khác, hướng dẫn này nêu bật một số tiện ích hữu ích nhất cho nhà phát triển, đóng vai trò là tài liệu tham khảo thực tế để lập trình với các công cụ Ultralytics.
Xem: Tiện ích Ultralytics | Tự động chú thích, API Explorer và Chuyển đổi bộ dữ liệu
Dữ liệu
Tự Động Gắn Nhãn / Chú Thích
Chú thích bộ dữ liệu là một quy trình tốn nhiều tài nguyên và thời gian. Nếu bạn có một mô hình phát hiện đối tượng Ultralytics YOLO được đào tạo trên một lượng dữ liệu hợp lý, bạn có thể sử dụng nó với SAM để tự động chú thích dữ liệu bổ sung ở định dạng phân đoạn.
from ultralytics.data.annotator import auto_annotate
auto_annotate(
data="path/to/new/data",
det_model="yolo11n.pt",
sam_model="mobile_sam.pt",
device="cuda",
output_dir="path/to/save_labels",
)
Hàm này không trả về bất kỳ giá trị nào. Để biết thêm chi tiết:
- Xem phần tài liệu tham khảo cho
annotator.auto_annotate
để hiểu rõ hơn về cách thức hoạt động của hàm. - Sử dụng kết hợp với hàm
segments2boxes
để tạo ra các hộp giới hạn phát hiện đối tượng.
Trực quan hóa chú thích bộ dữ liệu
Hàm này trực quan hóa các chú thích YOLO trên một hình ảnh trước khi huấn luyện, giúp xác định và sửa bất kỳ chú thích sai nào có thể dẫn đến kết quả phát hiện không chính xác. Nó vẽ các hộp giới hạn, gắn nhãn các đối tượng bằng tên lớp và điều chỉnh màu văn bản dựa trên độ sáng của nền để dễ đọc hơn.
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Define the label map with all annotated class labels.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Input image path.
"path/to/annotations.txt", # Annotation file path for the image.
label_map,
)
Chuyển Đổi Mặt Nạ Phân Đoạn Sang Định Dạng YOLO
Sử dụng chức năng này để chuyển đổi một bộ dữ liệu hình ảnh mặt nạ phân đoạn sang định dạng phân đoạn Ultralytics YOLO. Hàm này lấy thư mục chứa các hình ảnh mặt nạ định dạng nhị phân và chuyển đổi chúng thành định dạng phân đoạn YOLO.
Các mặt nạ đã chuyển đổi sẽ được lưu trong thư mục đầu ra được chỉ định.
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# The classes here is the total classes in the dataset.
# for COCO dataset we have 80 classes.
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)
Chuyển Đổi COCO Sang Định Dạng YOLO
Sử dụng chức năng này để chuyển đổi COCO Chú thích JSON sang định dạng YOLO. Đối với các bộ dữ liệu phát hiện đối tượng (bounding box), hãy đặt cả hai use_segments
và use_keypoints
đến False
.
from ultralytics.data.converter import convert_coco
convert_coco(
"coco/annotations/",
use_segments=False,
use_keypoints=False,
cls91to80=True,
)
Để biết thêm thông tin về convert_coco
hàm này, hãy truy cập trang tham khảo.
Lấy Kích Thước Hộp Giới Hạn
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator
model = YOLO("yolo11n.pt") # Load pretrain or fine-tune model
# Process the image
source = cv2.imread("path/to/image.jpg")
results = model(source)
# Extract results
annotator = Annotator(source, example=model.names)
for box in results[0].boxes.xyxy.cpu():
width, height, area = annotator.get_bbox_dimension(box)
print(f"Bounding Box Width {width.item()}, Height {height.item()}, Area {area.item()}")
Chuyển Đổi Hộp Giới Hạn Thành Phân Đoạn
Với dữ liệu x y w h
bounding box hiện có, hãy chuyển đổi thành các phân đoạn bằng cách sử dụng yolo_bbox2segment
function. Sắp xếp các tập tin cho hình ảnh và chú thích như sau:
data
|__ images
├─ 001.jpg
├─ 002.jpg
├─ ..
└─ NNN.jpg
|__ labels
├─ 001.txt
├─ 002.txt
├─ ..
└─ NNN.txt
from ultralytics.data.converter import yolo_bbox2segment
yolo_bbox2segment(
im_dir="path/to/images",
save_dir=None, # saved to "labels-segment" in images directory
sam_model="sam_b.pt",
)
Truy cập yolo_bbox2segment
trang tham khảo để biết thêm thông tin về hàm này.
Chuyển Đổi Phân Đoạn Thành Hộp Giới Hạn
Nếu bạn có một bộ dữ liệu sử dụng định dạng bộ dữ liệu phân đoạn, bạn có thể dễ dàng chuyển đổi chúng thành các hộp giới hạn thẳng đứng (hoặc nằm ngang) (x y w h
định dạng) bằng hàm này.
import numpy as np
from ultralytics.utils.ops import segments2boxes
segments = np.array(
[
[805, 392, 797, 400, ..., 808, 714, 808, 392],
[115, 398, 113, 400, ..., 150, 400, 149, 298],
[267, 412, 265, 413, ..., 300, 413, 299, 412],
]
)
segments2boxes([s.reshape(-1, 2) for s in segments])
# >>> array([[ 741.66, 631.12, 133.31, 479.25],
# [ 146.81, 649.69, 185.62, 502.88],
# [ 281.81, 636.19, 118.12, 448.88]],
# dtype=float32) # xywh bounding boxes
Để hiểu cách hàm này hoạt động, hãy truy cập trang tham khảo.
Tiện ích
Nén Ảnh
Nén một tệp hình ảnh duy nhất về kích thước giảm đồng thời vẫn giữ nguyên tỷ lệ khung hình và chất lượng của nó. Nếu hình ảnh đầu vào nhỏ hơn kích thước tối đa, nó sẽ không được thay đổi kích thước.
from pathlib import Path
from ultralytics.data.utils import compress_one_image
for f in Path("path/to/dataset").rglob("*.jpg"):
compress_one_image(f)
Tự Động Chia Tách Bộ Dữ Liệu
Tự động chia một bộ dữ liệu thành các train
/val
/test
phần và lưu các phần kết quả vào các autosplit_*.txt
files. Hàm này sử dụng lấy mẫu ngẫu nhiên, sẽ bị loại trừ khi sử dụng fraction
đối số để huấn luyện.
from ultralytics.data.utils import autosplit
autosplit(
path="path/to/images",
weights=(0.9, 0.1, 0.0), # (train, validation, test) fractional splits
annotated_only=False, # split only images with annotation file when True
)
Xem Trang Tham khảo để biết thêm chi tiết về hàm này.
Đa Giác Phân Đoạn Thành Mặt Nạ Nhị Phân
Chuyển đổi một đa giác đơn (dưới dạng một danh sách) thành mặt nạ nhị phân có kích thước hình ảnh được chỉ định. Đa giác phải ở dạng [N, 2]
, ở đâu N
là số lượng (x, y)
điểm xác định đường viền đa giác.
Cảnh báo
N
phải luôn thậm chí.
import numpy as np
from ultralytics.data.utils import polygon2mask
imgsz = (1080, 810)
polygon = np.array([805, 392, 797, 400, ..., 808, 714, 808, 392]) # (238, 2)
mask = polygon2mask(
imgsz, # tuple
[polygon], # input as list
color=255, # 8-bit binary
downsample_ratio=1,
)
Hộp Giới Hạn
Các thể hiện Hộp giới hạn (Ngang)
Để quản lý dữ liệu bounding box, bạn có thể dùng Bboxes
class giúp chuyển đổi giữa các định dạng tọa độ hộp, thay đổi kích thước hộp, tính toán diện tích, bao gồm các offset, v.v.
import numpy as np
from ultralytics.utils.instance import Bboxes
boxes = Bboxes(
bboxes=np.array(
[
[22.878, 231.27, 804.98, 756.83],
[48.552, 398.56, 245.35, 902.71],
[669.47, 392.19, 809.72, 877.04],
[221.52, 405.8, 344.98, 857.54],
[0, 550.53, 63.01, 873.44],
[0.0584, 254.46, 32.561, 324.87],
]
),
format="xyxy",
)
boxes.areas()
# >>> array([ 4.1104e+05, 99216, 68000, 55772, 20347, 2288.5])
boxes.convert("xywh")
print(boxes.bboxes)
# >>> array(
# [[ 413.93, 494.05, 782.1, 525.56],
# [ 146.95, 650.63, 196.8, 504.15],
# [ 739.6, 634.62, 140.25, 484.85],
# [ 283.25, 631.67, 123.46, 451.74],
# [ 31.505, 711.99, 63.01, 322.91],
# [ 16.31, 289.67, 32.503, 70.41]]
# )
Xem Bboxes
phần tham khảo để biết thêm các thuộc tính và phương thức.
Mẹo
Nhiều hàm trong số các hàm sau (và hơn thế nữa) có thể được truy cập bằng cách sử dụng Bboxes
class, nhưng nếu bạn muốn làm việc trực tiếp với các hàm, hãy xem các phần phụ tiếp theo để biết cách nhập chúng một cách độc lập.
Tỉ Lệ Hộp
Khi tăng hoặc giảm tỷ lệ hình ảnh, bạn có thể điều chỉnh tỷ lệ tọa độ hộp giới hạn tương ứng cho phù hợp bằng cách sử dụng ultralytics.utils.ops.scale_boxes
.
import cv2 as cv
import numpy as np
from ultralytics.utils.ops import scale_boxes
image = cv.imread("ultralytics/assets/bus.jpg")
h, w, c = image.shape
resized = cv.resize(image, None, (), fx=1.2, fy=1.2)
new_h, new_w, _ = resized.shape
xyxy_boxes = np.array(
[
[22.878, 231.27, 804.98, 756.83],
[48.552, 398.56, 245.35, 902.71],
[669.47, 392.19, 809.72, 877.04],
[221.52, 405.8, 344.98, 857.54],
[0, 550.53, 63.01, 873.44],
[0.0584, 254.46, 32.561, 324.87],
]
)
new_boxes = scale_boxes(
img1_shape=(h, w), # original image dimensions
boxes=xyxy_boxes, # boxes from original image
img0_shape=(new_h, new_w), # resized image dimensions (scale to)
ratio_pad=None,
padding=False,
xywh=False,
)
print(new_boxes)
# >>> array(
# [[ 27.454, 277.52, 965.98, 908.2],
# [ 58.262, 478.27, 294.42, 1083.3],
# [ 803.36, 470.63, 971.66, 1052.4],
# [ 265.82, 486.96, 413.98, 1029],
# [ 0, 660.64, 75.612, 1048.1],
# [ 0.0701, 305.35, 39.073, 389.84]]
# )
Chuyển Đổi Định Dạng Hộp Giới Hạn
XYXY → XYWH
Chuyển đổi tọa độ hộp giới hạn từ định dạng (x1, y1, x2, y2) sang định dạng (x, y, chiều rộng, chiều cao), trong đó (x1, y1) là góc trên cùng bên trái và (x2, y2) là góc dưới cùng bên phải.
import numpy as np
from ultralytics.utils.ops import xyxy2xywh
xyxy_boxes = np.array(
[
[22.878, 231.27, 804.98, 756.83],
[48.552, 398.56, 245.35, 902.71],
[669.47, 392.19, 809.72, 877.04],
[221.52, 405.8, 344.98, 857.54],
[0, 550.53, 63.01, 873.44],
[0.0584, 254.46, 32.561, 324.87],
]
)
xywh = xyxy2xywh(xyxy_boxes)
print(xywh)
# >>> array(
# [[ 413.93, 494.05, 782.1, 525.56],
# [ 146.95, 650.63, 196.8, 504.15],
# [ 739.6, 634.62, 140.25, 484.85],
# [ 283.25, 631.67, 123.46, 451.74],
# [ 31.505, 711.99, 63.01, 322.91],
# [ 16.31, 289.67, 32.503, 70.41]]
# )
Tất Cả Chuyển Đổi Hộp Giới Hạn
from ultralytics.utils.ops import (
ltwh2xywh,
ltwh2xyxy,
xywh2ltwh, # xywh → top-left corner, w, h
xywh2xyxy,
xywhn2xyxy, # normalized → pixel
xyxy2ltwh, # xyxy → top-left corner, w, h
xyxy2xywhn, # pixel → normalized
)
for func in (ltwh2xywh, ltwh2xyxy, xywh2ltwh, xywh2xyxy, xywhn2xyxy, xyxy2ltwh, xyxy2xywhn):
print(help(func)) # print function docstrings
Tham khảo docstring của từng hàm hoặc truy cập ultralytics.utils.ops
trang tham khảo để đọc thêm.
Vẽ đồ thị
Các tiện ích chú thích
Ultralytics bao gồm một Annotator
class để chú thích các loại dữ liệu khác nhau. Tốt nhất nên sử dụng nó với bounding box phát hiện đối tượng, các điểm chính của tư thế, và các hộp giới hạn có hướng.
Chú thích hình hộp
Các ví dụ Python sử dụng Ultralytics YOLO 🚀
import cv2 as cv
import numpy as np
from ultralytics.utils.plotting import Annotator, colors
names = {
0: "person",
5: "bus",
11: "stop sign",
}
image = cv.imread("ultralytics/assets/bus.jpg")
ann = Annotator(
image,
line_width=None, # default auto-size
font_size=None, # default auto-size
font="Arial.ttf", # must be ImageFont compatible
pil=False, # use PIL, otherwise uses OpenCV
)
xyxy_boxes = np.array(
[
[5, 22.878, 231.27, 804.98, 756.83], # class-idx x1 y1 x2 y2
[0, 48.552, 398.56, 245.35, 902.71],
[0, 669.47, 392.19, 809.72, 877.04],
[0, 221.52, 405.8, 344.98, 857.54],
[0, 0, 550.53, 63.01, 873.44],
[11, 0.0584, 254.46, 32.561, 324.87],
]
)
for nb, box in enumerate(xyxy_boxes):
c_idx, *box = box
label = f"{str(nb).zfill(2)}:{names.get(int(c_idx))}"
ann.box_label(box, label, color=colors(c_idx, bgr=True))
image_with_bboxes = ann.result()
import cv2 as cv
import numpy as np
from ultralytics.utils.plotting import Annotator, colors
obb_names = {10: "small vehicle"}
obb_image = cv.imread("datasets/dota8/images/train/P1142__1024__0___824.jpg")
obb_boxes = np.array(
[
[0, 635, 560, 919, 719, 1087, 420, 803, 261], # class-idx x1 y1 x2 y2 x3 y2 x4 y4
[0, 331, 19, 493, 260, 776, 70, 613, -171],
[9, 869, 161, 886, 147, 851, 101, 833, 115],
]
)
ann = Annotator(
obb_image,
line_width=None, # default auto-size
font_size=None, # default auto-size
font="Arial.ttf", # must be ImageFont compatible
pil=False, # use PIL, otherwise uses OpenCV
)
for obb in obb_boxes:
c_idx, *obb = obb
obb = np.array(obb).reshape(-1, 4, 2).squeeze()
label = f"{obb_names.get(int(c_idx))}"
ann.box_label(
obb,
label,
color=colors(c_idx, True),
)
image_with_obb = ann.result()
Tên có thể được sử dụng từ model.names
khi làm việc với kết quả phát hiện.
Xem thêm Annotator
Trang tham khảo để hiểu rõ hơn.
Chú thích quét của Ultralytics
Quét Chú thích bằng Tiện ích Ultralytics
import cv2
import numpy as np
from ultralytics import YOLO
from ultralytics.solutions.solutions import SolutionAnnotator
from ultralytics.utils.plotting import colors
# User defined video path and model file
cap = cv2.VideoCapture("path/to/video.mp4")
model = YOLO(model="yolo11s-seg.pt") # Model file i.e. yolo11s.pt or yolo11m-seg.pt
if not cap.isOpened():
print("Error: Could not open video.")
exit()
# Initialize the video writer object.
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("ultralytics.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
masks = None # Initialize variable to store masks data
f = 0 # Initialize frame count variable for enabling mouse event.
line_x = w # Store width of line.
dragging = False # Initialize bool variable for line dragging.
classes = model.names # Store model classes names for plotting.
window_name = "Ultralytics Sweep Annotator"
def drag_line(event, x, _, flags, param):
"""Mouse callback function to enable dragging a vertical sweep line across the video frame."""
global line_x, dragging
if event == cv2.EVENT_LBUTTONDOWN or (flags & cv2.EVENT_FLAG_LBUTTON):
line_x = max(0, min(x, w))
dragging = True
while cap.isOpened(): # Loop over the video capture object.
ret, im0 = cap.read()
if not ret:
break
f = f + 1 # Increment frame count.
count = 0 # Re-initialize count variable on every frame for precise counts.
results = model.track(im0, persist=True)[0]
if f == 1:
cv2.namedWindow(window_name)
cv2.setMouseCallback(window_name, drag_line)
annotator = SolutionAnnotator(im0)
if results.boxes.is_track:
if results.masks is not None:
masks = [np.array(m, dtype=np.int32) for m in results.masks.xy]
boxes = results.boxes.xyxy.tolist()
track_ids = results.boxes.id.int().cpu().tolist()
clss = results.boxes.cls.cpu().tolist()
for mask, box, cls, t_id in zip(masks or [None] * len(boxes), boxes, clss, track_ids):
color = colors(t_id, True) # Assign different color to each tracked object.
label = f"{classes[cls]}:{t_id}"
if mask is not None and mask.size > 0:
if box[0] > line_x:
count += 1
cv2.polylines(im0, [mask], True, color, 2)
x, y = mask.min(axis=0)
(w_m, _), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)
cv2.rectangle(im0, (x, y - 20), (x + w_m, y), color, -1)
cv2.putText(im0, label, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
else:
if box[0] > line_x:
count += 1
annotator.box_label(box=box, color=color, label=label)
# Generate draggable sweep line
annotator.sweep_annotator(line_x=line_x, line_y=h, label=f"COUNT:{count}")
cv2.imshow(window_name, im0)
video_writer.write(im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# Release the resources
cap.release()
video_writer.release()
cv2.destroyAllWindows()
Tìm thêm chi tiết về sweep_annotator
phương pháp trong phần tham khảo của chúng tôi ở đây.
Chú thích nhãn thích ứng
Cảnh báo
Bắt đầu từ Ultralytics v8.3.167, circle_label
và text_label
đã được thay thế bằng một adaptive_label
chức năng. Bây giờ bạn có thể chỉ định loại chú thích bằng cách sử dụng shape
đối số:
- Hình chữ nhật:
annotator.adaptive_label(box, label=names[int(cls)], color=colors(cls, True), shape="rect")
- Đường tròn:
annotator.adaptive_label(box, label=names[int(cls)], color=colors(cls, True), shape="circle")
Xem: Hướng dẫn Chuyên sâu về Chú thích Văn bản & Hình tròn với Demos Trực tiếp Python | Chú thích Ultralytics 🚀
Chú thích nhãn thích ứng bằng cách sử dụng Ultralytics Utilities
import cv2
from ultralytics import YOLO
from ultralytics.solutions.solutions import SolutionAnnotator
from ultralytics.utils.plotting import colors
model = YOLO("yolo11s.pt")
names = model.names
cap = cv2.VideoCapture("path/to/video.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
writer = cv2.VideoWriter("Ultralytics circle annotation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
break
annotator = SolutionAnnotator(im0)
results = model.predict(im0)[0]
boxes = results.boxes.xyxy.cpu()
clss = results.boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
annotator.adaptive_label(box, label=names[int(cls)], color=colors(cls, True), shape="circle")
writer.write(im0)
cv2.imshow("Ultralytics circle annotation", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
writer.release()
cap.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO
from ultralytics.solutions.solutions import SolutionAnnotator
from ultralytics.utils.plotting import colors
model = YOLO("yolo11s.pt")
names = model.names
cap = cv2.VideoCapture("path/to/video.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
writer = cv2.VideoWriter("Ultralytics text annotation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
break
annotator = SolutionAnnotator(im0)
results = model.predict(im0)[0]
boxes = results.boxes.xyxy.cpu()
clss = results.boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
annotator.adaptive_label(box, label=names[int(cls)], color=colors(cls, True), shape="rect")
writer.write(im0)
cv2.imshow("Ultralytics text annotation", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
writer.release()
cap.release()
cv2.destroyAllWindows()
Xem SolutionAnnotator
Trang tham khảo để hiểu rõ hơn.
Linh tinh
Phân tích Code
Kiểm tra thời lượng để code chạy/xử lý bằng cách sử dụng with
hoặc dưới dạng decorator.
from ultralytics.utils.ops import Profile
with Profile(device="cuda:0") as dt:
pass # operation to measure
print(dt)
# >>> "Elapsed time is 9.5367431640625e-07 s"
Các định dạng được Ultralytics hỗ trợ
Bạn cần sử dụng theo chương trình các định dạng hình ảnh hoặc video được hỗ trợ trong Ultralytics? Sử dụng các hằng số này nếu cần:
from ultralytics.data.utils import IMG_FORMATS, VID_FORMATS
print(IMG_FORMATS)
# {'tiff', 'pfm', 'bmp', 'mpo', 'dng', 'jpeg', 'png', 'webp', 'tif', 'jpg'}
print(VID_FORMATS)
# {'avi', 'mpg', 'wmv', 'mpeg', 'm4v', 'mov', 'mp4', 'asf', 'mkv', 'ts', 'gif', 'webm'}
Chia hết
Tính số nguyên gần nhất với x
chia hết cho y
.
from ultralytics.utils.ops import make_divisible
make_divisible(7, 3)
# >>> 9
make_divisible(7, 2)
# >>> 8
Câu hỏi thường gặp
Những tiện ích nào được tích hợp trong gói Ultralytics để nâng cao quy trình làm việc của machine learning?
Gói Ultralytics bao gồm các tiện ích được thiết kế để đơn giản hóa và tối ưu hóa quy trình làm việc của máy học. Các tiện ích chính bao gồm tự động chú thích để dán nhãn bộ dữ liệu, chuyển đổi COCO sang định dạng YOLO bằng convert_coco, nén ảnh và tự động chia tách bộ dữ liệu. Các công cụ này giúp giảm bớt thao tác thủ công, đảm bảo tính nhất quán và nâng cao hiệu quả xử lý dữ liệu.
Làm cách nào để sử dụng Ultralytics để tự động gán nhãn cho bộ dữ liệu của tôi?
Nếu bạn có một mô hình phát hiện đối tượng Ultralytics YOLO được huấn luyện trước, bạn có thể sử dụng nó với mô hình SAM để tự động chú thích bộ dữ liệu của bạn ở định dạng phân đoạn. Đây là một ví dụ:
from ultralytics.data.annotator import auto_annotate
auto_annotate(
data="path/to/new/data",
det_model="yolo11n.pt",
sam_model="mobile_sam.pt",
device="cuda",
output_dir="path/to/save_labels",
)
Để biết thêm chi tiết, hãy xem phần tham khảo auto_annotate.
Làm cách nào để chuyển đổi chú thích bộ dữ liệu COCO sang định dạng YOLO trong Ultralytics?
Để chuyển đổi chú thích COCO JSON sang định dạng YOLO để phát hiện đối tượng, bạn có thể sử dụng convert_coco
tiện ích. Dưới đây là một đoạn mã mẫu:
from ultralytics.data.converter import convert_coco
convert_coco(
"coco/annotations/",
use_segments=False,
use_keypoints=False,
cls91to80=True,
)
Để biết thêm thông tin, hãy truy cập trang tham khảo convert_coco.
Mục đích của YOLO Data Explorer trong gói Ultralytics là gì?
Hàm YOLO Explorer là một công cụ mạnh mẽ được giới thiệu trong bản 8.1.0
cập nhật để tăng cường khả năng hiểu bộ dữ liệu. Nó cho phép bạn sử dụng truy vấn văn bản để tìm các thể hiện đối tượng trong bộ dữ liệu của mình, giúp bạn phân tích và quản lý dữ liệu dễ dàng hơn. Công cụ này cung cấp những hiểu biết có giá trị về thành phần và phân phối bộ dữ liệu, giúp cải thiện quá trình huấn luyện và hiệu suất mô hình.
Làm cách nào để chuyển đổi hộp giới hạn thành các phân đoạn trong Ultralytics?
Để chuyển đổi dữ liệu hộp giới hạn hiện có (ở định dạng x y w h
định dạng) thành các phân đoạn, bạn có thể sử dụng yolo_bbox2segment
chức năng. Đảm bảo các tệp của bạn được sắp xếp với các thư mục riêng biệt cho hình ảnh và nhãn.
from ultralytics.data.converter import yolo_bbox2segment
yolo_bbox2segment(
im_dir="path/to/images",
save_dir=None, # saved to "labels-segment" in the images directory
sam_model="sam_b.pt",
)
Để biết thêm thông tin, hãy truy cập trang tham khảo yolo_bbox2segment.