Keras Retinanet

Source: Deep Learning on Medium

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ü

Proje klasörünün yapısı

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 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