Pascal VOC Data Setleri ile YOLO Modeli Eğitim Aşamaları

Görsel üzerinde tespit edilen nesneler dışında, tespit edilmesi gereken daha spesifik nesneler de bulunabilir bu gibi durumlarda kendi veri setimiz ile model eğitim işlemi gerçekleştirmeliyiz.
Pascal VOC Data Setleri ile YOLO Modeli Nasıl Eğitilir ?
Farklı kişi ve nesneleri tespit etmek için YOLO modelini sıfırdan eğitme kararı aldım. Eğitim işleminden önce kendi veri setlerimiz ile birleştirilmesi gereken üzerine eklenecek veri setleri bulunuyordu ve Pascal VOC veri kümesi bunlardan birisiydi.
Pascal VOC Verilerini Alınması
YOLO’yu eğitmek için 2007'den 2012'ye kadar tüm VOC verilerine ihtiyacımız var. Verileri cihazımıza indirmek ve hepsini depolamak için bir dizin oluşturalım ve bu dizin içerisinde aşağıdaki komutlar çalıştıralım:

Bu işlemlerden sonra VOC eğitim verilerinin bulunduğu bir VOCdevkit/ alt dizini oluşturulmuş olmalı.
VOC İçin Etiket Oluşturma İşlemi
Bu işlemde Darknet’in kullandığı etiket dosyalarını oluşturmamız gerekiyor. Darknet, görüntüdeki her zemin gerçeği nesnesi için bir çizgi içeren her görüntü için bir .txt dosyası istiyor:
<object-class> <x> <y> <genişlik> <yükseklik>
Uygun format bu şekilde olmalıdır. Burada x, y, genişlik ve yükseklik görüntünün genişliğine ve yüksekliğine göredir. Bu dosyayı oluşturmak için voc_label.py betiğini Darknet’in script/ dizininde çalıştıracağız. Aşağıdaki komut kullanılarak voc_label.py dosyasını indirelim.

Python script dosyası birkaç dakika çalıştıktan sonra bu komut dosyası gerekli tüm dosyaları oluşturur. Bu oluşturulan çoğunlukla VOCdevkit/VOC2007/labels/ ve VOCdevkit/VOC2012/labels/ dizinlerinde çok sayıda etiket dosyası oluşturur. Oluşturulan dizinler aşağıda da yer almaktadır:
2007_train.txt gibi metin dosyaları, o yıl için resim dosyalarını ve resim kümesini listeler. Darknet’in üzerinde train yapmak istediğiniz tüm resimlerin bulunduğu bir metin dosyası gerekir. Bu çalışmada modeli test edebilmemiz için 2007 test seti dışındaki her şeyle çalıştırılmalıdır.

Şimdi 2007 train verileri ve 2012 train verilerine tek bir büyük listede sahip olmuş olduk.
.data Dosyasında Kişiselleştirme
Eldeki Pascal verilerine göre CFG dosyasında değişiklikler yapılması gerekir. Darknet dizininize gitmelisiniz. Verilerinize işaret etmek için cfg/voc.data config dosyasını değiştirilmesiniz:

<path-to-voc> yazan yeri VOC verilerinin koyulduğu dizin yolu ile değiştirmeliyiz.
.cfg Dosyasında Kişiselleştirme
yolov3-voc.cfg dosyasında bazı değişiklikler yapalım.
- Batch değeri aynı anda kaç resmin işleme gireceğini belirler bu değeri batch=64 olarak değiştirelim.
- Subdivisions değeri resmin işleme girdiği sırada kaç parçaya bölüneceğini ifade eder. Bu değeri subdivisions=8 olarak değiştirelim.
- max_batches değerini “class sayısı * 2000” olacak şekilde değiştirilir. Fakat bu değer 4000’den az olamaz. Proje örneğinde 22 * 2000 = 44000 olarak değiştirildi.
- steps değeri max_batches değerinin %80 ve %90 değerleri olacak şekilde değiştirilmesi gerekir. Proje örneğinde steps=35200,39600 olarak değiştirelim.
- class=80 değerleri, her 3 [yolo] katmanındaki nesnelerin sayısına göre değiştirilir. Bu proje de bu değeri 22 olarak değiştirdim.
- Her [yolo] katmanından önceki 3 [convolutional] ‘de [filters = 255]’ i filters = (class sayısı + 5) x3 olarak değiştirilir. Projedeki bu değeri 81 olarak değiştirdim.
Sonuç olarak bu değişiklikleri gerçekleştirdikten sonra dosyayı kaydedelim.
.names Dosyasında Kişiselleştirilmesi
yolov3-voc.names dosyasının sonuna sonradan eklenecek olan etiketleri yerleştirelim. Bu dosyada yapılacak değişiklikler bu kadardır.
Yarı Eğitilmiş Konvolüsyon Ağırlık Dosyalarının Elde Edilmesi
Projede model eğitimi için Imagenet’te önceden yarı eğitilmiş evrişimli ağırlıkları kullandım. Darknet53 modelindeki ağırlıkları kullandım. Konvolüsyon katmanlarının ağırlıklarını aşağıdaki komutları kullanarak indirebilirisiniz.

Bu işlemden bir sonraki aşama ise Google Colab ile Train İşlemi aşamasıdır. Ayrıntıları ile birlikte sonraki yazımda bu aşamayı göreceğiz.