المرافق البسيطة
إن ultralytics
تأتي الحزمة مع عدد لا يحصى من الأدوات المساعدة التي يمكن أن تدعم وتعزز وتسرع من سير عملك. هناك الكثير من الأدوات المتاحة الأخرى، ولكن إليك بعض الأدوات التي ستكون مفيدة لمعظم المطورين. إنها أيضًا نقطة مرجعية رائعة لاستخدامها عند تعلم البرمجة.
شاهد: Ultralytics الأدوات المساعدة | التعليق التلقائي وواجهة برمجة تطبيقات المستكشف وتحويل مجموعة البيانات
البيانات
التسمية التلقائية/التعليقات التوضيحية
تعتبر عملية شرح مجموعة البيانات عملية تستهلك الكثير من الموارد وتستغرق وقتًا طويلاً. إذا كان لديك نموذج YOLO للكشف عن الكائنات تم تدريبه على كمية معقولة من البيانات، يمكنك استخدامه و SAM للتعليل التلقائي للبيانات الإضافية (تنسيق التجزئة).
from ultralytics.data.annotator import auto_annotate
auto_annotate( # (1)!
data="path/to/new/data",
det_model="yolo11n.pt",
sam_model="mobile_sam.pt",
device="cuda",
output_dir="path/to/save_labels",
)
-
لا شيء يعود من هذه الدالة
-
راجع القسم المرجعي للاطلاع على
annotator.auto_annotate
لمزيد من المعلومات حول كيفية عمل الوظيفة. -
يُستخدم مع الوظيفة
segments2boxes
لتوليد مربعات حدودية للكشف عن الأجسام أيضًا
تحويل أقنعة التجزئة إلى تنسيق YOLO
يُستخدم لتحويل مجموعة بيانات من صور قناع التقسيم إلى 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( # (1)!
"../datasets/coco/annotations/",
use_segments=False,
use_keypoints=False,
cls91to80=True,
)
- لا شيء يعود من هذه الدالة
للحصول على معلومات إضافية حول convert_coco
الوظيفة, زيارة الصفحة المرجعية
الحصول على أبعاد الصندوق المحيط
from ultralytics.utils.plotting import Annotator
from ultralytics import YOLO
import cv2
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("Bounding Box Width {}, Height {}, Area {}".format(
width.item(), height.item(), 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( # (1)!
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) # (1)!
- لا شيء يعود من هذه الدالة
مجموعة بيانات التقسيم التلقائي
تقسيم مجموعة البيانات تلقائيًا إلى train
/val
/test
التقسيمات وحفظ التقسيمات الناتجة في autosplit_*.txt
الملفات. ستستخدم هذه الوظيفة أخذ عينات عشوائية، والتي لا يتم تضمينها عند استخدام fraction
حجة التدريب.
from ultralytics.data.utils import autosplit
autosplit( # (1)!
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) # (1)!
# >>> 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 يتضمن فئة شارح يمكن استخدامها لتعليق أي نوع من البيانات. من الأسهل استخدامها مع المربعات المحدِّدة لاكتشاف الأجسام، ونقاط الوضعية الرئيسية، والمربعات المحدِّدة الموجهة.
Ultralytics تعليق توضيحي شامل
Python أمثلة باستخدام YOLO11 🚀
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
# User defined video path and model file
cap = cv2.VideoCapture("Path/to/video/file.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 = Annotator(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 = { # (1)!
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.utils.plotting import Annotator
model = YOLO("yolo11s.pt")
names = model.names
cap = cv2.VideoCapture("path/to/video/file.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 = Annotator(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)])
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.utils.plotting import Annotator
model = YOLO("yolo11s.pt")
names = model.names
cap = cv2.VideoCapture("path/to/video/file.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 = Annotator(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)])
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.