Basit Yardımcı Programlar
Bu ultralytics
paketi, iş akışlarınızı destekleyebilecek, geliştirebilecek ve hızlandırabilecek sayısız yardımcı programla birlikte gelir. Çok daha fazlası mevcut, ancak burada çoğu geliştirici için yararlı olacak bazıları var. Bunlar ayrıca programlamayı öğrenirken kullanmak için harika bir referans noktasıdır.
İzle: Ultralytics Yardımcı Programlar | Otomatik Ek Açıklama, Explorer API ve Veri Kümesi Dönüştürme
Veri
Otomatik Etiketleme / Ek Açıklamalar
Dataset annotation is a very resource intensive and time-consuming process. If you have a YOLO object detection model trained on a reasonable amount of data, you can use it and SAM to auto-annotate additional data (segmentation format).
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",
)
-
Bu fonksiyondan hiçbir şey dönmez
-
Referans bölümüne bakınız
annotator.auto_annotate
işlevin nasıl çalıştığı hakkında daha fazla bilgi için. -
ile birlikte kullanın. fonksiyon
segments2boxes
nesne algılama sınırlayıcı kutularını da oluşturmak için
Segmentasyon Maskelerini YOLO Formatına Dönüştürme
Segmentasyon maskesi görüntülerinden oluşan bir veri kümesini YOLO
segmentasyon formatına dönüştürür.
Bu fonksiyon ikili format maske görüntülerini içeren dizini alır ve bunları YOLO segmentasyon formatına dönüştürür.
Dönüştürülen maskeler belirtilen çıktı dizinine kaydedilecektir.
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 Formatına Dönüştür
COCO JSON ek açıklamalarını uygun YOLO biçimine dönüştürmek için kullanın. Nesne algılama (sınırlayıcı kutu) veri kümeleri için, use_segments
ve use_keypoints
her ikisi de False
from ultralytics.data.converter import convert_coco
convert_coco( # (1)!
"../datasets/coco/annotations/",
use_segments=False,
use_keypoints=False,
cls91to80=True,
)
- Bu fonksiyondan hiçbir şey dönmez
Hakkında ek bilgi için convert_coco
fonksiyon, referans sayfasını ziyaret edin
Get Bounding Box Dimensions
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()))
Sınırlayıcı Kutuları Segmentlere Dönüştürme
Mevcut ile x y w h
sınırlayıcı kutu verilerini kullanarak segmentlere dönüştürün yolo_bbox2segment
işlev. Resimler ve ek açıklamalar için dosyaların bu şekilde düzenlenmesi gerekir:
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",
)
- Bu fonksiyondan hiçbir şey dönmez
Ziyaret edin yolo_bbox2segment
referans sayfası işlev hakkında daha fazla bilgi için.
Segmentleri Sınırlayıcı Kutulara Dönüştürme
kullanan bir veri kümeniz varsa segmentasyon veri kümesi formatı bunları kolayca yukarı-sağ (veya yatay) sınırlayıcı kutulara dönüştürebilirsiniz (x y w h
biçimi) bu işlev ile.
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
Bu işlevin nasıl çalıştığını anlamak için referans sayfasını ziyaret edin
Yardımcı Programlar
Görüntü Sıkıştırma
En boy oranını ve kalitesini koruyarak tek bir görüntü dosyasını küçültülmüş boyuta sıkıştırır. Giriş görüntüsü maksimum boyuttan daha küçükse, yeniden boyutlandırılmaz.
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)!
- Bu fonksiyondan hiçbir şey dönmez
Otomatik Bölünmüş Veri Kümesi
Bir veri kümesini otomatik olarak train
/val
/test
böler ve elde edilen bölmeleri autosplit_*.txt
dosyalar. Bu işlev rastgele örnekleme kullanacaktır, bu da fraction
eğitim için argüman.
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
)
- Bu fonksiyondan hiçbir şey dönmez
Bu işlev hakkında daha fazla bilgi için Referans sayfasına bakın.
Segment-poligondan İkili Maskeye
Tek bir çokgeni (liste olarak) belirtilen görüntü boyutunda bir ikili maskeye dönüştürür. Çokgen biçiminde [N, 2]
ile N
sayısı olarak (x, y)
poligon konturunu tanımlayan noktalar.
Uyarı
N
her zaman eşit olsun.
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,
)
Sınırlayıcı Kutular
Sınırlayıcı Kutu (yatay) Örnekleri
Sınırlayıcı kutu verilerini yönetmek için Bboxes
sınıfı, kutu koordinat biçimlendirmesi arasında dönüştürme yapmaya, kutu boyutlarını ölçeklendirmeye, alanları hesaplamaya, ofsetleri dahil etmeye ve daha fazlasına yardımcı olacaktır!
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]]
# )
Bkz. Bboxes
referans bölümü daha fazla nitelik ve yöntem için kullanılabilir.
İpucu
Aşağıdaki işlevlerin çoğuna (ve daha fazlasına) Bboxes
sınıf ancak fonksiyonlarla doğrudan çalışmayı tercih ederseniz, bunları bağımsız olarak nasıl içe aktaracağınıza ilişkin sonraki alt bölümlere bakın.
Ölçeklendirme Kutuları
Görüntüyü yukarı veya aşağı ölçeklendirirken, karşılık gelen sınırlayıcı kutu koordinatları uygun şekilde ölçeklendirilebilir. 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]]
# )
- Yeni görüntü boyutu için ölçeklendirilmiş sınırlayıcı kutular
Sınırlayıcı Kutu Biçim Dönüşümleri
XYXY → XYWH
Sınırlayıcı kutu koordinatlarını (x1, y1, x2, y2) biçiminden (x, y, genişlik, yükseklik) biçimine dönüştürün; burada (x1, y1) sol üst köşe ve (x2, y2) sağ alt köşedir.
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üm Sınırlayıcı Kutu Dönüşümleri
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
Her işlev için doküman dizinine bakın veya ultralytics.utils.ops
referans sayfası her bir işlev hakkında daha fazla bilgi edinmek için.
Çizim
Ek Açıklamalar Çizme
Ultralytics her türlü veriye açıklama eklemek için kullanılabilen bir Annotator sınıfı içerir. Nesne algılama sınırlama kutuları, poz anahtar noktaları ve yönlendirilmiş sınırlama kutuları ile kullanımı en kolay olanıdır.
Yatay Sınırlayıcı Kutular
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()
- İsimler şuradan kullanılabilir
model.names
ne zaman tespit sonuçları ile çalışma
Yönlendirilmiş Sınırlayıcı Kutular (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()
Bounding Boxes Circle Annotation Circle Label
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()
Bounding Boxes Text Annotation Text Label
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()
Bkz. Annotator
Referans Sayfası daha fazla bilgi için.
Çeşitli
Kod Profili Oluşturma
Kodun çalışma/işlenme süresini kontrol etmek için with
ya da dekoratör olarak.
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 Desteklenen Formatlar
Ultralytics tarafından desteklenen resim veya video türlerinin biçimlerini programlı olarak kullanmak istiyor veya buna ihtiyaç duyuyor musunuz? İhtiyacınız varsa bu sabitleri kullanı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'}
Bölünebilir Yap
En yakın tam sayıyı hesaplar x
ile bölündüğünde eşit olarak bölünebilir hale getirmek için y
.
from ultralytics.utils.ops import make_divisible
make_divisible(7, 3)
# >>> 9
make_divisible(7, 2)
# >>> 8
SSS
What utilities are included in the Ultralytics package to enhance machine learning workflows?
Ultralytics paketi, makine öğrenimi iş akışlarını kolaylaştırmak ve optimize etmek için tasarlanmış çeşitli yardımcı programlar içerir. Temel yardımcı programlar arasında veri kümelerini etiketlemek için otomatik açıklama, convert_coco ile COCO'yu YOLO formatına dönüştürme, görüntüleri sıkıştırma ve veri kümesini otomatik bölme yer alır. Bu araçlar manuel çabayı azaltmayı, tutarlılığı sağlamayı ve veri işleme verimliliğini artırmayı amaçlamaktadır.
Veri kümemi otomatik etiketlemek için Ultralytics adresini nasıl kullanabilirim?
Önceden eğitilmiş bir Ultralytics YOLO nesne algılama modeliniz varsa, bunu SAM modelini kullanarak veri kümenizi segmentasyon biçiminde otomatik olarak tanımlayabilirsiniz. İşte bir örnek:
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",
)
Daha fazla ayrıntı için auto_annotate referans bölümüne bakın.
COCO veri seti ek açıklamalarını Ultralytics adresinde YOLO formatına nasıl dönüştürebilirim?
COCO JSON ek açıklamalarını nesne algılama amacıyla YOLO biçimine dönüştürmek için convert_coco
yardımcı program. İşte örnek bir kod parçacığı:
from ultralytics.data.converter import convert_coco
convert_coco(
"../datasets/coco/annotations/",
use_segments=False,
use_keypoints=False,
cls91to80=True,
)
Daha fazla bilgi için convert_coco referans sayfasını ziyaret edin.
Ultralytics paketindeki YOLO Veri Gezgini'nin amacı nedir?
Bu YOLO Kaşif 'de tanıtılan güçlü bir araçtır. 8.1.0
veri kümesi anlayışını geliştirmek için güncelleyin. Veri kümenizdeki nesne örneklerini bulmak için metin sorguları kullanmanıza olanak tanıyarak verilerinizi analiz etmenizi ve yönetmenizi kolaylaştırır. Bu araç, veri kümesi kompozisyonu ve dağılımı hakkında değerli bilgiler sağlayarak model eğitimini ve performansını iyileştirmeye yardımcı olur.
Sınırlayıcı kutuları Ultralytics adresinde segmentlere nasıl dönüştürebilirim?
Mevcut sınırlayıcı kutu verilerini dönüştürmek için (içinde x y w h
biçiminde) segmentlere dönüştürmek için yolo_bbox2segment
işlev. Dosyalarınızın resimler ve etiketler için ayrı dizinlerle düzenlendiğinden emin olun.
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",
)
Daha fazla bilgi için yolo_bbox2segment referans sayfasını ziyaret edin.