Keras Retinanet
Teknofest 2019 Yapay Zeka Yarışması Finalisti HÜMA ekibi dokümanı
Bu doküman, Retinanet SSD algoritmasını anlaşılması kolay bir arayüzle sunan Keras Retinanet paketini kendi veri kümeniz üzerinde nasıl eğiteceğiniz açıklayacak. Bu örnek için Yavuz Kömeçoğlu’nun önerisiyle Stanford Aerial Vehicle veri kümesini (1.1GB) kullanacağım.
Kurulum
Keras kurulumunun mevcut olduğu makinenizde
git clone https://github.com/fizyr/keras-retinanet.git
pip3 install . --user # *
python3 setup.py build_ext --inplace # **
*Bu şekilde kurulum yaparsanız reponun kendisi içindeki Python betiklerini direkt olarak kullanamazsınız. Fakat o betiklere karşılık gelen hazır CLI araçları sisteminize kurulmuş olur. Bu yolla kurulum gerçeklerseniz kendi Python projelerinizde de keras-retinanet’i import edebilirsiniz.
**Reponun kendisini direkt kullanmak için external build target’leri kurmanız gerekmektedir. Bu senaryoda veri kümesinin indirdiğiniz klasöre direkt olarak repoyu kopyalayıp eğitim sürecini başlatabilirsiniz. Bu yazıda eğitim aşamasında bu yöntemi kullanıp kolayca eğitimi gerçekleştireceğim. Sonrasında ise ayrı bir projede kullanımını göstermek için paketi sistemime kurup tahmin sürecini yürüteceğim.
Önceden Eğitilmiş Ağırlık (Pretrained Weight) Dosyalarının Eldesi
GitHub reposu içindeki Releases sekmesi içinde her versiyonla dağıtılan ağırlık dosyasına erişebilirsiniz.
Biz bu yazı için bu bağlantıdaki ağırlık dosyasını kullanacağız
Proje Klasörü
Annotasyon Dosyası Formatı
CSV dosyası şu alanları içermelidir.
dosya/yolu,x1,y1,x2,y2,sinif_ismi
Bir dosya içinde hiç nesne yok ise bunu eklememeyi tercih edebilirsiniz veya alanları boş geçebilirsiniz.
Bir dosyada birden fazla nesne varsa her biri için ayrı kayıt atılır.
Sınıf Dosyası Formatı
Sınıf dosyası formatı Annotasyon dosyasındaki sınıfları integer tipinde ID’lere atar.
Bu bağlantıdan örnek veri kümesinde kullanılan sınıf dosyasına erişebilirsiniz.
Opsiyonel: BBox Tool Formatından Çevrim Betiği
Her ne kadar bu yazı için kullanacağımız veri kümesi önceden hazırlanmış olsa da bu kısımda sizler için faydalı olacağını düşündüğümüz bir betik paylaşmamız yerinde olacaktır. BBox Tool veri kümesi oluşturmada çokca kullanılan bir araçtır. Bu aracın oluşturduğu annotasyonları Keras Retinanet’in istediği formata çevirmek için aşağıda paylaşacağım betiği kullanabilirsiniz. Bu kod BBox Label’a sahip veri kümenizi kolayca eğitim ve validasyon veri kümesine çevirmenizi sağlar.
Eğitimin Başlatılması
python3 keras_retinanet/bin/train.py --weights INDIRDIGIMIZ_AGIRLIK_DOSYASI.h5 csv dosya/yolu/train_annotations.csv dosya/yolu/labels.csv
Bu bize her epoch sonunda eğitilmiş ağırlıkların kaydedildiği snapshot dosyası sağlayacaktır.
Eğitimin Sürdürülmesi
Oluşturulan snapshot üzerinden devam etmek için şu komutu kullanabilirsiniz.
python3 keras_retinanet/bin/train.py --snapshot /dosya/yolu/snapshot.h5 csv dosya/yolu/train_annotations.csv dosya/yolu/classes.csv
Validasyon Süreci
Eğitim sırasında validasyon sonuçlarının eldesi için aşağıdaki komutu kullanalım.
python3 keras_retinanet/bin/train.py --snapshot /dosya/yolu/snapshot csv dosya/yolu/train_annotations.csv dosya/yolu/classes.csv --val-annotations dosya/yolu/val_annotations.csv
Modelin Tahmin(Inference) Modele Çevrimi
python3 keras_retinanet/bin/convert_model.py dosya/yolu/snapshot.h5 dosya/yolu/inference.h5
Modelin Kullanılması ve Sonuçların Görselleştirilmesi
Tek görsel üzerinde tahmi sürecini yürütmek için yukarıdaki kod blokunu çalıştırabiliriz. Tahmin modelimizi ve görseli yükleyip Keras’ın bize sunduğu predict_on_batch metodu ile sonuçları elde edebiliriz. Sonrasında bu sonuçlar PyPlot ile görselleştirebiliriz.
python3 detect_single.py dosya/yolu/gorsel.jpg dosya/yolu/inference_model.h5