Nvidia Jetson Ailesi Nesne Tespiti Hız Karşılaştırması

Home Technology Nvidia Jetson Ailesi Nesne Tespiti Hız Karşılaştırması

Nesne tespiti, en temel fakat en zorlayıcı bilgisayarlı görü uygulamalardan biridir. Nesneleri tespit etmekle kalmayıp aynı zamanda sınıflandıran nesne tespit modelleri, güvenlik, fabrikasyon, sağlık ve otomasyon gibi yüzlerce alanda kullanılmaktadır.

Araştırmacılar bu konuda yıllarca çalışmış ve birçok farklı yöntem geliştirilmiştir. İlk yıllarda, önce görüntüde nesne olabilecek bölgeleri bulan(Object Proposal) ve ardından bu bölgeler üzerinde tespit ve sınıflandırma işlemi yapan, yani iki adımlı çalışan, doğruluk açısından tatmin edici olsa da hız konusunda gerçek hayat uygulamaları için yetersiz kalan R-CNN gibi modeller önerildi. Ertesi yıllarda, tespit ve sınıflandırma işlemini tek adımda yapabilen SSD ve YOLO gibi modellerin önerilmesi ile hız konusundaki bu açık kapatılmış ve doğruluk açısından da gelişme sağlanmıştır. Günümüze kadar farklı araştırmacılar tarafından YOLO’nun üzerine eklemeler yapılarak YOLOv2, YOLOv3, YOLOv4 ve YOLOv5 sürümleri önerilmiş ve YOLOv5 nesne tespiti için en başarılı model haline gelmiştir. YOLOv5, model karmaşıklığı açısından farklılık gösteren ve yapılacak uygulama için hız-doğruluk trade-off’u sağlayan s, m, l ve x varyasyonlarına sahiptir.

YOLO Model Mimarisi

Bir modelin hızı, saniyede ard arda kaç görsel üzerinde nesne tespit işlemi gerçekleştirebildiği ile ölçülebilir. Tespit hızının olabildiğince fazla olması istenen bir durumdur. Grafik işlemcileri, aynı anda birden çok işlem yapmak için çok uygundur. bu sebeple görseller gruplanarak GPU'ya gönderilir ve tüm görseller üzerinde tek seferde tespit işlemi yapılarak hız artışı sağlanabilir. Görsellerin gruplanmış haline "Batch" denir. Batch’in boyutu kaç adet görsel içerdiği ile ifade edilir. Batch boyutu arttıkça, görsel başına harcanan tespit süresi azalır yani FPS artışı sağlanır. Fakat batch boyutunun artması görsellerin gruplandırılma süresini de arttıracağından hızı düşürebilir. Yani batch boyutu dikkat edilmesi gereken bir parametredir. Aynı zamanda modellerin ağırlıkları üzerine uygulanan nicemleme yöntemleri ile yüksek hız artışı sağlanabilir. Az da olsa doğruluktan ödün vererek, model ağırlıklarına yapılan bu sıkıştırma işlemi TensorRT ve ONNX gibi yöntemler ile gerçekleştirilebilir.

Bu yazıda, gelecek uygulamalarda, hangi Jetson cihazı üzerinde, hangi modelin kullanılacağına karar verilmesini sağlaması adına, farklı nicemleme yöntemlerinin farklı batch size’lar ile hızlarını karşılaştıracağız. Model olarak COCO veri seti ile eğitilmiş YOLOv5s ve model nicemlemesi için TensorRT kullanıldı. Testler, Jetson Nano, Jetson NX Xavier, Jetson AGX Xavier ve Nvidia GTX1650 Mobile üzerinde yapıldı.

Nvidia Jetson Nano

Jetson ailesinin en küçük ve en kolay ulaşılabilir üyesi olan Jetson Nano, 128 çekirdekli grafik işlemcisi ve 4 çekirdekli işlemcisi ile kişisel projeler ve küçük çaplı yapay zeka çalışmaları için hala en iyi seçeneklerden birisi. RAM seçenekleri olarak 2GB ve 4GB modeli bulunan bu geliştirici kartı üzerindeki testlerimizi 4GB’lık versiyonu kullanarak yaptık. Herhangi bir nicemleme yöntemi kullanmadan, PyTorch kütüphanesi ile çalıştırdığımız YOLOv5s modelinde 5 FPS hız değerini elde ettik. Gerçek zamanlı uygulamalar için yetersiz kalsa da, 32 ve 16 bitlik floating point nicemlenmiş modellerin bize sunduğu hız değerleri gayet tatmin edici. Nano’da bulunan Maxwell GPU, 8 bit integer formatını desteklemediği için int8 nicemlenmiş model maalesef performans testimizin dışında kaldı.

Nvidia Jetson Xavier NX

Grafik işlemcisi üzerinde 384 CUDA ve 48 Tensor çekirdeğine sahip, 6 çekirdekli işlemcisi ve 8GB RAM’i ile Jetson Xavier NX gerçek zamanlı uygulamalar için kullanılmaya çok müsait. Boyut olarak Nano ile benzer ölçülerde olsa da, aralarındaki performans farkı kayda değer nitelikte. Pytorch YOLOv5s modelinde 23 FPS değerlerine ulaştık ve nicemlenmiş modellerden aldığımız sonuçlar da bu şekilde;

Nvidia Jetson Xavier NX

Jetson Ailesinin en güçlü üyesi olan AGX Xavier, bilgisayar grafik işlemcileri ile kıyaslanabilir özelliklere sahip. 512 çekirdekli GPU’su ve 8 çekirdekli işlemcisi ile yüksek performans gerektiren uygulamalar için kullanılmaya çok uygun. Nicemleme olmadan, PyTorch kütüphanesi kullanarak, YOLOv5s üzerinde yaptığımız testlerde 44 FPS gibi birçok uygulama için yeterli bir hız değeri elde ettik. Testlerimizi 32GB’lık model üzerinde, Jetson Clocks özelliğini aktif ederek gerçekleştirdik. Kuantize edilmiş modellerden aldığımız sonuçlar gerçekten şaşırtıcı seviyede.

Nvidia GTX1650 Mobile

Jetson ailesinin gücünü kıyaslamak adına testlerimizi Nvidia GTX1650 barındıran bir laptop üzerinde devam ettirdik. 4GB GDDR5 grafik işlemcisinin yanında, 9. nesil Intel Core İ5 işlemci ve 16GB RAM de Laptop’un diğer teknik özellikleri. PyTorch YOLOv5s modelinden 105 FPS aldık ve nicemlenmiş modellerin performansları da şu şekilde;

Sonuç

Bu yazıda önceden eğitilmiş YOLOv5s modelinin farklı batch size ile nicemlenmiş halini, Jetson Nano, Jetson NX Xavier, Jetson AGX Xavier ve Nvidia GTX 1650 Mobile üzerinde çalıştırıp elde ettiğimiz hız değerlerini karşılaştırdık. Pre-process ve post-process işlemleri CPU üzerinde yürütüldüğü için bu işlemlerin grafik işlemcisine taşınması ile hız artışı sağlanabilir. Ayrıca, batch boyutu arttıkça, görsellerin gruplanma süreleri de arttığından, Gstreamer altyapısı kullanılarak bu gecikme düşürülebilir. Kullandığımız PyTorch ve TensorRT modellerine bu bağlantılardan ulaşabilirsiniz.