Image for post
Image for post
Photo by Noom Peerapong on Unsplash

Merhabalar bu blog yazısında colab ortamında resimlerden oluşan verisetini kullanarak taş, kağıt ve makas oyununu görüntülerle eğitip, videodan test ederek video da hangi hareketi yaptığını tespit edeceğiz.

  • İlk önce gerekli dosyaları driver hesabınıza aktarıyorsunuz. Verisetine ulaşmak için kaggle kaynağına bakabilirsiniz.
  • Daha sonra driver ‘ınızda aşağıdaki gibi bir colab sayfası açacaksınız.
Image for post
Image for post
  • Colab ‘ı driver ‘a bağlayıp oradaki kaynakları kullanmak için colab kod satırında aşağıdaki kodu çalıştırıp verdiği link bağlantısına gidip şifreyi almalısınız. Şifreyi kodu çalıştırdıktan sonra altına gelen kutucuğa yapıştıracaksınız.
  • Arka ucu ayarlar, böylece eğitim grafiğimizi bir resim dosyasına verebiliriz.
  • tensorflow.keras: Derin öğrenme için kullanılır. Modelimiz için bu kütüphaneyi kullanacağız.
  • sklearn: Scikit-learn’den, sınıf etiketlerimizi tek kodlama için bir LabelBinarizer uygulamasını kullanacağız.
  • Train_test_split: İşlevi, veri kümemizi eğitim ve test bölümlerine ayırır. Ayrıca, geleneksel bir biçimde bir sınıflandırma raporu yazdıracağız.
  • Path: Belirli bir yoldaki tüm görüntü dosyalarını listelemek için kullanışlı işlevdir. Oradan görsellerimizi belleğe yükleyebileceğiz.
  • Numpy: Sayısal işlemler için kullanılır.
  • argparse: Komut satırı argümanları, çalışma zamanında bir programa/komut dosyasına verilen bayraklardır. Programın çalıştırılabilmesi için ek bilgiler içerirler.
  • Pickle: Etiket ikilileştiricimizi diske seri hale getirmek için.
  • dataset: Giriş veri kümesinin yolu.
  • model: Çıktı Keras model dosyamıza giden yolumuz.
  • label-bin: Çıktı etiketi ikili ayırıcı turşu dosyamızın yolu.
  • epochs: Ağımızı kaç dönem eğitmek için — varsayılan olarak 25 dönem için eğitim vereceğiz, ancak eğiticide daha sonra göstereceğim gibi, 50 dönem daha iyi sonuçlar sağlayabilir.
  • plot: Çıktı çizim resim dosyamızın yolu — varsayılan olarak plot.png olarak adlandırılacak ve bu eğitim komut dosyasıyla aynı dizine yerleştirilecektir.
  • Sınıflarımın etiketleri bu kod satırında yazılır.
  • Verilerimizin yolunu dataset argümanı ile alırız.
  • Veriler ve etiketler listelenir.
  • Tüm veri kümesi imagePaths, args [“dataset”] (komut satırı argümanlarından gelen) içerdiği değer aracılığıyla toplanır.
  • LABELS kümesinde olmayan herhangi bir etiketi yok sayar.
  • Görüntüyü yükler ve önişleme yapar.OpenCV renk kanallarını keras uyumluluğuna değiştirir ve 244x244 piksel olarak yeniden boyutlandırılır.
  • Veri ve etiketleri sırayla veri ve etiket listesine ekler.
  • veri ve etiket listelerimizi Numpy dizilerine dönüştürür.
  • One-hot encoding, etkin bir sınıf etiketini ikili dizi öğeleri aracılığıyla işaretlemenin bir yoludur. Örneğin “Paper” dizi ([1, 0, 0]) olabilirken “Scissors” dizi ([0, 0, 1]) olabilir.
  • Verileri test için %25, eğitim için %75 ‘e ayırdım.
  • Veri setimizi çoğaltmak için augmentation işlemi uygularız. Farklı açılardan görüntüyü çoğaltır. Eğer farklı görüntülerle çalışacaksanız. Daha İyi bir sonuç alamak için, parametrelerini veya methodunu değiştirebilirsiniz.
  • Ortalama piksel değeri ayarlanır.
  • training/evaluation sırasında görüntüler üretilirken ortalama çıkarma işlemi gerçekleştirilecek şekilde trainAug ve valAug için ortalama özniteliği ayarlar.
  • ResNet101'yi ImageNet ağırlıklarıyla önceden eğitilmiş olarak yüklerken, ağın başını keser.
  • yeni bir headModel oluşturur. ve bunu baseModel ‘e aktarır.
  • Şimdi baseModel’i, geri yayınlama yoluyla eğitilmemesi için donduracağız.
  • Modelimizdeki fit_generator işlevine yapılan bir çağrı ağımızı veri artırma ve ortalama çıkarma ile eğitir.
  • Ağımızı test setinde değerlendirip bir sınıflandırma raporu yazdırdıktan sonra, devam edip accuracy/loss eğrilerimizi matplotlib ile çiziyoruz. Çizim, Hat 164 aracılığıyla diske kaydedilir.
  • Keras modelimizi kaydeder.
  • satırları etiket ikilileştiricimizi Python’un pickle biçiminde seri hale getirir ve saklar.

Train için kodlarımız bu kadardır. Başta oluşturduğumuz argümanlar sayesinde, kodları colab ‘a tek tek yazmak yerine dosyayı yükleyip dosya ismiyle eğitimimizi başlatacağız. Aşağıdaki kodu colab ‘a çalıştırınca eğitimimiz başlayacaktır.

Yukarıda train dosyamızın uzantısını , — dataset dataset kısmı verisetimizin dosyasını, — model model/activity.model kısmı oluşacak modelimizin nereye kaydedileceğini, — label-bin output/lb.pickle pickle dosyamızın kaydedeceği yeri belirtmektedir.

Eğitim sonuçlarınıza göre epoch sayısını da değiştirebilirsiniz. Bu şekilde overfitting ve underfitting ‘ten kaçınmış olursunuz. Eğitim süresini veriseti etkilemektedir. Farklı bir yol deneyip az veri ile de güzel bir sonuç çıkarabilirsiniz. Verinizi azaltarak daha hızlı eğitim yapabilirsiniz. Bu şekilde parametre vb. diğer özelliklerini değiştirerek tekrar eğiterek en iyi sonuca varabilirsiniz.

Aşağıda epoch 30 adım da eğitim sonucu çıkardığı değerler gözükmektedir.

Image for post
Image for post
  • Aşağıda Yapılan eğitim sonucu validation ve train kaybını aşağı doğru indirdiğini ve doğruluk derecesini yükselttiğini görüyoruz.
Image for post
Image for post
  • Gerekli kütüphaneler
  • model: Önceki eğitim adımımızdan oluşturulan girdi modeline giden yol.
  • label-bin: Önceki komut dosyası tarafından oluşturulan serileştirilmiş pickle biçimli etiket ikilileştiricisinin yolu.
  • input: Video sınıflandırması için bir giriş videosuna giden yol.
  • output: Diske kaydedilecek çıktı videomuzun yolu.
  • size: Dönen ortalama için kuyruğun maksimum boyutu (varsayılan olarak 128). Daha sonraki örnek sonuçlarımızdan bazıları için boyutu 1 olarak ayarlayacağız, böylece ortalama alınmaz.
  • model ve etiketleri binarizer yükler.
  • Ortalama çıkarma değerimizi ayarlar.
  • Dönen tahmin ortalamamızı uygulamak için bir deque kullanacağız. Deque’imiz Q, args [“size”] değerine eşit bir maxlen ile başlatılır.
  • Girdi video dosyası akışımıza bir işaretçi yakalar. Video akışımızdan kareleri
  • okumak için OpenCV’deki VideoCapture sınıfını kullanıyoruz.
  • Döngü video sınıflandırmamıza başlar. Çerçeve oluşur. Eğer oluşmuyorsa videonun sonuna gelmiş oluruz. Ve döngü durur.
  • Gerekirse çerçeve boyutu ayarlanır.
  • çerçevenin kopyası
  • renk kanallar
  • Çerceve 224x224 ‘de yeniden boyutlandırılır.
  • Tahmimleme
  • Parçalara ayrılan bu çizgiler, ortalama tahminler arasında en büyük karşılık gelen olasılığa sahip etiketi bulur. Yani çıktıda yazdırılan en yüksek yüzdeyi gösterilir. Eğer argmax değil argmin olsaydı. Bu sefer endüşük değeri yaklamaya çalışacaktı.
  • Ekrana sınıflar ve doğruluk yüzdelerini yazar.
  • Hangi işlemin en yüksek verdiğini bize göstermesi için eşik değeri belirledim. doğruluk %85 üzerindeyse yazı boyutu ve değerleri değişecektir.
  • Video yazıcıyı başlatır. writer kısmından video özelliklerini değiştire bilirsiniz. Mesela 30 değerini 8 yaparsak video çıktısı daha yavaş olacaktır.

Kaynaklar

https://www.pyimagesearch.com/2019/07/15/video-classification-with-keras-and-deep-learning/

Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store