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

أدوات بسيطة

الكود مع المنظور

في 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

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

from ultralytics.data.converter import convert_coco

convert_coco(
    "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 class يساعد في التحويل بين تنسيقات إحداثيات المربعات، وتوسيع أبعاد المربع، وحساب المساحات، وتضمين الإزاحات، والمزيد.

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

تحويل إحداثيات المربع المحيط من تنسيق (x1, y1, x2, y2) إلى تنسيق (x, y, width, height)، حيث (x1, y1) هي الزاوية العلوية اليسرى و (x2, y2) هي الزاوية السفلية اليمنى.

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 class لترميز أنواع البيانات المختلفة. يُفضل استخدامه مع المربعات المحيطة للكشف عن الكائنات, النقاط الرئيسية للوضعية، و الصناديق المحيطة الموجهة.

شرح الصندوق

أمثلة بايثون باستخدام 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),
        rotated=True,
    )

image_with_obb = ann.result()

يمكن استخدام الأسماء من model.names عندما العمل مع نتائج الكشف. انظر أيضًا Annotator صفحة مرجعية للحصول على رؤى إضافية.

شرح Ultralytics لبيانات الكُنس

التعليق التوضيحي الشامل باستخدام أدوات 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()

ابحث عن تفاصيل إضافية حول sweep_annotator الطريقة في قسم المراجع الخاص بنا هنا.

شرح التسمية التكيفي

تحذير

بدءاً من Ultralytics v8.3.167, circle_label و text_label تم استبدالها بـ adaptive_label الدالة. يمكنك الآن تحديد نوع التعليق التوضيحي باستخدام الدالة shape argument:

  • مستطيل: annotator.adaptive_label(box, label=names[int(cls)], color=colors(cls, True), shape="rect")
  • الدائرة: annotator.adaptive_label(box, label=names[int(cls)], color=colors(cls, True), shape="circle")



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

شرح التسمية التكيفي باستخدام أدوات 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)[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()

انظر إلى SolutionAnnotator صفحة مرجعية للحصول على رؤى إضافية.

متفرقات

تحليل التعليمات البرمجية

تحقق من المدة التي يستغرقها تشغيل/معالجة التعليمات البرمجية إما باستخدام 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",
)

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

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

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

from ultralytics.data.converter import convert_coco

convert_coco(
    "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.



📅 أُنشئ منذ سنة واحدة ✏️ تم التحديث منذ يوم واحد

تعليقات