Bỏ qua nội dung

Tiện ích đơn giản

mã với góc nhìn

Các ultralytics gói cung cấp nhiều tiện ích để hỗ trợ, nâng cao 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 dành cho các 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 Ultralytics công cụ.



Đồng hồ: Ultralytics Tiện ích | Chú thích tự động, API Explorer và Chuyển đổi tập dữ liệu

Dữ liệu

Tự động gắn nhãn/chú thích

Chú thích tập dữ liệu là một quá trình tốn nhiều tài nguyên và thời gian. Nếu bạn có Ultralytics YOLO mô hình phát hiện đối tượng đượ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 theo đị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:

Hình dung chú thích tập dữ liệu

Chức năng này trực quan hóa YOLO chú thích trên hình ảnh trước khi đào tạo, 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 đố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 thành YOLO Định dạng

Mặt nạ phân đoạn để YOLO Định dạng

Sử dụng chức năng này để chuyển đổi một tập dữ liệu hình ảnh mặt nạ phân đoạn sang định dạng phân đoạn YOLO Ultralytics . Chức năng này lấy thư mục chứa hình ảnh mặt nạ định dạng nhị phân và chuyển đổi chúng thành YOLO định dạng phân đoạn.

Mặt nạ đã chuyển đổi sẽ được lưu trong thư mục đầu ra đã 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 thành YOLO Định dạng

Sử dụng điều này để chuyển đổi COCO Chú thích JSON vào YOLO định dạng. Đối với các tập dữ liệu phát hiện đối tượng (hộp giới hạn), hãy đặt cả hai use_segmentsuse_keypoints ĐẾN False.

from ultralytics.data.converter import convert_coco

convert_coco(
    "../datasets/coco/annotations/",
    use_segments=False,
    use_keypoints=False,
    cls91to80=True,
)

Để biết thêm thông tin về convert_coco chức năng, ghé thăm trang tham khảo.

Nhận 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 sự hiện hữu x y w h dữ liệu hộp giới hạn, chuyển đổi thành các phân đoạn bằng cách sử dụng yolo_bbox2segment chức năng. Tổ chức 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",
)

Ghé thăm yolo_bbox2segment trang tham khảo để biết thêm thông tin về chức năng này.

Chuyển đổi các phân đoạn thành các hộp giới hạn

Nếu bạn có một tập dữ liệu sử dụng định dạng tập 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 format) bằng chức năng 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 thức hoạt động của chức năng này, hãy truy cập trang tham khảo .

Tiện ích

Nén hình ảnh

Nén một tệp hình ảnh duy nhất xuống kích thước nhỏ hơn trong khi vẫn giữ nguyên tỷ lệ khung hình và chất lượng. 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 tập dữ liệu

Tự động chia một tập dữ liệu thành train/val/test chia tách và lưu các chia tách kết quả vào autosplit_*.txt tập tin. Chức năng này sử dụng lấy mẫu ngẫu nhiên, được loại trừ khi sử dụng fraction lập luận cho việc đào tạo.

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 thông tin chi tiết về chức năng này.

Phân đoạn-đa giác thành Mặt nạ nhị phân

Chuyển đổi một đa giác đơn (dưới dạng 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) các điểm xác định đường viền đa giác.

Cảnh báo

N phải luôn luôn đều đặn.

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 trường hợp hộp giới hạn (ngang)

Để quản lý dữ liệu hộp giới hạn, Bboxes Lớp này giúp chuyển đổi giữa các định dạng tọa độ hộp, chia tỷ lệ kích thước hộp, tính diện tích, bao gồm các giá trị bù trừ, 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 thuộc tính và phương pháp.

Mẹo

Nhiều chức năng sau đây (và nhiều chức năng khác) có thể được truy cập bằng cách sử dụng Bboxes lớp học, 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 tiểu mục tiếp theo để biết cách nhập chúng độc lập.

Hộp tỷ lệ

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 một cách thích hợp để khớ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ả cá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

Xem docstring cho từng chức năng hoặc truy cập ultralytics.utils.ops trang tham khảo để đọc thêm.

Vẽ đồ thị

Chú thích bản vẽ

Ultralytics bao gồm một Annotator lớp để chú thích các loại dữ liệu khác nhau. Tốt nhất nên sử dụng với hộp giới hạn phát hiện đối tượng, đặt ra các điểm chính, Và hộp giới hạn định hướng.

Ultralytics Chú thích quét

Python Ví dụ sử dụng Ultralytics YOLO 🚀

import cv2

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, y, flags, param):  # Mouse callback for dragging line.
    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.
    annotator = SolutionAnnotator(im0)
    results = model.track(im0, persist=True)  # Track objects using track method.
    if f == 1:
        cv2.namedWindow(window_name)
        cv2.setMouseCallback(window_name, drag_line)

    if results[0].boxes.id is not None:
        if results[0].masks is not None:
            masks = results[0].masks.xy
        track_ids = results[0].boxes.id.int().cpu().tolist()
        clss = results[0].boxes.cls.cpu().tolist()
        boxes = results[0].boxes.xyxy.cpu()

        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.
            if mask is not None and mask.size > 0:
                # If you want to overlay the masks
                # mask[:, 0] = np.clip(mask[:, 0], line_x, w)
                # mask_img = cv2.fillPoly(im0.copy(), [mask.astype(int)], color)
                # cv2.addWeighted(mask_img, 0.5, im0, 0.5, 0, im0)

                if box[0] > line_x:
                    count += 1
                    annotator.seg_bbox(mask=mask, mask_color=color, label=str(classes[cls]))
            else:
                if box[0] > line_x:
                    count += 1
                    annotator.box_label(box=box, color=color, label=str(classes[cls]))

    annotator.sweep_annotator(line_x=line_x, line_y=h, label=f"COUNT:{count}")  # Display the sweep
    cv2.imshow(window_name, im0)
    video_writer.write(im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()  # Release the video capture.
video_writer.release()  # Release the video writer.
cv2.destroyAllWindows()  # Destroy all opened windows.

Hộp giới hạn ngang

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()

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.

Hộp giới hạn định hướng (OBB)

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),
        rotated=True,
    )

image_with_obb = ann.result()

Hộp giới hạn Chú thích hình tròn Nhãn hình tròn



Đồng hồ: Hướng dẫn chi tiết về chú thích văn bản và hình tròn với Python Bản demo trực tiếp | Ultralytics Chú thích 🚀

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)
    boxes = results[0].boxes.xyxy.cpu()
    clss = results[0].boxes.cls.cpu().tolist()

    for box, cls in zip(boxes, clss):
        annotator.circle_label(box, label=names[int(cls)], color=colors(cls, True))

    writer.write(im0)
    cv2.imshow("Ultralytics circle annotation", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

writer.release()
cap.release()
cv2.destroyAllWindows()

Hộp giới hạn Văn bản Chú thích Nhãn văn bản

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)
    boxes = results[0].boxes.xyxy.cpu()
    clss = results[0].boxes.cls.cpu().tolist()

    for box, cls in zip(boxes, clss):
        annotator.text_label(box, label=names[int(cls)], color=colors(cls, True))

    writer.write(im0)
    cv2.imshow("Ultralytics text annotation", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

writer.release()
cap.release()
cv2.destroyAllWindows()

Xem Annotator Trang tham khảo để có thêm hiểu biết sâu sắc.

Lặt Vặt

Hồ sơ mã

Kiểm tra thời lượng chạy/xử lý mã bằng cách sử dụng with hoặc như một người trang trí.

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"

Ultralytics Định dạng được hỗ trợ

Cần phải lập trình sử dụng 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'}

Làm cho chia hết

Tính số nguyên gần nhất với x mà 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 bao gồm trong Ultralytics gói để nâng cao quy trình làm việc của máy học?

Các Ultralytics gói bao gồm các tiện ích được thiết kế để hợp lý 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 chú thích tự động để dán nhãn tập dữ liệu, chuyển đổi COCO thành YOLO định dạng với convert_coco , nén hình ảnh và tự động chia tách tập dữ liệu. Các công cụ này giúp giảm bớt công sứ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.

Tôi có thể sử dụng như thế nào? Ultralytics để tự động dán nhãn cho tập dữ liệu của tôi?

Nếu bạn đã được đào tạo trước Ultralytics YOLO mô hình phát hiện đối tượng, bạn có thể sử dụng nó với mô hình SAM để tự động chú thích tập dữ liệu của mình theo định dạng phân đoạn. Sau đâ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 kiểm tra phần tham chiếu auto_annotate .

Làm thế nào để tôi chuyển đổi chú thích tập dữ liệu COCO sang YOLO định dạng trong Ultralytics ?

Để chuyển đổi chú thích COCO JSON thành YOLO định dạng để phát hiện đối tượng, bạn có thể sử dụng convert_coco tiện ích. Sau đây là một đoạn mã mẫu:

from ultralytics.data.converter import convert_coco

convert_coco(
    "../datasets/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 việc này là gì? YOLO Data Explorer trong Ultralytics bưu kiện?

Các YOLO Nhà thám hiểm là một công cụ mạnh mẽ được giới thiệu trong 8.1.0 cập nhật để nâng cao hiểu biết về tập dữ liệu. Nó cho phép bạn sử dụng truy vấn văn bản để tìm các trường hợp đối tượng trong tập dữ liệu của mình, giúp phân tích và quản lý dữ liệu dễ dàng hơn. Công cụ này cung cấp thông tin chi tiết có giá trị về thành phần và phân phối tập dữ liệu, giúp cải thiện hiệu suất và đào tạo mô hình.

Làm thế nào tôi có thể chuyển đổi các 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ó (trong 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 theo 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 .

📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 5 ngày

Bình luận