Yolo Darknet Tool’unda Kendi Veri Setini Oluşturma Aşamaları

Proje öncesinde hazır eğitilmiş model dosyaları olan yolov3 ve tiny-yolo modellerini kullanarak test işlemleri gerçekleştirmiştik. Şimdi ise eklenen kişi bilgilerinin resim üzerinden tespit işlemi yapmamız gerekir. Örneğin verilen resimde Meyra ve Mümin kişileri yer alıyor ise o kişileri bounding box içerisine alıp “Person” etiketi altında değil de uygun şekilde “Meyra” ve “Mümin” olarak işaretlemeliyiz. Bu işlem için aşağıda yer alan yapacağımız hazırlıklara bakalım.
Veri Seti İçin Görsel Elde Edilmesi
Fotoğraf makinesinden çektiğimiz kişilerin görsellerini data klasörü altına kişi isimleri ile kopyalayalım. Örneğin data klasörü altında Meyra ve Mümin klasörleri bulunsun ve bu klasörlerin içlerinde sadece o kişilere ait görseller bulunmalı.
Train İşleminden Önce Görsellerin Etiketlenmesi
1.Imagelabel
Train işlemi için elde edilecek resimleri grafiksel olarak eklemek için kullanılan araca LabelImg denir. LabelImg, Python ile yazılmış ve grafik ara yüzü için Qt kullanır.
ImageNet tarafından kullanılan format PASCAL VOC formatında kullanılır ve her bir resim beraberinde XML dosyası olarak da kaydedilir. PASCAL VOC formatında kullanıldığı gibi YOLO formatını da destekler ve kullanılabilir.

Öncelikle etiketleme yapılacak olan resmi açalım. Kişi sayısına göre resimde bulunan yüzü kırpalım. Kırptığımız yüzü aşağıda görüldüğü gibi Meyra ismi ile etiketleyelim.

Yapılan işlemleri resim de diğer bulunan insanlar içinde tekrar edelim. Örneğin Resimde Meyra için yapılan işlem Mümin için de gerçekleştirelim. Mümin adı ile yeni bir etiket oluşmuş oluyor. Böylelikle tek bir resim üzerinde birden fazla etiket yapmış olduk. Yaptığımız işlemler sonucunda resim ve yapılan etiketleri kaydedelim. Kaydedilen resim ImageNet tarafından kullanılan format PASCAL VOC formatında kullanalım ve her bir resim beraberinde XML dosyası olarak da kaydedilmiş olur.
Sonuç olarak bu kişi ve nesneler birden fazla resim için uygulayabiliriz. Farklı konumlarda, farklı kıyafetlerde, farklı ışıklarda, farklı şekillerde yüzlerce etiket yapabiliriz. Bunun sebebi kamera görüntüsünde eğittiğimiz fotoğraftaki halimiz olamayabilir. O yüzden elimizde birden çok resim ve etiket olmalı ki o an ki görüntünüzü veya resminizi algılayabilsin.
2. BBox Label Tool
YOLO ile nesne tespiti yapılabilmemiz için data klasörü resimler içerisindeki tanımak istediğimiz kişi ya da nesnenin çerçevesini (bounding box) belirlememiz gerekir. Bu işlemin yapılabilmesi için birçok açık kaynak yazılım bulunuyor. Bu işlem için “BBox Label Tool” aracını kullanabiliriz. Aracı Github reposundan, kullanılacak cihaza aşağıda yer alan komutu kullanarak indirebilirsiniz.
Kullanıma başlamadan önce main.py içerisinde 128.satırdaki dosya yolunu, BBox Label Tool’unu indirdiğimiz klasörün tam yolu olacak şekilde değiştirelim.
Bir başka düzeltilmesi gereken kısım da dosya uzantılarıdır. BBox Label Tool sadece “.jpg” uzantılı görseller ile birlikte kullanılabilir yani “.JPEG” uzantılı görseller .jpg olarak değiştirilmeliyiz bunun dışındaki PNG vb. uzantılı görseller başka araçlar ile jpg formatına çevirmeli veya silinmeliyiz.
BBox Label Tool klasörü altında 3 klasör yer alır. Bunlar Examples — Images — Labels klasörleridir. Altına rakamla “002” isminde yeni klasörler açalım ve son olarak Images klasörü altında oluşturduğumuz “002” klasörü içerisine önceden oluşturulan veri setlerinin resimlerini ekleyelim.
Artık etiketleme işleminin yapılabilmesi için “BBox Label Tool” yazılımı çalıştırılmamız yeterlidir. Bunun için aşağıda yer alan komutu kullanabilirsiniz.

Image Dir alanına yeni oluşturduğumuz klasörün adı olan yani 002 şeklinde yazalım ve Load dediğimizde BBox-Label-Tool/Images/002 klasörü altındaki resimler yüklenmiş olacaktır.
Açılan penceredeki resim üzerinde nesne tanıma işlemi sırasında tespit edilmesi istenilen kişi veya nesneyi en küçük çerçeve içine alınacak şekilde işaretleyelim ve sonrasında Next buttonu ile sonraki resme geçelim ve bu işlemi tüm resimler için tekrarlayalım. Bir sonraki resme geçtiğimizde BBox-Label-Tool/Labels/002 klasörü altına önceki o resmin dosyasının adıyla .txt dosyası oluşturalım. Bu dosya içerisinde, resim üzerinde işaretlenen çerçevenin piksel koordinatlar yer alır.
1
423 213 633 473
Bu projede iki etiket yer aldığı için her bir etiket için ayrı klasörler oluştu eğer tek bir etiket yer alsaydı 002 adında tek bir klasör oluşurdu.
Oluşturulan TXT verilerinin YOLO’ya uygun hale dönüştürme
BBox Label Tool ile oluşturulan .txt dosyaları içerisinde yer alan koordinat bilgisini YOLO için uygun formatta değildir.
Bu .txt’ler içerisindeki değerler YOLO’ya uygun formata çevirmeliyiz ve piksel değeri yerine 0–1 arasında oran belirtilmeliyiz.
Yolo için uygun format;
[kategori numarası] [nesnenin merkez noktasının X değeri] [nesnenin merkez noktasının Y değeri] [nesnenin genişliğinin X değeri] [nesnenin genişliğinin Y değeri]
0 0.340707070707 0.174505609524 0.326727272727 0.328236493376
Yolo için uygun formata Guanghan Ning’nin yazdığı scriptinden yararlanarak dönüştürelim. Böylelikle eklenen kişi bilgilerinin resim üzerinden tespit işlemini gerçekleştirmiş olduk.