Ultralytics YOLO'da Python'dan Rust'a görsel döşemeyle küçük nesne algılama
Görsel döşemenin YOLO'nun küçük nesneleri algılamasına ne zaman yardımcı olduğunu gör, maliyetlerini karşılaştır ve SAHI olmadan Python veya Rust'ta yerleşik döşemeli çıkarımı çalıştır.
Onuralp Sezer12 dakikalık okuma
Sıradan fotoğraflarda gayet iyi çalışan bir algılayıcı, neden drone görüntüsündeki insanların çoğunu kaçırır? Bunun nedeni çoğu zaman onları gerçek boyutlarında hiç görmemesidir. Varsayılan imgsz=640 değerinde Ultralytics YOLO, model görüntüye bakmadan önce 1920 x 1080 boyutundaki kareyi üç kez küçültür; bu yüzden 15 piksel boyundaki bir yaya yaklaşık 5 piksel boyunda kalır.
Görsel döşeme, tam çözünürlüklü görüntünün üst üste binen pencerelerinde modeli çalıştırıp sonuçları birleştirerek küçük nesne ayrıntılarını koruyabilir. Belgelerimizdeki bir VisDrone karesinde Ultralytics YOLO26s algılama sayısını 35'ten 161'e çıkardı. Bunun bedeli, kare başına daha fazla işlem yapılmasıdır: o kare için tek görüntü yerine sekiz karo girdisi.
Döşeme artık dağıtımın her iki tarafında da yerleşik. Python paketi, 6 Kasım'da Ultralytics 8.4.204 sürümünden bu yana tile bağımsız değişkenini sunuyor; Rust crate'i ise 9 Kasım'da Ultralytics Inference 0.0.57 sürümünde --tile bayrağını ekledi. Bu kılavuz, döşemenin küçük nesneleri ne zaman ortaya çıkardığını, maliyetini ve her iki ortamda nasıl çalıştırılacağını anlatıyor.
Yeniden boyutlandırma küçük nesneleri gizler#
Küçük nesne algılama basit bir nedenle zordur: bir nesne yalnızca sahip olduğu piksellere sahiptir. Bir nesne algılama modeli, her nesne başına bir avuç pikselden şekilleri öğrenir; tüm kare en uzun kenarı 640 piksele inecek şekilde küçültüldüğünde uzaktaki insanlar, araçlar ve kusurlar, ağın dokudan ve gürültüden ayırt edebileceği boyutun altına düşer.
Bu durumu en çok hava görüntülerinde, uydu görüntüsü analizinde, geniş açılı trafik ve güvenlik kameralarında ve yüksek çözünürlüklü inceleme fotoğraflarında görürsün. VisDrone, yaygın olarak kullanılan açık bir hava görüntüsü kıyaslama veri kümesidir: belgelerinde, karede genellikle yalnızca birkaç düzine piksel kaplayan nesnelerin yoğun ve büyük ölçüde örtüşen gruplar hâlinde bulunduğu açıklanır.
Döşeme bu pikselleri korur. tile değerini modelin giriş boyutuna ayarladığında model, küçültülmüş kare üzerinde tek geçiş yapmak yerine doğal çözünürlükte birkaç pencere görür. Bu yaklaşım, yazarlarının VisDrone ve xView hava görüntüsü veri kümelerinde değerlendirdiği ve SAHI makalesinde kırpma destekli hiper çıkarım olarak adlandırılan yöntemdir.
Yüksek Çözünürlüklü Döşeme kılavuzunda, varsayılan güven eşiğinde 1920 x 1080 boyutundaki bir VisDrone karesinde YOLO26s, görüntünün tamamında imgsz=640 değerinde 35 algılama; tile=640 ile uzaktaki yayalar, bisikletliler ve arabalar da dâhil 161 algılama üretir. Kılavuz iki görüntüyü yan yana gösterir. Bunlar puanlanmış bir değerlendirmenin değil, tahminlerin sayısıdır. Her iki sayıda da aynı ağırlıklar kullanılmıştır; döşeme ayrıca her pencerenin gördüğü bağlamı da değiştirmiştir.

İkinci bir 1920 x 1080 VisDrone doğrulama karesi; varsayılan güven değerinde YOLO26s: imgsz=640 ile tüm karede 8 algılama, tile=640 ile 128 algılama. Yolun kırpılmış görünümü, sınıf etiketi olmayan kutular.
Döşeme, her pencere için bir model girdisi ekler#
Kılavuz, pencereleme yöntemini kesin olarak tanımlar. Pencereler temel olarak %20 oranında üst üste biner ve son satır ile sütun görüntü sınırına hizalanır; bu nedenle kenardaki pencereler daha fazla örtüşebilir. Pencereden küçük bir görüntü için tek bir tam görüntü penceresi kullanılır.
Böylece maliyeti kolayca tahmin edebilirsin. tile=640 değerindeki 1920 x 1080 karede, yatayda dört ve dikeyde iki olmak üzere sekiz pencere çalışır. tile=1280 değerindeki 3840 x 2160 karede de sekiz pencere çalışır. Aynı %20 kuralını tile=640 değerindeki 3840 x 2160 kareye uygulamak, yatayda sekiz ve dikeyde dört sıra, yani 32 pencere verir; dolayısıyla 4K karede pencere boyutunu yarıya indirmek karo girdilerini dört katına çıkarır.

1920 x 1080 karede tile=640 değerinin kullandığı sekiz pencere: sütunlar x = 0, 512, 1024 ve 1280 noktalarından; satırlar y = 0 ve 440 noktalarından başlar. Gölgelendirilmiş şeritler birden fazla pencere tarafından görülür.
Toplu işleme, bu girdilerin modele nasıl ulaştığını değiştirir. Python'da batch, tek bir çıkarım çağrısında modelden birlikte geçen pencere sayısını belirler; Rust crate'i de dinamik toplu iş dışa aktarımında --batch ile aynı işi yapar. Toplu işleme verimi artırabilir, ancak gecikmeyi kendi donanımında ölç; Ultralytics YOLO ile toplu çıkarım kılavuzumuz bunun nedenini açıklar.
Küçük nesnelere daha fazla piksel sağlamak için döşemenin diğer yöntemlerle karşılaştırması şöyle:
| Yaklaşım | 1920 x 1080 kare için model girdileri | Modelin gördüğü | En uygun olduğu durum |
|---|---|---|---|
Tüm görüntü, imgsz=640 | 1 | Kare 3 kat küçültülür | Yeniden boyutlandırma sonrasında nesneler net biçimde görünür kalır |
Tüm görüntü, imgsz=1280 | 1; 640'a kıyasla yaklaşık 4 kat hesaplama maliyeti | Kare 1,5 kat küçültülür | Bellek ve gecikme daha büyük bir girişe olanak tanır |
tile=True ve imgsz=640 | 8 | Doğal çözünürlükte 640 piksellik pencereler | Model girişinden birkaç kat büyük görüntüler |
tile=400 ve imgsz=640 | 8'den fazla | 640 piksele büyütülen pencereler | Doğal çözünürlükte bile yalnızca birkaç piksel genişliğindeki nesneler |
Her karo normal boyutta bir model girdisidir; bu nedenle döşeme, imgsz değerini artırmadan çok büyük görüntüleri işler. Maske ve derinlik haritası gibi kaynak boyutundaki çıktılar için yine de orijinal görüntüyle orantılı bellek gerekir; max_det ise tutulan örnek maskesi sayısını sınırlar.
Döşemenin yararlı olduğu ve olmadığı durumlar#
Nesneler kareye göre küçük ve kare model girdisinden çok daha büyük olduğunda döşeme işe yarar. Drone ve uydu görüntüleri, kuş bakışı trafik görüntüleri, kalabalıklar, geniş açıyla fotoğraflanmış mağaza rafları ve tüm devre kartlarını ya da panelleri gösteren görsel inceleme görüntüleri bu kapsama girer.
Nesneler büyük olduğunda ise olumsuz sonuç verir. Karenin yarısını kaplayan bir kamyonun yalnızca bir bölümünü gören pencere soruna yol açar; kılavuz bunu açıkça belirtir: örtüşmeden büyük nesneler yine de bölünebilir, çünkü hiçbir pencere nesnenin tamamını görmez ve birleştirme ayrı parçaları birleştirmez. Ayrıca, karo çıktılarının görüntünün farklı bölümlerinde birbiriyle uyuşmayabileceği sınıflandırma ve derinlik görevlerinde en çok önem taşıyan genel bağlamı da ortadan kaldırır.
Daha küçük pencereler bir ödünleşimi daha beraberinde getirir. 400 piksellik bir pencereyi 640 piksele büyütmek, yalnızca birkaç piksel genişliğindeki nesnelere yardımcı olur; ancak arka plan karmaşasını da büyüterek yanlış pozitiflere yol açabilir. Kendi doğrulama kümen üzerinde iki veya üç karo boyutunu karşılaştır ve kesinliği duyarlılıkla birlikte izle.
Karoların tek bir sonuca nasıl birleştirildiği#
Her pencere, kendi pencere koordinatlarında tahminler üretir. Döşeme, tahminleri kaynak görüntüye eşler ve her özgün görüntü için bir Results nesnesi döndürür; böylece result.boxes öğesini okuyan sonraki kodlar değişiklik yapmadan çalışır.
Örtüşme, dikiş çizgisine yakın bir nesnenin iki kez algılanabileceği anlamına gelir. Algılama görevinde kopyalar, iou, agnostic_nms ve max_det ayarların kullanılarak maksimum olmayanların bastırılması yöntemiyle elenir; dolayısıyla NMS IoU eşiğini ayarlama kılavuzumuz döşenmiş çıktıya doğrudan uygulanır. Bir pencere kenarının kestiği kutu, başka bir pencere nesneyi kenarlardan uzakta görür ve tutulan bir kutu onu kapsarsa elenir; böylece dikiş çizgisinde daha eksiksiz tahmin korunur. Daha iyi bir eşleşmesi olmayan kesilmiş kutu ise tutulur.

Aynı karede y = 640 noktasında dikiş çizgisinin nasıl işlendiğini gösteren bir çizim. Camgöbeği kutular üst sıra pencerelerinin alt kenarı tarafından kesilmiştir; eflatun kutular alt sıra pencerelerinden gelir ve sağ panelde birleştirme sonrasında her araba için tutulan daha eksiksiz kutu gösterilir.
Her Ultralytics YOLO görevi kendi birleştirme yöntemini kullanır:
- Algılama, segmentasyon, poz ve OBB, kutuları, maskeleri, anahtar noktaları veya döndürülmüş kutuları kaynak koordinatlarına geri taşır ve kutu seçimi uygular; OBB için döndürülmüş NMS kullanılır.
- Anlamsal segmentasyon, sınıf haritalarını birleştirir ve pencerelerin örtüştüğü yerlerde en merkezi karoyu seçer.
- Derinlik, örtüşen derinlik haritalarını, her karonun merkezine yaklaştıkça artan ağırlıklarla harmanlar.
- Sınıflandırma, karo olasılıklarının ortalamasını alır.
Python işlem hattı, tahmin için YOLO-World, YOLOE, RT-DETR ve FastSAM modellerini de döşer. SAM kendi kırpma işlem hattını kullanır ve tile kabul etmez.
Python'da tile bağımsız değişkeniyle döşemeli çıkarım#
Döşeme için Ultralytics 8.4.204 veya üzeri ve ek paket gerekmez. Tahmin modunda, pencere boyutu olarak imgsz değerini kullanmak için tile=True öğesini; pencere boyutunu ayrı belirlemek içinse bir tam sayı geçir:
from ultralytics import YOLO
model = YOLO("yolo26s.pt")
# Temel durum: kare 640 piksele küçültülerek tek geçişte işlenir
full = model.predict("intersection.jpg", imgsz=640)
# Döşemeli: doğal çözünürlükte 640 piksellik pencereler, toplu iş başına 8 pencere
tiled = model.predict("intersection.jpg", imgsz=640, tile=640, batch=8)
print(len(full[0].boxes), len(tiled[0].boxes))Aynı bağımsız değişken CLI üzerinden yolo predict model=yolo26s.pt source=large-image.tif tile=640 imgsz=640 batch=8 ile çalışır. Video için belleği sınırlı tutmak üzere stream=True değerini geçir. İzleme modunda, izleyici birleştirilmiş tahminler üzerinde kare başına bir kez çalışır.
Döşeme yalnızca tahmin için kullanılmaz. Görüntülerin imgsz değerinden çok daha büyük olduğu durumlarda eğitim ve doğrulamayı da aynı ayarla yap:
model.train(data="aerial.yaml", tile=True, imgsz=640)ile karolar üzerinde eğit. Etiketler her pencereye kırpılır; özgün kutu alanının %10'undan azı kalan örnekler kaldırılır ve boş pencereler negatif örnek olarak tutulur.model.val(data="aerial.yaml", tile=True, imgsz=640)ile birleştirilmiş sonuçlar üzerinde doğrula. Tahminler, özgün anotasyonlara göre puanlanmadan önce birleştirilir; böylece mAP dağıtacağın sistemi yansıtır.- Eğitim karoları karıştırdığı ve aksi durumda aynı büyük görüntüyü birçok kez çözmesi gerekeceği için
cache="ram"ile büyük kaynakları önbelleğe al. - Döşemeli modeli kullanmaya karar vermeden önce aynı doğrulama bölmesinde tüm görüntüyle elde edilen temel sonuçla karşılaştır. Küçük nesnelerde puanları yükseltmenin başka yolları için küçük nesneler için mAP kontrol listemize bak.
Karolarla eğitim, döşemeli tahmin sırasında göreceği ölçekteki nesneleri modele gösterir. Drone algılama veri kümesi kılavuzumuz, 4K karelerde bu eğitim, döşeme ve değerlendirme döngüsünün tamamını adım adım anlatır.
Dışa aktarılan modeller de döşenir. Döşeme Python tahmin işlem hattında çalıştığı için ONNX veya TensorRT biçimine dışa aktarılan bir model normal giriş grafiğini korur ve YOLO("yolo26s.onnx").predict(source, tile=640) her zamanki gibi çalışır; buna sabit dışa aktarma toplu iş boyutları ve son kısmi toplu iş de dâhildir.

Ultralytics Platform'daki VisDrone veri kümesi, kendi verilerin etiketlenmeden önce karo boyutlarını test etmeye hazır bir kıyaslama veri kümesidir.
Önce herkese açık verilerde karo boyutlarını denemek için Ultralytics Platform'daki VisDrone veri kümesiyle başla. Döşemeli çalıştırmayı temel sonuçlarınla birlikte izlemek için Platform eğitim iletişim kutusundaki Yerel Eğitim komutunu kopyala, project değerini temel çalıştırmanın Platform projesine ayarla ve döşemeli çalıştırmanın metriklerini oraya aktarmak için tile=True ekle.
Yeni --tile bayrağıyla Rust'ta döşemeli çıkarım#
Ultralytics Inference, dışa aktarılan ONNX modellerini ONNX Runtime üzerinden ve OpenVINO IR modellerini yerel olarak, çıkarım sırasında Python çalışma zamanı gerektirmeden çalıştırmak için geliştirdiğimiz Rust crate'i ve CLI aracıdır. CPU, CUDA, TensorRT, CoreML, OpenVINO ve diğer yürütme sağlayıcılarını kullanan sunucuları, kapsayıcıları ve uç cihazları hedefler. 0.0.57 sürümü, Python'dakiyle aynı döşeme yaklaşımını getirir: temel olarak %20 pencere örtüşmesi, sonuçların kaynak görüntüye eşlenmesi ve kopyaların sınıf başına elenmesi.

Görsel temsilidir. Rust crate'inin hedeflediği, Python gerektirmeyen dağıtım türüne örnek bir uç bilgisayar takılı yol kenarı kamerası.
Ekip, görüntüler, videolar ve web kameraları için ONNX Runtime CPU, OpenVINO CPU, GPU ve NPU, CUDA ve TensorRT üzerinde döşemeli çıktıları Ultralytics Python ile karşılaştırdı. Algılama, segmentasyon, anlamsal segmentasyon, derinlik, sınıflandırma, poz ve OBB modellerinin tümü desteklenir.
CLI üzerinden pencere boyutunu belirterek --tile ekle veya --imgsz değerini kullanmak için bayrağı değersiz geçir. Modeli dışa aktarma tek seferlik bir Python adımıdır; çıkarımın kendisi için yalnızca Rust ikili dosyası gerekir:
# One-time export in Python: a dynamic-batch ONNX model so several windows run per call
pip install -U "ultralytics[export-base]>=8.4.204"
yolo export model=yolo26s.pt format=onnx dynamic=True
# Install the Rust CLI
cargo install ultralytics-inference
# Tiled inference on a large image: 640-pixel windows, 8 per batch
ultralytics-inference predict --model yolo26s.onnx --source aerial.jpg --tile 640 --batch 8Kitaplık olarak, döşemeyi InferenceConfig içinde bir kez ayarla; her predict çağrısı döşemeli çalışır. with_tile(0), çıkarım boyutunu kullanır:
use ultralytics_inference::{InferenceConfig, YOLOModel};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = InferenceConfig::new().with_tile(640);
let mut model = YOLOModel::load_with_config("yolo26s.onnx", config)?;
let results = model.predict("aerial.jpg")?;
if let Some(ref boxes) = results[0].boxes {
println!("{} detections", boxes.len());
}
Ok(())
}Pencereler arasında kalan kopya kutular, yapılandırılmış --iou değeriyle sınıf başına NMS uygulanarak elenir. Aynı sürüm itibarıyla varsayılan değer 0,5'tir ve Ultralytics tahmin varsayılanlarıyla eşleşir. Döşeme varsayılan olarak kapalıdır, çünkü her pencere yeni bir model girdisidir. Ayrıntının önemli olduğu yerlerde etkinleştir, hedef cihazda çıkarım gecikmesini ölç ve uygun yürütme sağlayıcısını seç; ONNX ve TensorRT karşılaştırmamız NVIDIA donanımında seçim yapmana yardımcı olur, NVIDIA Jetson kılavuzu ise cihaz üzerindeki kurulumu anlatır.
SAHI kullanıcıları yerleşik tile bağımsız değişkenine geçebilir#
Görüntüleri zaten SAHI kitaplığıyla dilimliyorsan yerleşik bağımsız değişken, ikinci bir paket veya ayrı bir sonuç biçimi gerektirmeden aynı işi Ultralytics içinde yapar. SAHI entegrasyon kılavuzumuz artık tile lehine kullanımdan kaldırılmıştır.
Bir SAHI betiğini taşımak için çoğunlukla bağımsız değişkenleri değiştirmen yeterlidir:
| SAHI | Yerleşik döşeme |
|---|---|
AutoDetectionModel.from_pretrained(model_type="ultralytics", ...) | YOLO("yolo26s.pt") |
get_sliced_prediction(image, model, slice_height=256, slice_width=256, ...) | model.predict(image, tile=256) |
overlap_height_ratio, overlap_width_ratio | Sabit temel %20 örtüşme; kenar pencereleri görüntü sınırına hizalanır |
SAHI PredictionResult | Standart Ultralytics Results |
Pencereler karedir; örtüşme ve birleştirme, SAHI'nin yapılandırılabilir son işleminden ziyade yukarıda açıklanan kurallara uyar. Bu nedenle kutuların aynı değil, benzer olmasını bekle. Geçiş yaptıktan sonra doğrulama kümesindeki eşiklerini yeniden kontrol et.
Pratik fark, entegrasyondur. tile, aynı bağımsız değişkenle Ultralytics eğitimine, doğrulamasına, tahminine ve izleme işlemine eklenir; standart Results nesneleri döndürür ve Rust crate'inde karşılık gelen bir seçeneği vardır. Böylece not defterinde doğruladığın karo boyutunu uç cihazdaki Rust ikili dosyasına taşıyabilirsin.
Döşemeyi kimler etkinleştirmeli#
Ultralytics YOLO'yu model girişinden birkaç kat büyük görüntülerde kullanıyorsan ve doğrulaman küçük nesnelerin kaçırıldığını gösteriyorsa döşemeyi etkinleştir: drone ve uydu ekipleri, geniş açılı kameralar kullanan trafik ve güvenlik entegratörleri ve tüm devre kartlarını, panelleri veya rafları fotoğraflayan inceleme ekipleri. Rust kullanıcıları aynı döşeme yaklaşımından, uç donanımda Python çalışma zamanı olmadan yararlanır.
Nesneler kareye göre büyükse, daha büyük bir imgsz onları tek geçişte zaten yakalıyorsa veya gecikme bütçen kare başına birden fazla karo girdisini kaldıramıyorsa döşemeyi kapalı tut. Her durumda döşemeli ve tüm görüntü sonuçlarını aynı doğrulama bölmesinde, aynı güven eşiğinde karşılaştır; duyarlılığı, yanlış pozitifleri ve gecikmeyi incele. Döşemeyi yalnızca kazancı ek iş yüküne değdiği durumlarda kullan.
Ultralytics Platform bu karşılaştırmayı tek bir yerde yapmanı sağlar: kendi yüksek çözünürlüklü görüntülerini etiketle veya VisDrone ile başla, bulut GPU'larında tüm görüntüyü kullanan bir temel model eğit, daha büyük bir imgsz değerinde başka bir temel model eğit ve kendi bilgisayarından aynı projeye döşemeli bir çalıştırmanın günlüklerini aktar. Yüksek Çözünürlüklü Döşeme kılavuzu döşeme seçeneklerini ayrıntılandırır; Ultralytics Inference belgeleri ise Rust dağıtımını açıklar.
Hem Python paketi hem de Rust crate'i AGPL-3.0 kapsamında sunulur. Döşemeli algılama kapalı kaynaklı bir üründe veya müşterilere gönderdiğin bir uç cihazda kullanılacaksa Ultralytics Kurumsal Lisansı, koşullarına tabi olarak, kapsanan Ultralytics yazılımlarını AGPL-3.0 kaynak kodu açıklama gereklilikleri olmadan ticari amaçlarla kullanmana izin verir.
Sık sorulan sorular
Görsel döşeme, büyük bir görüntüyü üst üste binen pencerelere ayırır, algılayıcıyı her pencerede çalıştırır ve kutuları özgün görüntü üzerinde birleştirir. Pencere modelin giriş boyutuyla eşleştiğinde, küçük nesneler tüm görüntü yeniden boyutlandırılsaydı kaybedecekleri pikselleri korur. Ultralytics YOLO'da
tilebağımsız değişkeni bunu temel olarak %20 örtüşmeyle yapar ve görüntü başına tek bir sonuç döndürür.Önce sorunun yeniden boyutlandırma olup olmadığını kontrol et: nesneler
imgsz=640değerinde birkaç piksele kadar küçülüyorsa daha büyük birimgszveyatile=Truedeğerini dene. Modelin nesneleri dağıtım ölçeğinde öğrenmesi için tahmin sırasında kullanacağın ayarla eğit ve boyut ile sınıf bazında doğrula. Döşeme, modelin girişinden birkaç kat büyük görüntüler için uygundur.Her pencere için bir model girdisi ekler:
tile=640değerindeki 1920 x 1080 kare, tek görüntü yerine sekiz karo girdisi üretir. Python'dabatchveya Rust'ta dinamik toplu iş dışa aktarımıyla--batchkullanarak birkaç karoyu tek bir toplu çağrıda çalıştırmak verimi artırabilir. Gecikmeyi hedef donanımında ölç.Hayır. Ultralytics 8.4.204 sürümünden bu yana yerleşik
tilebağımsız değişkeni, ek paket gerektirmeden dilimlemeli çıkarım yapar; ayrıca eğitim, doğrulama ve izleme işlemlerini de döşer. Belgelerimizdeki SAHI kılavuzu,tilelehine kullanımdan kaldırılmıştır.Evet. Python'da dışa aktarılan modeller normal giriş grafiklerini korur ve her zamanki gibi
tiledeğerinipredictöğesine geçirirsin. Rust'ta Ultralytics Inference 0.0.57, CLI'ye--tileveInferenceConfigöğesinewith_tileekler; bunlar ONNX Runtime CPU, OpenVINO, CUDA ve TensorRT üzerinde Python ile karşılaştırılarak doğrulanmıştır.Pencere boyutu olarak
imgszkullanantile=Trueile başla. Nesneler yerel çözünürlükte bile yalnızca birkaç piksel genişliğindeyseimgsz=640ile birliktetile=400gibi daha küçük bir pencere, nesnelerin dikiş noktalarında kesilme riski varsa daha büyük bir pencere kullan. Doğrulama kümen üzerinde birkaç boyutu karşılaştırırken hem duyarlılığı hem de yanlış pozitifleri takip et.
Yazan
Yorumlar
Soru sor, sonuçlarını paylaş veya başka birine yardım et.










