Ultralytics 'te, en sevdiğiniz çipte YOLO nasıl daha hızlı hale Ultralytics ?
Ultralytics , CPU'lar, GPU'lar ve uç cihazlarda hız için YOLO nasıl Ultralytics ? Çipler, bellek ve niceleme, füzyon ve budama gibi akıllı teknikleri açıklayacağız.
Ultralytics , CPU'lar, GPU'lar ve uç cihazlarda hız için YOLO nasıl Ultralytics ? Çipler, bellek ve niceleme, füzyon ve budama gibi akıllı teknikleri açıklayacağız.
Ultralytics bilgisayar görme modelleri oluşturuyoruz; temel olarak, bilgisayarlara görmeyi öğretiyoruz! Bu modelleri devasa matematiksel tarifler olarak düşünün. Bu modeller, işlemlerden (biz bunlara katmanlar diyoruz) ve ağırlıklar olarak adlandırdığımız devasa sayı yığınlarından oluşur.
Ultralytics YOLO , görüntüleri gerçekte oldukları gibi işler: sayı dizileri! Her piksel, aslında görüntüyü oluşturan her bir nokta için kırmızı, yeşil ve mavi (yani RGB) renk değerlerinden ibarettir. Bu sayı dizilerine "tensörler" diyoruz, çünkü "çok boyutlu matrisler"den çok daha havalı geliyor ve "sayıların üstüne yığılmış sayılar"dan çok daha havalı geliyor.
Modelimize bir görüntü girdiğinizde, bu görüntü ağ üzerinden epik bir yolculuğa çıkar. tensor katmanlar arasında tensor , dönüştürüldüğünü, karmaşıklaştığını ve mümkün olan en güzel şekilde matematiksel olarak değiştirildiğini hayal edin. Bunu, sayıların karışıp kaynaştığı, bir kediyi kedi yapan veya bir arabayı araba yapan özü çıkaran bir dans partisi gibi düşünün. Bu sürece özellik çıkarma diyoruz.
Diğer uçtan ne çıkıyor? Daha fazla sayı! Anlamlı sayılar. Algılama görevlerinde, görüntünüzdeki nesnelerin tam olarak nerede olduğunu ve bu nesnelerin muhtemelen ne olduğunu size söylerler. "Hey, (x, y) koordinatlarında %95 ihtimalle bir köpek var!" Bu sihirli sürece çıkarım diyoruz.
Şimdi, modellerimiz sihirlerini yapabilmek için önce okula gitmeleri, eğitim almaları gerekiyor. Eğitim kısmı işlerin yoğunlaştığı kısımdır.
Eğitim sırasında, ağa bir görüntü sunduğumuzda, sadece bir cevap almıyoruz. İki ekstra ağır iş yapıyoruz. İlk olarak, ağın ne kadar yanlış olduğunu hesaplıyoruz (buna kayıp diyoruz, temelde hedeften uzaklık). İkincisi, ve bu önemli kısım, bu kayba göre ağdaki her bir sayıyı (veya ağırlığı) güncelliyoruz. Bunu, binlerce küçük düğmeyi aynı anda ayarlamak gibi düşünün; her ayar, ağı her seferinde daha doğru hale getirmek için hesaplanır. Esasen, düzeltme yoluyla ağı eğitiyoruz: her hata, ona NE YAPMAMASI gerektiğini öğretir ve benzer bir görüntüyü tekrar gördüğünde doğru cevaba daha yakın olabilmesi için tüm bu ağırlıkları ayarlarız. Esasen, ağ, tahminleri doğru yapmaya başlayana kadar, hata üstüne hata yaparak doğru yönde yönlendirilerek öğrenir.
Kaç sayıdan bahsediyoruz? Sevimli küçük YOLO11n'mizin birkaç milyon parametresi var. Peki ya YOLO11x? Bu yaramaz çocuk 50 milyondan fazla parametreye sahip! Daha fazla parametre, kodlayabileceğiniz daha fazla ayrıntı anlamına gelir, tıpkı boya kalemleriyle çizim yapmakla tam bir sanatçı paleti kullanmak arasındaki fark gibi.
Çıkarım sırasında, bu parametre sayısı çok önemli hale gelir. 3 milyon parametreli bir ağı çalıştırmak, mahalle çevresinde koşmak gibidir. 50 milyon parametreli bir ağı çalıştırmak mı? Bu daha çok, yanan meşalelerle jonglörlük yaparken maraton koşmak gibidir.
Peki, hesaplama tam olarak nedir? Tüm bu sayı işlemleri aslında nasıl gerçekleşir? Nasıl daha hızlı hale getirebiliriz? Ve "hesaplamayı optimize etmek" ne anlama gelir?
Hesaplama işlemleri çiplerle gerçekleştirilir. Bu küçük silikon kareler, temelde evrenin en düzenli kumdan kaleleri gibidir. Bilgisayarınızın yaptığı her işlem, her toplama, her karşılaştırma, her "eğer bu ise o zaman şu" ifadesi fiziksel olarak silikona kazınmıştır. Çipin belirli alanlarında sayıları toplamaya adanmış fiziksel devreler ve mantık işlemleri için başka devreler bulunur. Bu, farklı mahallelerin farklı matematik türlerinde uzmanlaştığı küçük bir şehir gibi düşünülür.
Bu, bilgisayar bilimcisi olsanız bile muhtemelen tuhaf gelebilir. Bunun nedeni, son 40 yılımızda katmanlar üzerine katmanlar halinde soyutlama oluşturmakla geçirmemizdir. Bu, o kadar yüksek bir teknolojik lazanya gibidir ki, artık alt tabakayı bile göremiyoruz. İşleri o kadar basitleştirdik ki, günümüzde çoğu programcı silikonda hesaplamanın gerçekte nasıl gerçekleştiğini bilmiyor. Bu onların suçu değil, tasarımın suçu!
Bu katmanları birer birer inceleyelim. Şu son derece basit Python ele alalım:
x = 1
if x == 1:
y = x + 1Değişken x oluşturuyoruz, onu 1 olarak ayarlıyoruz ve x 1'e eşitse (spoiler: öyledir), x artı 1 değerine sahip y oluşturuyoruz. Üç satır. Kolay.
Ama işin ilginç kısmı burada başlıyor. Bu üç masum satır ile silikonun içinden geçen gerçek elektronlar arasında, EN AZ dört büyük çeviri katmanı var (aslında daha fazlası var, ancak Dijital İçerik Yöneticimiz kelime sayımın onu endişelendirdiğini söylüyor). Sizi bu akıl almaz yolculuğa çıkarayım:
Katman 1: Python Bayt kodu İlk olarak, Python kodunuzu Python ve onu bayt kodu adı verilen bir ara dile derler. Bu dil, bilgisayarların anlaması daha kolaydır, ancak okumaya çalışırsanız gözlerinizi kanatır.
Katman 2: Bayt kodu → Makine kodu Python (CPython gibi) bu bayt kodunu alır ve işlemcinizin anladığı gerçek komutlar olan makine koduna çevirir. İşte burada zarif "if x == 1" ifadeniz "LOAD register, COMPARE register, JUMP if zero flag set" gibi bir şeye dönüşür.
Katman 3: Makine Kodu → Mikro Kod Hikayede bir sürpriz var! Modern işlemciler makine kodunu doğrudan yürütmezler. Onu mikro koda, yani çipin iç bileşenlerinin işleyebileceği daha da küçük işlemler halinde parçalara ayırırlar. Tek bir "ADD" komutunuz birden fazla mikro işlem haline gelebilir.
Katman 4: Mikro kod → Fiziksel Elektronik Son olarak, silikona ulaşıyoruz. Bu mikro işlemler, transistörlerden geçen gerçek elektrik sinyallerini tetikler. Milyarlarca küçük anahtar açılıp kapanır, elektronlar özenle tasarlanmış yollarda dans eder ve bir şekilde, sihirli bir şekilde, 1 + 1, 2 olur.
Her katman, altındaki katmanın çılgın karmaşıklığını gizlemek için var. Bu, Rus matruşka bebekleri gibi, ancak her bebek tamamen farklı bir dil konuşuyor ve en küçük bebek kelimenin tam anlamıyla kuma hapsolmuş yıldırımdan yapılmış.
İroni mi? Bu üç satırlık Python kodu Python MİLYONLARCA transistör anahtarını tetikliyor. Ancak bu soyutlamalar sayesinde, bunların hiçbirini düşünmenize gerek yok. Sadece "y = x + 1" yazıp, silikonun derinliklerinde bir yerde sihrin gerçekleştiğine güveniyorsunuz.
Her bir işlem fiziksel olarak silikonda gerçekleştirilir ve çip üzerinde NEREDE gerçekleştiği tamamen çipin topolojisine bağlıdır. Bu, şehir planlamasına benzer, ancak elektronlar için geçerlidir. Toplayıcı burada, çarpan orada bulunur ve hepsinin birbirleriyle verimli bir şekilde iletişim kurması gerekir.
Piyasada, her biri farklı amaçlar için tasarlanmış yüzlerce farklı yonga bulunmaktadır. Bunlar arasında ne gibi farklar vardır? Topoloji, işlemlerin fiziksel alanda nasıl konumlandırıldığı ve uygulandığı. Buna mimari diyoruz ve çok sayıda mimari bulunmaktadır:
Her mimari, transistörlerini farklı şekilde düzenlemekle kalmaz, aynı zamanda farklı bir dil de konuşur. Bu makinelere talimatlar göndermek için kullandığımız soyutlamalar tamamen farklıdır. Bu, birine seyahat talimatları yazmak zorunda olmak gibi bir şeydir, ancak kişinin arabasına bağlı olarak Fransızca, Mandarin veya yorumlayıcı dansla yazmanız gerekebilir.
Çiplerimizin yakıtı elektronlardır, çipe akan elektrik, hesaplama için enerji sağlar. Ancak enerji tek başına yeterli değildir. Bir çipin gerçekten çalışması, karmaşık topolojisi boyunca verileri aktarması için her şey tek bir kritik bileşene bağlıdır: saat. Bu, elektronların belirli zamanlarda belirli yollardan akmasını sağlar. Bu olmadan, sadece hiçbir şey yapmayan güçlendirilmiş silikonunuz olur.
Milyarlarca bileşenin mükemmel bir uyum içinde hareket etmesi gereken devasa bir performansı koordine etmeye çalıştığınızı hayal edin. Bir ritim olmadan, bu tam bir kaos olurdu. Saat, işlemciniz için tam da bunu yapar. İnanılmaz derecede tutarlı bir hızda titreşen bir kristaldir ve saniyede milyarlarca kez elektrik darbeleri gönderir.
"3,5 GHz işlemci" dediğinizde, bu GHz (gigahertz) saat hızıdır, yani saniyede 3,5 milyar vuruş. Her vuruş bir saat döngüsü olarak adlandırılır ve bu, bilgi işlemde temel zaman birimidir.
Saat döngüleri arasında HİÇBİR ŞEY olmaz. Tüm bilgisayar donar ve bir sonraki atışı bekler. Bu, evrenin en aşırı kırmızı ışık, yeşil ışık oyunu gibidir. Her "yeşil ışık"ta (saat darbesi):
Bazı işlemler bir döngü sürerken (basit bir toplama işlemi), diğerleri birçok döngü sürer (bölme işlemi veya RAM'den veri alma). Bu, milyarlarca bileşenin belirli işlemlerini, bu durmak bilmeyen ritimle senkronize olarak gerçekleştirdiği, hassas bir şekilde koreografisi yapılmış bir süreçtir.
Kristali daha hızlı titreştirerek işlemcinizi overclock edebilirsiniz; her şey daha hızlı gerçekleşir, ancak bu daha fazla ısı üretir ve daha az kararlı hale gelir. Fazla zorlarsanız, elektronlar ritmi takip edemediği için bilgisayarınız çöker.
Eskiden bu işlemler oda büyüklüğünde makinelerle gerçekleştiriliyordu. Ancak tüm bu hesaplamaları yapan bileşenler son derece basittir: bunlar sadece anahtarlar. Açık-kapalı anahtarlar.
Bu anahtarları doğru şekilde birbirine bağlayarak hesaplama yapabilirsiniz. Dijital devrimin tamamı, sofistike bir anahtar düzenlemesine dayanmaktadır.
Bu basitlik, herhangi bir anahtarınız varsa, bir bilgisayar yapabileceğiniz anlamına gelir. İnsanlar su boruları ve vanalar, domino taşları, LEGO blokları, misketler ve hatta Minecraft'ta redstone kullanarak çalışan bilgisayarlar yapmışlardır.
İlkeler 1940'lardan beri değişmedi. Sadece anahtarları son derece küçük hale getirme konusunda inanılmaz derecede iyi hale geldik. Telefonunuz, insanları aya gönderen tüm bilgisayarların toplamından daha fazla hesaplama gücüne sahip ve cebinize sığıyor, çünkü atom ölçeğinde anahtarlar yapmanın yolunu bulduk.
Milyonlarca parametre içeren sinir ağlarını çalıştırırken, bu küçük anahtarları saniyede milyarlarca kez çeviriyoruz ve hepsi o kristal kalp atışına mükemmel bir şekilde senkronize oluyor. Her ağırlık güncellemesi, her matris çarpımı, her aktivasyon fonksiyonu, hepsi saatin ritmine göre ilerliyor.
Eğitim modellerinin bilgisayarınızı sanki havalanmaya çalışıyormuş gibi ses çıkarmasına şaşmamalı!
Pekala, milyarlarca anahtarın bir kristalin ritmine göre dans ettiği bu çiplerimiz var ve üzerinde milyonlarca parametre içeren sinir ağlarını çalıştırmak istiyoruz. Kolay olmalı, değil mi? Çipe sayıları girin ve çalıştırın!
Sinir ağlarını hızlı çalıştırmak, buzdolabının üç blok ötede olduğu, tek bir tavanızın olduğu ve her malzemenin 500 pound ağırlığında olduğu bir mutfakta beş çeşit yemek pişirmeye çalışmak gibidir. Asıl sorun matematik değildir; sorun diğer her şeydir.
Çoğu yonga, sinir ağları için değil, Microsoft çalıştırmak için tasarlanmıştır. CPU nuz, if-ifadeleri, döngüler ve ara sıra vergilerinizi hesaplamak (süper bilgisayarların bile duygusal olarak yorucu bulduğu bir hesaplama) için çalışacağı düşünülerek CPU . Sıralı işlemler için optimize edilmiştir: bunu yap, sonra şunu yap, sonra diğerini yap.
Ancak sinir ağları tamamen farklıdır. Her şeyi aynı anda yapmak isterler. Eğitim sırasında, tahminlerinizin ne kadar yanlış olduğuna bağlı olarak milyonlarca ağırlığı güncellersiniz. Çıkarım sırasında (aslında eğitilmiş modeli kullanarak), verileri milyonlarca hesaplamadan aynı anda geçirirsiniz. Bir milyon sayıyı başka bir milyon sayıyla çarpmanız gerektiğini düşünün. CPU, çok hızlı ama çok metodik bir muhasebeci gibi, bunları tek tek yapmak ister.
Bu nedenle GPU'lar yapay zeka backbone geldi. GPU'lar, milyonlarca pikselin rengini aynı anda hesaplamanız gereken video oyunları için tasarlandı. Piksel renklerini hesaplamak ve sinir ağı matematiği yapmak şaşırtıcı derecede benzerdir: her ikisi de büyük miktarda veri üzerinde aynı işlemi paralel olarak yapmayı içerir.
Ancak GPU'lar bile sinir ağları için mükemmel değildir. Bu nedenle şirketler artık özel AI yongaları (TPU'lar, NPU'lar ve PU ile biten diğer tüm kısaltmalar) üretmektedir. Bu yongalar, tek bir amaç için sıfırdan tasarlanmıştır: sinir ağlarının hızını artırmak. Bu çipler, tek bir yemek pişirmeyi bilen, ancak bunu süper insan hızında yapan bir şef işe almak gibidir. CPU 'nuz matris işlemlerini sırayla CPU yaparken ve GPU nuz bunları paralel olarak oldukça iyi bir şekilde GPU , bu özel çipler matrisleri kahvaltı, öğle yemeği ve akşam yemeği olarak yerler.
Modern sinir ağı hesaplamalarında, verileri GERÇEKTEN HESAPLAMAK yerine, verileri TAŞIMAK için daha fazla zaman ve enerji harcıyoruz.
Bilgisayar çipinizi, yıldırım hızında çalışan parlak bir matematikçi gibi düşünün, ancak tüm referans kitapları şehrin farklı binalarında saklanıyor. Herhangi bir denklemi anında çözebilirler, ancak önce sayıları almaları gerekir ve bu yolculuk sonsuza kadar sürer.
Çipiniz bir saat döngüsünde iki sayıyı çarpabilir (unutmayın, bu saniyede milyarlarca vuruştan biridir). Yıldırım hızında! Peki bu sayıları bellekten çipe aktarmak? Bu YÜZLERCE döngü sürebilir. Bu, matematikçinizin bir problemi bir saniyede çözebilmesi, ancak kütüphaneye gidip gelmek için beş dakikaya ihtiyaç duyması gibi bir şey.
Bunun nedeni mesafe (ve alan)dır. Elektrik hızlı hareket eder, ancak sonsuz hızda değildir. Verinin çip üzerinde kat etmesi gereken mesafe ne kadar uzaksa, o kadar uzun sürer. Bilgisayar tasarımcıları, farklı mesafelerde birden fazla depolama konumu olması gibi bir bellek hiyerarşisi oluşturarak bu sorunu çözdü:
Kesin yapılar değişiklik gösterir; telefonunuzun çipi L3 önbelleği atlayabilirken, bir sunucu CPU çok büyük miktarda önbelleğe sahip CPU . Ancak prensip aynıdır: daha yakın bellek daha hızlıdır, ancak daha küçüktür.
İşte burada sinir ağları için işler zorlaşıyor. Ultralytics YOLO 50 milyon parametresi olduğunu düşünün (bu aradaChatGPT milyarlarcaChatGPT ). Bu, bellekten hesaplama birimlerine gidip geri dönmesi gereken 50 milyon sayı demektir. Her sayı sadece 4 bayt olsa bile, sisteminizde taşınması gereken 200 megabaytlık veri demektir.
Çip her sayıyı tek bir döngüde işleyebilir, ancak bu sayıyı RAM'den almak için 100 döngü gerekiyorsa, zamanınızın %99'unu teslimatı bekleyerek geçiriyorsunuz demektir. Bu, trafik sıkışıklığında Formula 1 yarış arabası bulundurmak gibidir. Tüm bu hesaplama gücü, orada oturup verilerin gelmesini bekliyor.
İşte önemli bir bilgi: Bu, modern bilgi işlemde en önemli darboğazdır. Buna von Neumann darboğazı denir. Çipleri matematiksel işlemlerde daha hızlı hale getirmek nispeten kolaydır. Belleği daha hızlı hale getirmek ise fiziksel sınırlara ulaşmak demektir. Bu nedenle, yapay zekada neredeyse TÜM performans optimizasyonu bellek düzeyinde gerçekleşir. Mühendisler sinir ağlarını hızlandırırken, nadiren matematiksel işlemleri daha hızlı hale getirirler; verileri daha az taşımak, daha iyi önbelleğe almak veya daha akıllı bir şekilde erişmek için akıllı yollar bulurlar.
Modern AI yongaları sadece hesaplama hızına odaklanmaz; bellek bant genişliği ve veri taşıma stratejilerine de büyük önem verir. Verileri önceden alır, önbellekteki değerleri yeniden kullanır ve bellek erişimlerini en aza indirmek için hesaplamaları düzenler. AI donanım yarışının kazananları, en hızlı hesap makinelerine sahip olanlar değil, bu hesap makinelerine veri akışını nasıl sağlayacaklarını bulanlardır. Tüm oyun, bellek erişim modellerini optimize etmekle ilgilidir.
Her veri aktarımı sırasında enerji tüketilir. Çok fazla değil, piko joule düzeyinde bir miktar, ancak saniyede terabaytlarca veri aktarımı yapıldığında, bu miktar HIZLI bir şekilde artar. Aslında, bir çip üzerinde 1 mm veri aktarımı yapmak, gerçek hesaplama işleminden daha fazla enerji tüketir!
Bu yüzden, sinir ağlarını eğitirken dizüstü bilgisayarınız jet motoru gibi ses çıkarır. Isıyı üreten matematik değil, veri hareketidir. Her parametre güncellemesi, her gradyan hesaplaması, her ileri geçiş odanızı kelimenin tam anlamıyla ısıtır.
Modern AI hızlandırıcılar temelde termodinamik alıştırmalarıdır. Çip erimeden önce ne kadar hesaplama yapabiliriz? Isıyı ne kadar hızlı uzaklaştırabiliriz? Bu, overclocking'e benzer, ancak saat her zaman 11'de ve biz sadece yangın çıkmaması için uğraşıyoruz.
En hızlı sinir ağları mutlaka en akıllı olanlar değildir, bunlar çipler göz önünde bulundurularak tasarlanmış olanlardır. Bunlar:
Bu, "yerel marketten aldığınız malzemeleri kullanın" diyen bir tarif ile Tibet'ten baharat, Fransa'dan peynir ve Antarktika'dan su getirmenizi gerektiren bir tarif arasındaki fark gibidir. Her ikisi de lezzetli olabilir, ancak biri kesinlikle daha pratiktir.
İşte bu yüzden sinir ağlarını hızlı hale getirmek bir sanat formudur. İyi matematik bilgisine sahip olmak yeterli değildir; donanımı anlamanız, bellek hiyerarşisine saygı duymanız ve mimariyle mükemmel bir uyum içinde çalışmanız gerekir.
Bilgisayar bilimi, fizik, mühendislik ve saf sihirbazlığın buluştuğu dünyaya hoş geldiniz. Bir sayıyı taşımak, onunla hesaplama yapmaktan daha pahalıdır. Paralellik hızlıdır, ancak senkronizasyon ölüm demektir. En büyük düşmanınız karmaşıklık değil, mesafedir.
YOLO eğittiğinizde, eğitim kurulumunuzda mükemmel şekilde çalışan bir sinir ağı elde edersiniz. Ancak şu var ki: oyun GPU, iPhone'unuz ve güvenlik kamerasındaki o küçük çip tamamen farklı diller konuşur. Farklı güçlü yanları, farklı zayıf yanları ve verileri işleme konusunda çok farklı fikirleri vardır.
Şöyle düşünün: Bir GPU , aynı anda çalışabilen binlerce çekirdeğe GPU – paralel işlem için tasarlanmıştır. Öte yandan, bir mobil çip, AI işlemleri için özel olarak tasarlanmış özel devrelere sahip olabilir, ancak yalnızca belirli türdeki matematik işlemlerini gerçekleştirebilir. Peki, kapı zili kameranızdaki o kenar cihazı? LED ampulden daha az güçle AI çalıştırmaya çalışıyor.
Ultralytics, her biri farklı donanımlar için optimize edildiğinden, bir düzineden fazla farklı dışa aktarım formatını destekliyoruz. Mesele çok fazla seçeneğe sahip olmak değil. Mesele, SİZİN özel ihtiyaçlarınıza uygun doğru seçeneğe sahip olmak.
Orijinal YOLO , birçok işlem sırayla gerçekleşir. Örneğin, bir konvolüsyon yapabilir, ardından sonuçları normalleştirebilir ve ardından bir aktivasyon fonksiyonu uygulayabiliriz. Bu, her biri kendi bellek okuma ve yazma işlemlerini gerektiren üç ayrı adımdır.
Ama işin püf noktası şu: bu işlemleri tek bir adımda birleştirebiliriz. YOLO dağıtım YOLO dışa aktardığımızda, bu işlemleri birleştiriyoruz. Şöyle yapmak yerine:
Yaptığımız şeyler:
640×640 çözünürlüklü bir görüntüyü işleyen tipik bir YOLO için, bu basit hile gigabaytlarca gereksiz bellek aktarımını ortadan kaldırır. Bir cep telefonunda bu, sorunsuz gerçek zamanlı algılama ile sinir bozucu gecikme arasındaki farktır.
YOLO , detect doğru bir şekilde detect için aslında çok hassas sayılara ihtiyaç YOLO . Eğitim sırasında, her bir ağırlığı temsil etmek için 32 bit kullanıyoruz – bu, bir sandviçin malzemelerini ölçmek için bilimsel hesap makinesi kullanmak gibi bir şey. Gerçek uygulamada ise 8 bit gayet yeterli.
Buna niceleme denir ve en güçlü optimizasyon tekniklerimizden biridir. Daha küçük sayılar kullanarak:
YOLO tüm katmanlar bu azalmaya eşit derecede duyarlı YOLO . detect kenarları ve şekilleri detect ilk katmanlar mı? Bunlar sağlamdır – 8 bitlik sayıları sorunsuz bir şekilde kullanabiliriz. "Bu bir kedi mi yoksa köpek mi?" kararını veren son algılama katmanları ise biraz daha hassasiyet gerektirir. Bu nedenle, hızı en üst düzeye çıkarırken doğruluğu korumak için yeterli bit sayısını kullanarak hassasiyeti katman katman ayarlıyoruz.
Dikkatli bir niceleme ile Ultralytics YOLO orijinal doğruluğunun %99,5'iniYOLO , telefonlarda 3 kat daha hızlı çalıştığını gördük. İşte araştırma modeli ile gerçek dünyada kullanabileceğiniz bir model arasındaki fark budur.
Aynı matematiksel işlemi gerçekleştirmek için düzinelerce farklı yol vardır. Basit bir konvolüsyon ( YOLO temel işlemi) tamamen farklı algoritmalar kullanılarak hesaplanabilir ve en iyi seçim, kullandığınız donanım ve girdi boyutuna bağlıdır.
YOLO dışa aktardığımızda, optimizasyon çerçevemiz farklı algoritmaları test eder ve sizin özel durumunuz için en hızlı olanını seçer. Bu, aynı hedefe giden birden fazla rota olması ve mevcut trafik koşullarına göre seçim yapmaya benzer. GPU, birçok pikseli aynı anda işleyen bir algoritma kullanabiliriz. CPU ise sıralı işleme için optimize edilmiş bir algoritma kullanabiliriz. Matematiksel olarak aynıdır, ancak yürütme stratejisi tamamen farklıdır.
Modern bilgi işlemde belleğin gerçek darboğaz olduğunu nasıl konuştuğumuzu hatırlıyor musunuz? Bu özellikle YOLO için geçerlidir. Model 50 milyon parametreye sahip olabilir ve çıkarım sırasında gigabaytlarca ara sonuç oluşturur. Tüm bu verileri taşımak, genellikle gerçek hesaplamadan daha yavaştır.
Bellek hareketini en aza indirmek için birkaç püf noktası kullanıyoruz:
Akıllı Zamanlama: Verilerin hızlı önbellekteyken hemen kullanılabilmesi için işlemleri düzenliyoruz. YOLO özellik piramidi ağı için bu, bellek trafiğini %40 oranında azaltır.
Döşeme: Görüntünün tamamını tek seferde işlemek yerine, önbelleğe sığacak şekilde daha küçük parçalara ayırıyoruz. Bu sayede işlemci, sürekli olarak yavaş ana bellekten veri almak yerine hızlı yerel bellekle çalışabilir.
Tampon Yeniden Kullanımı: Ara sonuçlar için sürekli yeni bellek oluşturmak yerine, aynı bellek tamponlarını yeniden kullanıyoruz. Bu inanılmaz derecede verimli bir yöntemdir – YOLO tüm backbone , yalnızca bir dizi yeniden kullanılabilir tamponla backbone .
İşte şaşırtıcı bir gerçek: YOLO genellikle aşırı mühendislik ürünü. Doğruluk üzerinde neredeyse hiçbir etkisi olmadan birçok katmandaki kanalların %30'unu kaldırabiliriz. Bu sadece modeli daha küçük hale getirmekle kalmaz, aynı zamanda daha hızlı hale de getirir, çünkü gerçekleştirilecek hesaplamaların sayısı kelimenin tam anlamıyla azalır.
Süreç oldukça zariftir: Ağın hangi kısımlarının nihai algılama sonuçlarına en az katkı sağladığını analiz eder, bunları kaldırır ve ardından telafi etmek için modeli ince ayar yaparız. Budanmış bir YOLO11m modeli, orijinal doğruluğunun %99'unu korurken %30 daha hızlı olabilir. Pille çalışan cihazlarda bu verimlilik artışı, saatlerce ekstra çalışma süresi anlamına gelebilir.
Farklı işlemciler farklı konularda iyidir ve performans farklılıkları şaşırtıcıdır. Aynı YOLO11n modeli şunları alır:
Bunlar sadece saat hızlarındaki hız farklılıkları değildir – temel mimari farklılıkları da yansıtırlar. GPU'lar, YOLO konvolüsyonları için mükemmel olan binlerce çekirdeğe sahiptir. Mobil NPU'lar, sinir ağları için özel olarak tasarlanmış özel devrelere sahiptir. CPU'lar her işi yapabilen, esnek ancak uzmanlaşmamış işlemcilerdir.
Optimizasyonun anahtarı, YOLO işlemlerini her bir çipin en iyi yaptığı şeyle eşleştirmektir. GPU , çok sayıda veri üzerinde aynı işlemi aynı anda yapmayı GPU . Mobil NPU, yalnızca belirli işlemleri destekleyebilir, ancak bunları inanılmaz derecede verimli bir şekilde yürütür. Kenar TPU 8 bitlik tamsayılarla çalışır, ancak bu kısıtlama içinde olağanüstü bir hız elde eder.
Bir YOLO dışa aktardığınızda, arka planda dikkat çekici bir şey olur. Sadece dosya formatını dönüştürmekle kalmaz, modeli hedef donanımınız için özel olarak derleriz. Bu, Google ile ana dili konuşan bir kişi arasındaki fark gibidir. Derleme süreci:
Derleyici, işlemcinin önbelleğini daha iyi kullanmak için işlemleri yeniden düzenleyebilir, çipinizin desteklediği özel komutları seçebilir veya hatta en iyi optimizasyon stratejisini bulmak için makine öğrenimini kullanabilir. Evet, AI'yı optimize etmek için AI kullanıyoruz – gelecek burada!
Bu derleme adımı, performansta 10 kat fark yaratabilir. Aynı YOLO , genel kodla yavaş ilerlerken, uygun şekilde optimize edilmiş talimatlarla hızla ilerleyebilir.
YOLO gerçek dünyayla, özellikle de zorlu uç cihazlar dünyasıyla YOLO neler olduğunu konuşalım. Nesne algılama için YOLO çalıştırması gereken bir güvenlik kamerası düşünün. Bu kamera, çok zorlu kısıtlamalarla karşı karşıyadır:
Optimizasyonun pratikte sağladığı faydalar şunlardır. YOLO11s çalıştıran bir güvenlik kamerası:
Güç tüketimini %80 oranında azalttık ve aynı zamanda performansı da artırdık! Aşırı ısınan ve pili çabuk tüketen bir cihaz ile yıllarca güvenilir bir şekilde çalışan bir cihaz arasındaki fark budur.
Önemli olan doğru dengeleri seçmektir. Kenar cihazlarda genellikle şunları yaparız:
Ultralytics, optimizasyon için sistematik bir yaklaşım izliyoruz. İlk olarak, zamanın gerçekte nerede harcandığını anlamak için modeli profilleştiriyoruz. Çoğu zaman, darboğazlar beklediğiniz yerlerde olmaz. Belki de zamanın %80'i sadece birkaç katmanda harcanıyor veya bellek aktarımları hesaplama süresini domine ediyor olabilir.
Ardından, optimizasyonları yinelemeli olarak uygularız:
Örneğin, bir telefonda YOLO11m kullanımıyla:
Her adım, orijinal doğruluğun %99'undan fazlasını korurken performansı artırır. Sonuç? Cebinize sığan bir cihazda gerçek zamanlı nesne algılama.
Modern cihazlar, birden fazla işlemciyi birlikte kullanma konusunda giderek daha akıllı hale geliyor. Telefonunuzda sadece bir işlemci bulunmuyor, her biri farklı görevler için özel olarak tasarlanmış birkaç işlemci bulunuyor:
YOLO geleceği, modeli bu işlemciler arasında akıllıca bölüştürmekle ilgilidir. Belki NPU ana konvolüsyonları işler, CPU son algılama mantığını CPU ve GPU sonuçları GPU . Her işlemci en iyi yaptığı işi yapar ve tek bir işlemcinin başarabileceğinden daha verimli bir iş akışı oluşturur.
YOLO mevcut işlemciler YOLO en iyi şekilde bölmek için, sadece işlemcilerin kapasitelerini değil, işlemciler arasında veri aktarımının maliyetini de dikkate alan akıllı bölümleme algoritmaları geliştiriyoruz.
YOLO optimize etmek sadece dosya formatlarını dönüştürmekle ilgili değildir; en son teknolojiye sahip yapay zekayı gerçek dünyada gerçekten işe yarayan bir şeye dönüştürmekle ilgilidir. Niceleme (daha küçük sayılar kullanma), budama (gereksiz kısımları kaldırma), işlem birleştirme (adımları birleştirme) ve akıllı bellek yönetimi gibi teknikler sayesinde, doğruluğu korurken 10-100 kat performans artışı elde ediyoruz.
Dikkat çekici olan ne mi? Evrensel bir "en iyi" optimizasyon yoktur. Sınırsız güce sahip bir bulut sunucusu, pille çalışan bir drone'dan farklı optimizasyonlara ihtiyaç duyar. Özel bir AI çipine sahip bir telefon, Raspberry Pi'den farklı bir muameleye ihtiyaç duyar. Bu nedenle Ultralytics çok sayıda dışa aktarma seçeneği Ultralytics ; her biri farklı senaryolar için optimize edilmiştir.
Tartıştığımız her optimizasyon tek bir amaca hizmet ediyor: bilgisayar görüşünü her yerde erişilebilir hale getirmek. Akıllı bir kapı zili, bir drone uygulaması veya büyük bir bulut hizmeti geliştiriyor olun, YOLO kısıtlamalarınız dahilinde YOLO sağlayacak araçları sunuyoruz.
Ultralytics ile bir YOLO dışa aktardığınızda, sadece bir dosyayı kaydetmiş olmuyorsunuz. Sinir ağlarını pratik hale getirmek için yıllarca süren araştırmalardan yararlanıyorsunuz. En son teknolojiye sahip bir AI modelini, gerçek donanım üzerinde, gerçek kısıtlamalarla çalışabilen ve gerçek sorunları çözen bir şeye dönüştürüyorsunuz.
Ultralytics yaptığımız şey budur. Yapay zeka araştırmaları ile pratik uygulamalar arasındaki boşluğu dolduruyoruz. Bilgisayar görüşünün her yerde çalışmasını sağlıyoruz, çünkü yapay zekanın geleceği sadece en iyi modellere sahip olmakla ilgili değil, bu modelleri gerçek dünyada kullanışlı hale getirmekle de ilgilidir.