YOLO Kütüphanesi Ve Darknet

Kaan Koska
4 min readMay 12, 2021

1.YOLO Kütüphanesi Ve Darknet :

YOLO(You Only Look Once), Darknet kütüphanesinin en hızlı gerçek zamanlı nesne tanıma yapabilen algoritmasıdır. YOLO; algoritması ve bütünüyle, bilgisayar görüsü günümüzde birçok alanda bize büyük kolaylıklar sunan geniş bir kullanım alanına sahiptir. Örneğin günümüzde kamera ile yüzde maske tespiti, plaka tespiti gibi sivil ve askeri alanlarda kullanılmaktadır. YOLO algoritması, bilgisayarınızın performansına bağlı olarak Real time çalışarak büyük verim sağlayabilir. Ancak eğer eski bir bilgisayar kullanıyorsanız ve yeterli gpu gücüne sahip değilseniz özellikle videolarda hız konusunda büyük sorunlar yaşayabilirsiniz. Çünkü bilgisayarınız YOLO algoritmasını kullanarak videodaki her frame’i tek tek kontrol etmesi ve işlemesi için güçlü bir işlemciye ihtiyaç duyar. YOLO algoritmasını kullanabilmeniz için ilk olarak Darknet Kütüphanesini indirmiş olmanız gerekir. Ayrıca tanıma yapabilmeniz için önceden eğitilmiş bir weights dosyası, okuma hızı düzeni ve gerekli bilgilerin yazılı olduğu bir cfg dosyasına ihtiyacınız var. Veya kendi weights dosyanızı oluşturabilirsiniz. Kendi weights dosyanızı oluşturmak zaman alan bir işlemdir ama zor değildir. cfg dosyanızı weights dosyanızdaki model sayısı ve bilgisayar performansınıza göre değiştirmelisiniz. Weights dosyasının nasıl hazırlandığını anlatmadan önce YOLO algoritmasının nasıl çalıştığından bahsedeceğim: YOLO, konvansiyonel sinir ağını kullanarak nesne tespiti yapar ve şu an bu alanda yazılmış algoritmalar arasında en hızlısıdır. YOLO algoritması çalışmaya başladığında ona verilen görüntüdeki nesnelerin koordinatlarını belirleyip o nesnelerin labellarını bulur. Ve bulduğu sonuçlara bir güvenilirlik skoru verir. Labellar ise weight dosyasında daha önce eğitimi yapılmış nesnelerin isimleridir.

YOLO algoritması; önce nesnelerin koordinatlarını bulur, onları boundingboxlar içine alır, label adlarının yazdırır ve algoritmanın yaptığı hesaplamaya göre o nesneye bir güvenilirlik değeri atar. Algoritma kendisine verilen resmi ilk olarak ızgaralar içine alır sonra da tanıma yapabildiği nesneleri boundingbox içine alır. Ama eğer algoritmaya Non-Maximum Suppression uygulanmaz ise bir nesneyi birçok kez farklı güvenilirlik oranlarında bularak görüntü üzerinde görüntü kirliliği oluşturup aynı zamanda sistemi çok daha fazla yorabilir. Bu yüzden YOLO algoritmasında “ifcofidance>50:” yerine “Non-Maximum Suppression” uygulanması YOLO algoritmasının verimini çok daha fazla arttırıyor. Non-Maximum Suppression’ın nasıl çalıştığını ileride kendi modelimde kullandığım YOLO algoritmamı açıklarken anlatacağım. YOLO algoritması kendisine verilen resim veya video framelerindeki nesneleri tanımladıktan sonra o nesnenin ortasını buluyor. Sonra algoritmam sahip olduğu orta nokta koordinatına yükseklik ve genişlik bilgilerinden yararlanarak boundingboxları çiziyor. Boundingbox çizimini şu şekilde açıklayabilirim: Nesne merkez noktasının koordinatını aldıktan sonra bu bilgiler ile rectangel çizebilmek için nesnenin üst ve alt köşesinin koordinatlarına ihtiyacım var. Bu koordinatları bulmak için (merkez -genişlik /2,merkez+genişlik/2 ) kadar x tarafına bir çizgi, sol üst köşeyi verir. Sağ alt köşe için ise (merkez +genişlik /2, y- yükseklik /2 ) yapıp koordinatları kolayca buluruz ve boundingboxlarımızı çizeriz. Şu an YOLO algoritmasının en büyük weights dosyasını YOLO’nun internet sitesinden bulup indirerek kolayca algoritmanıza dahil ederek kullanabilirsiniz. Güncel olarak 80 farklı nesneyi tanımlayabilen bir modeldir. 6.2.Konvesiyonel Sinir Ağları (CNN) Nasıl Çalışır Ve Custom Weights Dosyası Nasıl Hazırlanır? CNN algoritması görüntüler üzerindeki nesneleri tanımlamamızı sağlayan bir algoritmadır. CNN, yapısının gereği resim ve video framelerini bir input olarak alır ve inceler. Sonra bu verileri matrise çevirir. Eğer verilen resim renkliyse matris 3 katmanlı bir derinliğe sahip olur. Ama eğer grayscale ise tek katmanlı olur. Her işlemde ve her CNN katmanında matrisim biraz daha küçülür. CNN algoritması aldığı görsel veriyi farklı katmanlarda inceler bu katmanlar:

ConvolutionalLayer :Özellikleri saptamak için kullanılır 

Non-LinearityLayer :hesaplamalara uygun olmayanların saptanması

Pooling (Downsampling) Layer : Ağırlık sayısını azaltır ve uygunluğu kontrol eder 

FlatteningLayer : Klasik Sinir Ağı için verileri hazırlar 

Fully-ConnectedLayer : Sınıflamada kullanılan Standart Sinir Ağı

İlk inceleme katmanı olan ConvolutionalLayer ana katman olarak bilinir. Bu katmanda resme veya frame’e bazı filtreler uygulanarak resmin belirgin özellikleri incelenir. Bu katmanda yapılan hesaplamalar sonucunda bir değer elde eder, diğer resimlerde yaptığı hesaplamalar ile bu sonucu karşılaştırarak bir güvenilirlik değeri oluşturur. Bu değerlerde oluşturulan filtrelerden çıkan değerler sonucunda matris gittikçe küçülür en son tek bir değere düşürür. Ve bu değeri maximum pooling katmanına verir. Bu seçilen filtrelerin miktarı, eğitimden önce cfg dosyasından ayarlanabilir. Bu ayarlar arttıkça eğitimin kalitesi artar. Ancak süresi uzar ve kullanım sırasındaki işlem gereksimler de artmış olur. Maximum pooling katmanı pencereler oluşturur ve bu alandaki en büyük değeri alır. Sonra da relu katmanına verir.Relu katmanında en küçük hale getirilmiş olan matris tekrar incelenir ve tahmin sonucu oluşturulup nesne tanımlanır. Fully connected layer’dan çıkan bilgiler sonucunda nesne bounding boxları çizilir. CNN algoritması yukarıda anlattığım katmanlardan çok daha farklı şekillerde olabilir. Ancak benim tanımlama modelimde kullandığım CNN algoritması yukarıdaki inceleme katmanları ile çalışıyor. CNN çok daha derin bir konu ve yapay zekâ ile ilgili olduğu için çok daha detaylı bir inceleme gerektiriyor. Ama YOLO modelimizde kullanacağım CNN algoritması için bu bilgiler yeterli. Ben CNN algoritmamı kullanarak yaptığım modelimde silah tanıma sistemi yaptım. Bu sistem; alış-veriş merkezi gibi önemli binaların kameralarında kullanılabilir. Silah teşhisi ile güvenlik kuvvetlerine büyük kolaylıklar sağlayabilir.

--

--

Kaan Koska

Computer programming student, currently working on computer vision, opencv, Yolo, Python