YOLO’ da Etiketleme ve Veri Seti Eğitimi

Burak Özdemir
4 min readMay 2, 2021

--

Bir önceki yazımda YOLO mimarisinden bahsetmiştim. Bu yazımda ise sıfırdan bir veri setini nasıl eğitebiliriz ondan bahsedeceğim.

İlk olarak tespit etmek istediğimiz nesneleri içeren görselleri bularak bunlara etiketleme işlemi yapıyoruz.

Ben bu çalışmam için nesne olarak Dünya’yı seçtim. Bulunan görselleri aşağıdaki gibi bir arada toplanır.

Daha sonra etiketleme (labelling) yapabilmek için ihtiyacımız olan labelImg uygulaması indirilir.

Bunun için;

pip install labelImg 

komutu kullanılır ve terminal ekranına labelImg yazarak uygulama başlatılır. Bizi aşağıdaki gibi bir ekran karşılar.

Burada OpenDir yazan kısma görsellerin dosya yolunu kopyalarak görselleri uygulama içerisine alırız. Change Save Dir butonuna yine görsellerin dosya yolunu kopyalayarak oluşturacağımız txt dosyalarının kayıt yerini belirleyin.

Create ReactBox butonuna tıklayarak görsel üzerindeki nesnemizi işaretliyip etiket ismi girilir.

Bu işlem veri setindeki tüm görsellere uygulanır. Bu işlem sonucunda aşağıdaki görseldeki gibi klasör içerisinde txt dosyaları ve görseller bekler.

Classes dosyasının içerisinde etiket isimleri yer almaktadır.

Her bir görsel için oluşturulan txt dosyası ise bize nesnenin sınıfını ,başlangıç koordinatlarını (x,y) , uzunluk ve genişliğini verir.

Daha sonra bu elde edilen dosyalar eğitim için hazırlanmalıdır.

Bu işlemler aşağıdaki yer alan kodlar ile gerçekleştiririlebilir. Bu kodlardaki full_path_to_images kısmına txt dosyalarının bulunduğu dosya yolu kopyalanarak kodlar çalıştırılır.

İlk kod ve çıktısı ->

Kod sonucunda oluşturulan dosyalarda da görüldüğü üzere verilerin bir kısmını eğitim bir kısmı test için ayrıldı.

İkinci kod ve çıktısı ->

Yukarıdaki görselden de görüleceği üzere etiketlerin yazılı olduğu bir names dosyası bir de veri setlerinin dosya yollarının olduğu veri (data) dosyası oluşturulur.

Sıradaki aşama ise YOLO’nun çalışma ağı olan darkneti yüklemek. Aşağıdaki komut ile darknet bilgisayara kurulur.

git clone https://github.com/AlexeyAB/darknet.git

Darkneti CPU’ da çalıştırabilmek için darknet klasörü içerisindeki makefile dosyasına giderek OPENCV=0 olan kısım =1 olarak değiştirilir.

Daha sonra terminal ekranından darknet klasörüne gidilerek (cd darknet gibi)

make

komutu ile darknet yapılandırılır. Doğru bir şekilde kurulum yapılıp yapılmadığını öğrenmek için

./darknet

komutu kullanılır. Eğer bu komut aşağıdaki gib bi çıktı verirse darknet sorunsuz bir şekilde kurulmuş demektir.

usage: ./darknet

Artık son aşamaya geldik. Daha önse oluşturulan veri (.data) dosyası darknet içerisinde bulunan cfg klasörüne kopyalanır. Darknet klasörü içerisine bir weights klasörü oluşturularak içerisine aşağıdaki adresten indirilen dosya kopyalanır.

https://pjreddie.com/media/files/darknet53.conv.74

Eğitimin son aşaması ise aşağıdaki komut ile tamamlanır.

./darknet detector train cfg/dataklasöradınız.data cfg/yolov3.cfg weights/darknet53.conv.74

Bu işlemi yapılırken terminal ekranında darknet dizini altında yer alınması gerektiği unutulmamalıdır.

Bu işlem gerçektende çok uzun sürebilmektedir. Bu işlem sonucunda aşağıdaki gibi .weight uzantılı ibr dosya oluşturulacaktır. Ancak eğer verimli bir sonuç almak istiyorsanız en azından 1000. adıma kadar işlemin devam etmesi gerekmektedir.

NOT: Darknet çalıştırılırken eğer opencv de bir hata alınırsa, bu hata

sudo apt install libopencv-dev

komutu ile opencv’nin tekar kurulumu yapılarak çözülebilir.

Aşağıdaki komut kullanılarak veri seti test edilir. Bunun için ilk olarak darknet klasöründeki data klasörü içerisine test etmek için üzerinde nesne olan bir görsel kopyalanır.

sudo ./darknet detector test cfg/veriklasörünüz.data cfg/yolov3.cfg backup/eğitimsonundaoluşandosya.weights data/testgörseli.jpeg

Burada çıktı ekranında nesne bulunamadı çünkü işlemin en az 1000–2000 adım aralarında gerçkeleşmesi gerekirken, bu çalışmada ise sonuç 100–200 adım arasında durduruldu. Dosya her 100 adımda bir kaydedildiği için sadece 100 adımlık eğitim ile işlem yapıldı. Eğitim devam ettirilerek çalışma güncellenecektir.

Eğitim durdurulduktan sonra aşağıdaki kod çağırılarak devam ettirilebilir.

./darknet detector train cfg/veridosyanız.data cfg/yolov3.cfg backup/eğitimsonunndaoluşandosya.weights

Kaynaklar

  • Bu çalışmada Valentyn Sichkar hocanın derslerinden ve kodlarından yararlanılmıştır.
  • Darknet

--

--