Yolov4 ile Nesne Tanıma & Custom Dataset Oluşturma
Herkese merhaba arkadaşlar bugün sizlere Yolov ’dan ve yolo ile kendi custom datasetimizi nasıl oluşturabiliriz bundan bahsedeceğim.
Custom data oluşturmaya başlamadan önce yolo nedir nerelerde kullanılır bunlardan bahsedelim.
YOLO (You Only Look Once) bilgisayarlı görü uygulamalarında çoğunlukla tercih edilen nesne tespiti yapabilen bir algoritmadır. OpenCV, NumPy, SciPy gibi Python programlama dili kütüphaneleri ile birlikte kullanılarak kameradan gelen görüntüdeki ya da verilen resimdeki nesneleri bounding box ile çevreler.
Yolo aşağıdaki 80 tane farklı nesneyi tanıyabilir. Tabiki de bu kadar sınırlı değili,custom dataset oluşturarak yolonun tanıması istediği nesneleri de bu listeye ekleyebiliriz.
person
bicycle
car
motorbike
aeroplane
bus
train
truck
boat
traffic light
fire hydrant
stop sign
parking meter
bench
bird
cat
dog
horse
sheep
cow
elephant
bear
zebra
giraffe
backpack
umbrella
handbag
tie
suitcase
frisbee
skis
snowboard
sports ball
kite
baseball bat
baseball glove
skateboard
surfboard
tennis racket
bottle
wine glass
cup
fork
knife
spoon
bowl
banana
apple
sandwich
orange
broccoli
carrot
hot dog
pizza
donut
cake
chair
sofa
pottedplant
bed
diningtable
toilet
tvmonitor
laptop
mouse
remote
keyboard
cell phone
microwave
oven
toaster
sink
refrigerator
book
clock
vase
scissors
teddy bear
hair drier
toothbrush
-Custom Dataset Oluşturma
Yoloyu eğitmekden kastımız ne hadi buna değinelim. Yolo nesneleri tanıması için önceden hazırlanmıs datasetlere ihtiyaç duyar. Mesela bir arabayı tanıması için arabanın ne olduğunu bizlerin yolaya tanımlaması gerekir. Buda tam olartak aracın farklı açılardan çekilmiş resimlerini tanımlayarak olur. Daha iyi sonuçlar elde etmek için çok fazla veri ile eğitmek lazım ama ben şu anlık az veri kullanacağım ama ne kadar çok o kadar iyi. Dilerseniz kendi custom datamızı oluşturmayla başlayalşım. Ben kendime ait faremi kullanacağım siz dilediğinizi nesneyi kullanabilirsiniz.
Eğitim için gerekli verilerimizi hazırladık. Şimdi ise resimleri etiketlememiz gerekiyor. Resimlerdeki istediğimiz nesneyi bounding box içerisine alacağız ve bize sonucunda bazı txt dosyaları oluşturacak. Veri etiketlemek için LabelImage kullanacağız. LabelImage kullanımı için şurdaki yazıyı okuyabilirsiniz. Verilerimizi etiketledik ve hazır hale getirdik.
Şimdi sizlerle data_ders adında bir klasör oluşturacağız.
data_ders.names klasörü içerisinde siz kaç tane etiketlediyseniz o sınıfların isimlerini yazmalısınız.
Darknet Kurulumu
Darknet, Yolov4'ün kullanıdığı bir CNN modeldir. Darknet’i burdaki reposityden kolaylıkla indirebilirsiniz. Git Bash ile masaüstüne klonlayabilirsiniz.
Şimdi ise darknet klasörü içerisinde bir kaç değişiklik yapacağız. Değişikliklere başlamadan önce bu linkteki yolov4.conv dosyasını indiriyoruz ve darknet klasörünün üçerisine atıyoruz.
Darknet klasörü içerisindeki makefile dosyasını notepad ile aç dedikten sonra GPU CUDNN OPENCV değerlerini 1 yapıyoruz.
Sırada darknet/cfg/yolov4.cfg dosyasına gidiyoruz.
subdivision = 64
width = 416
height = 416
max_batches = 2000 (kaç tane sınıf oluşturduysak onla 2000 çarpımı ben sadece mouse sınıfı oluşturduğum için 2000 yapıyorum)
steps = 1600,1800 (max_batch’in %80 ve %90 ‘nı)
en alta iniyoruz =>
classes = 1 (bende 1 tane olduğu için)
filters =18 formülü = ((sınıf sayısı + 5) * 3)
Bu işlemi yaptıktan sonra biraz daha yukarı çıkarak 2 kere daha tekrar aynı şekilde değişiklik yapacağız.
Tüm değişikleri yaptıktan sonra kaydettiğimiz yolov4.cfg dosyasını darknet anadizinine atıyoruz ve ismini yolov4_ders.cfg olarak değiştirelim.
Son olarak ise darknet klasörü içerisine hazırlamış olduğumuz data_ders klasörünü atalım.
Hazırladığımız darknet dosyasını .zip haline getirip Google Drive yükleyelim. Eğitimi Google Colab üzerinden gerçekleştireceğiz.
Colab
Darknet dosyamız drive üzerinde ve artık şimdi burdan notebook dosyasını indirip colab üzerinde açarak eğitime başlayalım.
Şimdi sırsı ile kodları çalıştıracağız. İlk olarak drive bağlantısı kodunu çalıştırarak Google Drive’ımıza bağlanıyoruz.
Bağlantıyı yaptıktan sonra sol tarafta oluşan gdrive içerisinde kendi driveımız içinde yüklediğimiz darknet dosyasını buluyoruz ve copy path diyerek kod içerisindeki yolu değiştiriyoruz ve kodu çalıştırarak zip dosyasını açıyoruz.
Sonraki kodu çalıştırarak make dosyasını çalıştırıyoruz. Çalıştırdıktan sonra en sonda lcudann -lstdc++ ile bitiyor is başarılı bir şekilde tamamlanmıştır.
Şimdi ise backup klasörünü ilk kodu çalıştırarak siliyoruz ve drive içerisinde oluşturduğumu bir klasörün yolunu veriyoruz. Bu sayede ağırlık dosyasını oraya kaydedeceğiz.
Backup bağlantısını yaptık darknet dosyamız hazır her şey yolunda, şimdi eğitime başlayabiliriz ama başlamadan önce ders.data, yolov4_ders.cfg, yolov4.conv.137 dosyalarımızı darknet dosyası içerisinden bulup koddaki yollarını değiştirelim ki başarılı bir şekilde eğitime geçebilelim. Eğitim biraz uzun sürebilir, verilen datanın çoğunluğuna ve internet hızına bağlı olarak değişebilir.
Evet eğitim tamamlandı artık test yapma zamanı. Test yapmadan önce bir kaç değeri değiştirmemiz gerekiyor.Model kodunu çalıştırarqak değerleri değiştiriyoruz.
Ve artık test yapmaya geçebiliriz.
ders.data, yolov4_ders.cfg, yolov4_ders_last.weights (belirlediğimiz backup klasörü içerisinde oluşacak) ve test etmek istediğimiz resmi veriyoruz.
Sonucunda darknet klasörü içersinde predictions.jpg diye bir resim dosyası oluşuyor. Eğer başarılı bir şekilde eğitim tamamlandı ise resim üzerindeki başarılı bir şekilde bounding box içerisine almış olacak.
Evet buraya kadar sabırla okuduğunuz için teşekkürler arkadaşlar . Umarım eğitici bir yazı olmuştur. Diğer yazıları da kontrol etmeyi unutmayınız. Sağlıcakla kalınız.