تخطي إلى المحتوى

المرافق البسيطة

رمز بمنظور

إن ultralytics توفر الحزمة مجموعة متنوعة من الأدوات المساعدة لدعم وتحسين وتسريع سير عملك. في حين أن هناك العديد من الأدوات الأخرى المتاحة، يسلط هذا الدليل الضوء على بعض أكثرها فائدة للمطورين، ليكون بمثابة مرجع عملي للبرمجة باستخدام أدوات Ultralytics .



شاهد: Ultralytics الأدوات المساعدة | التعليق التلقائي وواجهة برمجة تطبيقات المستكشف وتحويل مجموعة البيانات

البيانات

التسمية التلقائية/التعليقات التوضيحية

تعتبر التعليقات التوضيحية لمجموعة البيانات عملية تستهلك الكثير من الموارد وتستغرق وقتًا طويلاً. إذا كان لديك نموذج Ultralytics YOLO للكشف عن الكائنات المُدرَّب على كمية معقولة من البيانات، يمكنك استخدامه مع SAM للتعليل التلقائي لبيانات إضافية بتنسيق التجزئة.

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",
)

لا تقوم هذه الدالة بإرجاع أي قيمة. لمزيد من التفاصيل:

تصور شروح مجموعة البيانات التوضيحية

تقوم هذه الوظيفة بتصور التعليقات التوضيحية YOLO على الصورة قبل التدريب، مما يساعد على تحديد وتصحيح أي تعليقات توضيحية خاطئة قد تؤدي إلى نتائج اكتشاف غير صحيحة. ترسم مربعات محدّدة، وتسمّي الكائنات بأسماء الفئات، وتضبط لون النص بناءً على إضاءة الخلفية لتحسين إمكانية القراءة.

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

تحويل أقنعة التجزئة إلى تنسيق YOLO

أقنعة التجزئة إلى تنسيق YOLO

استخدم هذا لتحويل مجموعة بيانات من صور قناع التقسيم إلى Ultralytics YOLO التقطيعية. تأخذ هذه الدالة الدليل الذي يحتوي على صور قناع التنسيق الثنائي وتحولها إلى تنسيق تجزئة YOLO .

سيتم حفظ الأقنعة المحولة في دليل الإخراج المحدد.

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)

تحويل COCO إلى تنسيق YOLO

استخدم هذا لتحويل كوكو تعليقات JSON التوضيحية في تنسيق YOLO . بالنسبة لمجموعات بيانات اكتشاف الكائنات (الصندوق المحدود)، قم بتعيين كل من use_segments و use_keypoints إلى False.

from ultralytics.data.converter import convert_coco

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

للحصول على معلومات إضافية حول convert_coco الوظيفة, زيارة الصفحة المرجعية.

الحصول على أبعاد الصندوق المحيط

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

تحويل المربعات المحدودة إلى شرائح

مع وجود x y w h بيانات المربع المحدود، وتحويلها إلى شرائح باستخدام yolo_bbox2segment الوظيفة. قم بتنظيم ملفات الصور والتعليقات التوضيحية على النحو التالي:

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",
)

قم بزيارة yolo_bbox2segment الصفحة المرجعية لمزيد من المعلومات حول الوظيفة.

تحويل المقاطع إلى مربعات حدود

إذا كانت لديك مجموعة بيانات تستخدم مجموعة البيانات التي تستخدم تنسيق مجموعة بيانات التجزئة، يمكنك بسهولة تحويلها إلى مربعات محدَّدة عمودية (أو أفقية) (x y w h تنسيق) مع هذه الدالة.

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

لفهم كيفية عمل هذه الوظيفة، قم بزيارة الصفحة المرجعية.

المرافق

ضغط الصور

قم بضغط ملف صورة واحدة إلى حجم مصغر مع الحفاظ على نسبة العرض إلى الارتفاع والجودة. إذا كانت الصورة المدخلة أصغر من البعد الأقصى، فلن يتم تغيير حجمها.

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)

مجموعة بيانات التقسيم التلقائي

تقسيم مجموعة البيانات تلقائيًا إلى train/val/test التقسيمات وحفظ التقسيمات الناتجة في autosplit_*.txt الملفات. تستخدم هذه الدالة أخذ عينات عشوائية، والتي يتم استبعادها عند استخدام fraction حجة التدريب.

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
)

راجع الصفحة المرجعية للحصول على تفاصيل إضافية حول هذه الوظيفة.

قناع مضلع المقطع إلى قناع ثنائي

تحويل مضلع واحد (كقائمة) إلى قناع ثنائي بحجم الصورة المحدد. يجب أن يكون المضلع على شكل [N, 2]حيث N هو عدد (x, y) النقاط التي تحدد محيط المضلع.

تحذير

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

الصناديق المحدودة

مثيلات المربع المحيط (أفقي)

لإدارة بيانات الصندوق المحيطي، فإن Bboxes يساعد الفصل في التحويل بين تنسيقات إحداثيات المربعات، وقياس أبعاد المربعات، وحساب المساحات، وتضمين الإزاحات، والمزيد.

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]]
# )

انظر Bboxes القسم المرجعي لمزيد من السمات والطرق.

نصيحة

يمكن الوصول إلى العديد من الوظائف التالية (والمزيد) باستخدام Bboxes الفئةولكن إذا كنت تفضل العمل مع الدوال مباشرة، راجع الأقسام الفرعية التالية لمعرفة كيفية استيرادها بشكل مستقل.

صناديق التحجيم

عند تغيير حجم الصورة لأعلى أو لأسفل، يمكنك تغيير حجم إحداثيات المربع المحدود المطابق بشكل مناسب لمطابقتها باستخدام 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]]
# )

تحويلات تنسيق المربع المحدود

XYXY → XYWH

تحويل إحداثيات المربع المحدود من تنسيق (س1، ص1، س2، ص2 ، ص2) إلى تنسيق (س، ص، العرض، الارتفاع)، حيث (س1، ص1) هو الركن العلوي الأيسر و (س2، ص2) هو الركن السفلي الأيمن.

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]]
# )

جميع تحويلات المربع المحدود

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

راجع السلسلة الوثائقية لكل دالة أو قم بزيارة ultralytics.utils.ops الصفحة المرجعية لقراءة المزيد.

التخطيط

رسم التعليقات التوضيحية

يتضمن برنامج Ultralytics Annotator لشرح أنواع البيانات المختلفة. من الأفضل استخدامه مع المربعات المحددة للكشف عن الأجسام, وضع النقاط الرئيسيةو المربعات المحدودة الموجهة.

Ultralytics تعليق توضيحي شامل

أمثلة Python باستخدام 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.

مربعات الحدود الأفقية

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

يمكن استخدام الأسماء من model.names عندما العمل مع نتائج الكشف.

المربعات المحدودة الموجهة (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()

دائرة المربعات المحدودة دائرة توضيحية دائرة توضيحية دائرة التسمية



شاهد: دليل متعمق للتعليقات التوضيحية النصية والدائرية مع Python العروض التوضيحية المباشرة | Ultralytics التعليقات التوضيحية 🚀

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

نص مربعات الحدود نص التسمية التوضيحية النص التسمية النصية

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

انظر Annotator الصفحة المرجعية لمزيد من المعلومات الإضافية.

متفرقات

التنميط البرمجي

تحقق من مدة تشغيل/معالجة الكود إما باستخدام with أو كمصمم ديكور.

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 التنسيقات المدعومة

هل تحتاج إلى استخدام تنسيقات الصور أو الفيديو المدعومة برمجيًا في Ultralytics استخدم هذه الثوابت إذا لزم الأمر:

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'}

اجعلها قابلة للقسمة

احسب أقرب عدد صحيح إلى x التي تقبل القسمة بالتساوي على y.

from ultralytics.utils.ops import make_divisible

make_divisible(7, 3)
# >>> 9
make_divisible(7, 2)
# >>> 8

الأسئلة الشائعة

ما هي الأدوات المساعدة المضمنة في الحزمة Ultralytics لتحسين سير عمل التعلم الآلي؟

تتضمن حزمة Ultralytics أدوات مساعدة مصممة لتبسيط وتحسين سير عمل التعلم الآلي. تشمل الأدوات المساعدة الرئيسية التعليق التلقائي لتسمية مجموعات البيانات، وتحويل تنسيق COCO إلى تنسيق YOLO باستخدام convert_coco، وضغط الصور، والتقسيم التلقائي لمجموعة البيانات. تقلل هذه الأدوات من الجهد اليدوي وتضمن الاتساق وتعزز كفاءة معالجة البيانات.

كيف يمكنني استخدام Ultralytics لتسمية مجموعة بياناتي تلقائيًا؟

إذا كان لديك نموذج مُدرّب مسبقًا Ultralytics YOLO للكشف عن الكائنات ، يمكنك استخدامه مع SAM لتعليل مجموعة بياناتك تلقائيًا بتنسيق التجزئة. إليك مثال على ذلك:

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",
)

للمزيد من التفاصيل، راجع القسم المرجعي للتدوين التلقائي.

كيف يمكنني تحويل شروح مجموعة بيانات COCO إلى تنسيق YOLO في Ultralytics ؟

لتحويل شروح COCO JSON التوضيحية إلى تنسيق YOLO للكشف عن الكائنات، يمكنك استخدام convert_coco أداة مساعدة. إليك نموذج مقتطف رمز:

from ultralytics.data.converter import convert_coco

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

لمزيد من المعلومات، يرجى زيارة الصفحة المرجعية convert_coco.

ما هو الغرض من مستكشف البيانات YOLO في الحزمة Ultralytics ؟

إن YOLO المستكشف أداة قوية تم تقديمها في 8.1.0 تحديث لتحسين فهم مجموعة البيانات. تتيح لك استخدام الاستعلامات النصية للعثور على مثيلات الكائنات في مجموعة البيانات الخاصة بك، مما يسهل تحليل بياناتك وإدارتها. توفر هذه الأداة رؤى قيّمة حول تكوين مجموعة البيانات وتوزيعها، مما يساعد على تحسين تدريب النموذج وأدائه.

كيف يمكنني تحويل المربعات المحدودة إلى شرائح في Ultralytics ؟

لتحويل بيانات المربع المحدود الحالية (في x y w h ) إلى شرائح، يمكنك استخدام تنسيق yolo_bbox2segment الوظيفة. تأكد من تنظيم ملفاتك مع وجود دلائل منفصلة للصور والملصقات.

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",
)

للمزيد من المعلومات، يرجى زيارة الصفحة المرجعيةyolo_bbox2segment.

📅 تم إنشاؤها منذ 1 سنة مضت ✏️ تم التحديث منذ 5 أيام

التعليقات