Yapay Zeka Konferansı (DeepCon'18) 5-6 Ekim’de Ankara’da

5-6 Ekim tarihlerinde Türkiye'nin en büyük yapay zeka topluluğu Deep Learning Türkiye tarafından, Bilgi Teknolojileri ve İletişim Kurumu (BTK) ve HAVELSAN iş birliğinde bu yıl ilki düzenlenecek olan DeepCon'18 Yapay Zeka Konferansı ile bu alanda çalışmakta olan akademi, özel sektör ve kamu aktörlerinin bir araya getirilmesi, yenilikçi ve ilgi çekici fikirlerin ortaya koyulması hedeflenmektedir.

Bilgi Teknolojileri ve İletişim Kurumu’nun ev sahipliği yaptığı DeepCon’18 etkinliğinin ilk gününde, alanında uzman isimlerin panel oturumlarına ve sunumlarına, ikinci gününde ise uygulamalı atölye çalışmalarına yer verilecektir.

Etkinlikte, finanstan savunmaya, sağlıktan bankacılığa kadar farklı pek çok sektörde yapay zekanın son teknolojideki gelişmeleri detaylıca incelenecek ve tartışılacaktır.

Etkinlik herkese açık ve ücretsizdir.

Konferans programı ve detaylı bilgi için http://deepcon.deeplearningturkiye.com/

Sponsorluk: deepcon2018@gmail.com

Derin Öğrenme Modellerini Kullanan Bir Web Uygulamasının Geliştirilmesi

Merhaba,
Bu yazımızda Keras ile eğitilen bir derin öğrenme modelini kullanmak ve test etmek için bir web uygulamasını nasıl geliştirip ücretsiz olarak host edebiliriz birlikte görelim.

Python Flask ile Web Uygulaması

Flask, Python tabanlı web uygulamaları geliştirebileceğiniz mikroçatı(microframework)’dır.

Öncelikle Flask'ı yükleyelim.

pip3 install Flask

Yeni bir app.py python dosyası oluşturalım ve aşağıdaki python kodlarını yazalım.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def main():
    return "Merhaba Flask ;)"

if __name__ == "__main__":
    app.run()

 @app.route("/") ile  localhost:5000/ adresine istek gönderildiğinde ve def main(): fonksiyonu ile dönecek içerik için çağrılacak fonksiyon tanımlanıyor.

Terminalden oluşturduğumuz app.py kodumuzu çalıştıralım

python app.py

Terminalde Running on http://127.0.0.1:5000/ çıktısını gördüğümüzde tarayıcımızdan http://localhost:5000/ adresine gittiğimizde main() fonksiyonunda döndüğümüz string değerini göreceğiz.

Flask ile HTML Template Kullanma

Yeni bir templates klasörü açalım ve templates klasörü içerisine bir index.html dosyası oluşturalım ve aşağıdaki html kodlarını yazalım.

<!doctype html>
<html lang="en">
<head>
  <!-- Required meta tags -->
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
  <title>Merhaba Flask! Html demosu.</title>
</head>
<body>
  <div class="container">
    <div class="py-5 text-center">
      <h1>Merhaba Flask! Html demosu.</h1>

      <button type="submit" class="btn btn-primary">TEST</button>
    </div>
  </div>
  <!-- Optional JavaScript -->
  <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</body>
</html>

 

app.py python dosyamızda render_template paketini import edelim ve main() fonksiyonunu, yeni oluşturduğumuz index.html'i çağırması için aşağıdaki şekilde yeniden düzenliyoruz.

Terminalden yeniden app.py'yi çalıştırdığımızda aşağıdaki gibi html sayfasını göreceğiz.

 

Python Flask ile basit bir web uygulamasınu bu şekilde geliştirebilirsiniz.

Derin Öğrenme Web Uygulaması Geliştirme

Şimdi web uygulamamızı geliştirerek derin öğrenme modelini nasıl çalıştırabileceğimize bakalım.

Gerekli Keras paketlerini, resim sınıflandırma için kullanacağımız ağımız olan ResNet50 paketini ve ön işlemler için gerekli diğer paketleri ekleyelim.

from keras.applications import ResNet50
from keras.preprocessing.image import img_to_array
from keras.applications import imagenet_utils
from PIL import Image
import numpy as np
from flask import Flask, render_template, request, jsonify, send_from_directory
import io
import werkzeug
import datetime
import os

Resim sınıflandırma için ImageNet veriseti ile eğitilmiş modelimizi ve ağırlık dosyalarını yükleyelim.

model = ResNet50(weights="imagenet")

Form post metodu ile gönderilen resim dosyasını modelin uygun giriş formata getiren bazı ön işlemler uygulandıktan sonra modele gönderilip tahmin (prediction) sonucunun alındığı ve json formatında geri döndürdüğümüz predict() fonksiyonunu aşağıdaki gibi tanımlayalım.

@app.route("/predict", methods=["POST"])
def predict():
	# initialize the data dictionary that will be returned from the
	# view
	data = {"success": False}

	# ensure an image was properly uploaded to our endpoint
	if request.method == "POST" and request.files['image']:
		imagefile = request.files["image"].read()
		image = Image.open(io.BytesIO(imagefile))


		# preprocess the image and prepare it for classification
		image = prepare_image(image, target=(224, 224))

		# classify the input image and then initialize the list
		# of predictions to return to the client
		preds = model.predict(image)
		results = imagenet_utils.decode_predictions(preds)
		data["predictions"] = []

		# loop over the results and add them to the list of
		# returned predictions
		for (imagenetID, label, prob) in results[0]:
			r = {"label": label, "probability": float(prob)}
			data["predictions"].append(r)

		# indicate that the request was a success
		data["success"] = True

		print(data)

	# return the data dictionary as a JSON response
	return jsonify(data)

 

Son olarak geriye kalan bu servisi başlatmak.

if __name__ == "__main__":
	print("START FLASK")

	port = int(os.environ.get('PORT', 5000))
	app.run(host='0.0.0.0', port=port)

 

Uygulamamızın bu hali ile bir REST API olarak kullanabilir durumdayız.

Terminalden uygulamamızı çalıştırdıktan sonra başka bir terminalden http://0.0.0.0:5000/predict adresine örnek bir resmimizi curl ile post ediyoruz.
Örnek olarak amerikan papağını resmini sınıflandırmaya çalışalım:

Aşağıdaki gibi göndermiş olduğumuz resim modelde sınıflandırarak json sonucunu bize dönüyor.
Sonuçlar arasında en yüksek oranla %99 macaw olarak sınıflandırma yaptığını görüyoruz.


Şimdi ise yazmış olduğumuz API'yi kullanarak web arayüzünden bir resim dosyayı seçerek sınıflandırmayı gerçekleştirelim.

Bunun için index.html sayfamıza kullanıcının resim yükleyebilmesi için bir form ve dosya yükleme elementleri ekleyelim.

				<form id="upload-file" method="post" enctype="multipart/form-data">
					<div class="form-group">
						<label for="InputFile">Resim Dosyası:</label>
						<input name="image" type="file" class="form-control-file" id="InputFile" aria-describedby="fileHelp">
						<small id="fileHelp" class="form-text text-muted">Tanımak istediğiniz resmi bilgisayarınızdan seçiniz</small>
					</div>

					<button id="upload-file-btn" type="button" class="btn btn-primary">Gönder</button>
				</form>

 

Kullanıcı dosya yükleme elementi ile resim dosyasını seçtikten sonra 'Gönder' buttonuna tıklandığında, jquery ajax ile seçilen dosyayı app.py python kodunda tanımladığımız predict() fonksiyonunu çağıran REST API'mize POST isteği gönderelim.

		$('#upload-file-btn').click(function () {
			$('.loader').show();
			$("#results").html('');

			var form_data = new FormData($('#upload-file')[0]);
			$.ajax({
				type: 'POST',
				url: '/predict',
				data: form_data,
				contentType: false,
				cache: false,
				processData: false,
				async: false,
				success: function (data) {
					console.log(data.success);

					$('.loader').hide();

					$.each(data.predictions, function (i, item) {
						console.log(item);
						label = item["label"];
						prob = item["probability"].toFixed(2);
						percent = prob * 100;

						$("#results").append('<label>' + percent + '% ' + label + '</label><div class="progress"><div class="progress-bar" role="progressbar" aria-valuenow="' + percent + '" aria-valuemin="0" aria-valuemax="100" style="width:' + percent + '%"></div></div>');
					});
				},
			});
		});

 

Uygulamanın tüm kaynak kodlarına buradan ulaşabilirsiniz.
Kaynak kodları Keras kütüphanesi yüklü bir bilgisayara indirerek çalıştırabilir veya online şekilde yayınlamak isterseniz yazıyı okumaya devam edebilirsiniz.

Web Uygulamasını Heroku Üzerinde Yayınlama

Heroku, birçok dil desteği olan, uygulama alt yapısı sağlayan bir bulut platformudur.

Heroku’ya uygun düzenlemeleri yapmak ve kendiniz heroku uygulaması oluşturmak isterseniz gerekli adımları Sıddık Açıl’ın aşağıdaki buradaki yazısına göz atabilirsiniz.

Veya herhangi bir işlem yapmadan Heroku üzerinden bir hesap oluşturarak bu uygulamaya özel olarak hazırladığım aşağıdaki button ile tek tıkla kendi heroku hesabınız altında hızlıca yayına alabilirsiniz.

Görüşlerinizi aşağıdaki yorum bölümüne yazabilirsiniz.
Sorularınızı Türkiye’nin yapay zeka alanındaki tek soru&cevap platformu olan Deep Learning Türkiye’nin Soru&Cevap Sitesi’nde sorabilirsiniz.

Kaynaklar:

 

Raspberry Pi 3 üzerinde Intel Movidius Neural Compute Stick ile Derin Öğrenme Uygulamaları Çalıştırma

Merhaba,
Movidius NCS (Neural Compute Stick)'in Raspberry Pi 3 üzerinde kurulumu ve demo uygulamalarının nasıl çalıştırılacağını görelim.

Intel Movidius Neural Compute Stick  & Raspberry Pi 3

Intel Movidius Neural Compute Stick, USB portundan takıldığı cihaza, derin öğrenme uygulamalarınızı çalıştırma yeteneği kazandıran, düşük güç tüketimine sahip ve düşük maliyetli kendi başına yapay zeka (AI) kitidir. 

Movidius NCS (Neural Compute Stick) hakkında daha detaylı bilgi için M.Ayyüce Kızrak’ın “Intel-Movidius Neural Compute Stick Nedir ve Nasıl Kullanılır” başlıklı blog yazısını incelemenizi tavsiye ederim.

Intel Movidius Neural Compute Stick Tanıtım Videosu

 

KURULUM

Raspberry Pi üzerine Intel Movidius Neural Compute SDK kurulumu için aşağıdaki adımları sırasıyla uygulayalım.

1. Tensorflow

NCSDK'nın uygulamalarını Tensorflow ve Caffe kütüphanelerini kullanarak çalıştıracağımızdan ilk olarak Tensorflow'u indirip pip3 ile kurulumunu aşağıdaki şekilde yapalım.

$ wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.4.0/tensorflow-1.4.0-cp35-none-linux_armv7l.whl
$ pip3 install tensorflow-1.4.0-cp35-none-linux_armv7l.whl

2. Neural Compute SDK

Uygulamaları çalıştırmamız için gerekli tüm kütüphaneler ve örnekleri Github sayfasından klonlayarak aşağıdaki şekilde derleyelim.

$ sudo apt-get install git
$ git clone https://github.com/movidius/ncsdk
$ cd ncsdk
$ make install

NOT: Bu işlem Raspberry Pi 3 üzerinde saatlerinizi alabilir. Kitlendiğinde veya elektrik kesilip yarım kaldığında ncsdk klasörüne girerek make install komutunu yeniden çalıştırarak derleme işlemine devam edebilirsiniz.

Sabırlı bekleyişinizden sonra Setup is complete mesajını aldıysanız kurulumu başarıyla tamamladınız demektir. :)

3. OpenCV

Video kamerasından görüntü alma resim ve videolar üzerine işlemler yapılan bazı örnekler için OpenCV kütüphanesi gerekli olabiliyor.
Github sayfasından klonladığımız ncsdk içerisinde install-opencv.sh scriptini çalıştırarak OpenCV kütüphanesinin kurulumunu tamamlayabilirsiniz.

4. KURULUM TEST

Kurulumun başarılı şekilde gerçekleştiğini ve Raspberry Pi'nin Movidius NC'ni tanıyıp üzerinde kodun çalışıp çalışmadığını test edelim.

İndirmiş olduğumuz ncsdk içerisindeki örnek uygulamalar içerisinden python örneğini aşağıdaki şekilde çalıştıralım.

$ cd ncsdk/examples/apps/hello_ncs_py
$ python3 hello_ncs.py

Yukarıdaki ekran görüntüsünde gördüğümüz gibi sorunsuz şekilde hello_ncs.py örneğini NCS üzerinde çalıştırmış olduk.

GERÇEK ZAMANLI NESNE TANIMLAMA UYGULAMASI

Movidius NCS için Caffe ve Tensorflow örneklerinin bulunduğu başka bir repo indirelim ve webcam ile gerçek zamanlı şekilde nesne tanıma uygulaması olan live-image-classifier örneğini nasıl çalıştırabileceğimizi görelim.

Aşağıdaki şekilde ncappzoo reposunu indirelim.

git clone https://github.com/movidius/ncappzoo

apps altında live-image-classifier klasörüne girelim ve bu örnek için gerekli olan model dosyaları, ağırlıklar ve graph dosyasının indirilmesi için make komutunu çalıştıralım.

cd ncappzoo/apps/live-image-classifier
make

Gerekli dosyalar indirildikten sonra örneğimizi çalıştırabiliriz.

python3 live-image-classifier.py

 

Webcam yerine Raspberry Pi Kamera Modülünü Kullanma

Kendi resmi live-image-classifier.py demosu sadece webcam üzerinden çalışmaktadır.
İlgili örneği, Raspberry Pi kamera modülü ile çalışır şekilde revize ederek yeni örnek ekledim.
Buradan erişebilirsiniz.

 

TEŞEKKÜR

Derin öğrenme çalışmalarında kullanılması için talebimiz üzerine Movidius Neural Compute kitini hızlıca ulaştıran Mustafa Aldemir Bey nezdinde Intel Türkiye'ye ve Movidius NCS'yi taşınabilir projeler gerçekleştirmemiz için Raspberry Pi 3 desteğinde bulundukları için Ramazan Subaşı nezdinde de SAMM Teknoloji'ye teşekkürlerimi sunarım.