TensorFlow ile Sınıflandırıcı Eğitimi ve Görüntü Sınıflandırma

Öncelikle sınıflandırıcı eğitimine girmeden kullanacağımız kütüphaneye ve bilinmesi gereken bazı kavramlara bakalım.

TensorFlow Nedir?

TensorFlow , veri akış grafikleri kullanarak sayısal hesaplama için kullanılan açık kaynak kodlu bir derin öğrenme kütüphanesidir. Grafikteki düğümler, matematiksel işlemleri temsil ederken, grafik kenarları aralarında iletilen çok boyutlu veri dizilerini (tensörler) temsil eder. Esnek mimari, hesaplamayı tek bir API ile bir masaüstü, sunucu veya mobil cihazdaki bir veya daha fazla CPU’ya veya GPU’ya dağıtmanıza olanak tanır. TensorFlow başlangıçta, makine öğrenimi ve derin sinir ağları araştırması yürütmek amacıyla Google’ın Google Brain ekibi tarafından geliştirildi. Alternatifleri Caffe, Torch, Kerras, Theano, deeplearning4j vb.

Sınıflandırıcı Nedir?

Sınıflandırma bire bir olarak kelime anlamı ile örtüşmektedir. Doğadaki canlılar çeşitli özelliklerine;dış görünüş, organ yapısı, akrabalık, anatomik benzerlik vb. göre sınıflandırırlar. Bizim sınıflandırma olarak bahsettiğimiz şeyde aslında budur. Somut bir örnek verecek olursak dünya üzerindeki ülkelerin kendine özgü özellikleri vardır, yani bir ülkenin bayrağını gördüğünüzde milli marşını duyduğunuzda bu ülkeyi diğer tüm ülkelerden ayırır ve adını söyleyebilirsiniz. Bilgisayar bilimindede sınıflandırıcılar işte böyle çalışımaktadırlar. Elinizde bir veri seti (data set) bulunur ve bu veri setindeki veriler farklı kümeler oluştururlar daha sonra bu veri seti dışında olan bir eleman geldiğinde bunun özelliklerine bakararak ilgili küme içerisine yerleştirirsiniz. Bir yazılım geliştiriyoruz ve bu yazılımın bizim gösterdiğimiz bir hayvanın ne olduğunu bilmesi istiyorsak başvuracağımız yöntemlerden bir tanesi sınıflandırıcı olacaktır. Daha önceden elimizde bulunan kümelenmiş hayvan resimleri sayesinde yeni bir eleman geldiğinde bunun hangi kümenin elamanı olabilceğini  saptayabiliyor olacağız.

TensorFlow Kurulumu

TensorFlow ile geliştirme yapabilmek için Python sürümünüzün 3.5.x veya üzerinde olması gerekiyor. Kurulumu ise oldukça basit pip ile aşağıdaki şekilde kurabilirsiniz. Bu kütüphanelerin GPU üzerinde de çalışabildiğini söylemiştik, eğer NVIDIA bir GPU ya sahipseniz GPU versiyonunu kurabilirsiniz. AMD  GPU üzerinde çalıştırmak bazı opensource paraleleştirme küğtüphaneleri ile mümkün uğraşmak isteyenler kaynak kodu indirip derleyebilirler. TensorFlow’u doğrudan Linux, MACOS ve Windows üzerine kurabilirsiniz. Github reposunda Android için de bir örnek proje mevcut mobil geliştirme yapmak istiyorsanız ona göz atabilirsiniz.

CPU Sürümü

pip3 install --upgrade tensorflow

GPU Sürümü

pip3 install --upgrade tensorflow-gpu

Detaylı bilgi almak için buradaki dökümanına göz atabilirsiniz.

TensorFlow ile geliştirme yapmak için daha kullanışlı bir yol ise Docker kullanmaktır. TensorFlow ekibi tarafından bir Docker image’ı hazırlanmıştır, bu sayede sanal makine üzerinde her şey hazır bir şekilde rahatlıkla testlerinizi yapabilirsiniz. Docker nedir diye merak ediyorsanız bu 10 dakikalık bu videoya göz atabilirsiniz ve not olarak ekleyeyim Docker Windows platformunda (Windows 10 pro x64) çalışabilmektedir.

(Docker üzerinde çalışmayacaksanız bu adımları atlayabilirsiniz.)

Docker kurulumunu yaptıysanız, tensor flow için hazırlanan image’ı kurarak başlayalım. Öncelikle Windows PowerShell’i açalım ve;

docker run -it gcr.io/tensorflow/tensorflow:latest-devel

image indirme işlemi tamamlandıktan sonra aşağıdaki docker komutu ile başlatalım;

docker run -it gcr.io/tensorflow/tensorflow:latest-devel

bu adımdan sonra image ayağa kalkmış olacaktır.

Bundan sonraki adımlar sınıflandırıcı eğitimini ve kullanımını anlatacaktır.

Veri Setinin Hazırlanması

Testlerde sıkça kullanılan örnek veri setini indirebilirsiniz. Bu veri seti içerisinde çeşitli kategorilerde çiçek resimleri bulunmaktadır (papatya, gül vb.).

http://download.tensorflow.org/example_images/flower_photos.tgz

Docker üzerinde bu veri setini indirmek için ise curl kullanabilirsiniz. ve indirdiğimiz veri setini aynı dizine çıkartalım.

cd $HOME
mkdir tf_files
cd tf_files
curl -O http://download.tensorflow.org/example_images/flower_photos.tgz
tar xzf flower_photos.tgz

Eğitim için gerekli her şey Tensorflow example içerisinde mevcut (tensorflow/examples/image_retraining/), git reposundan son halini almak için

cd /tensorflow
git pull
python tensorflow/examples/image_retraining/retrain.py \
--bottleneck_dir=/tf_files/bottlenecks \
--how_many_training_steps 500 \
--model_dir=/tf_files/inception \
--output_graph=/tf_files/retrained_graph.pb \
--output_labels=/tf_files/retrained_labels.txt \
--image_dir /tf_files/flower_photos

image dir olarak veri setini dizinini veriyoruz, model ve etiketlerin oluşturulmasını istediğiniz dizini belirtin.

Eğitim işlemi sonunda model kullanıma hazır hale gelecektir.

Model Nasıl Kullanılır?

output_graph.pb model dosyası tf_files/output_labels.txt ise model tanımlarını içeren etiketler yani kategorilerdir.

import tensorflow as tf, sys

# Tahmin isteyeceğimiz resim parametre olarak gönderilecek
image_path = sys.argv[1]

# Görüntü okunur
image_data = tf.gfile.FastGFile(image_path, 'rb').read()

# Etiket dosyasını yükler, satır başı çizgilerini kaldırır
# Uygun dizini belirtiniz
label_lines = [line.rstrip() for line 
                   in tf.gfile.GFile("retrained_labels.txt")]

#model dosyası tanımlanır
with tf.gfile.FastGFile("retrained_graph.pb", 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    _ = tf.import_graph_def(graph_def, name='')

with tf.Session() as sess:

    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
    
    predictions = sess.run(softmax_tensor, \
             {'DecodeJpeg/contents:0': image_data})
    
   
    top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]
   
    for node_id in top_k:
        human_string = label_lines[node_id]
        score = predictions[0][node_id]
        print('%s (score = %.5f)' % (human_string, score))

Yukarıdaki kaynak kod ile modelimizi kullanarak tahmin değerini alabilmekteyiz, bu kodu tensorflow örnekleri arasında train dizini altında da bulabilirsiniz.

Kullanmak içinde;

python label_image.py test_goruntu.jpeg

Sonuç olarak size skor listesi döndürecektir.

daisy (score = 0.99071)
sunflowers (score = 0.00595)
dandelion (score = 0.00252)
roses (score = 0.00049)
tulips (score = 0.00032)

 


Ayrıca Bakınız:

  1. https://www.tensorflow.org/get_started/get_started
  2. http://derindelimavi.blogspot.com.tr/2017/03/semantik-bolutleme-ve-fcn.html
  3. http://www.bilgisayarkavramlari.com/2013/03/31/siniflandirma-classification/
  4. https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/