Google Teachable Macine Türkçe Kullanımı

Fatih Es
10 min readJan 24, 2021

A. Makine Öğrenmesi Nedir?

Makine öğrenmesi kendisine sunulan verileri yapısal işlevler olarak öğrenen ve öğrendiklerini verileri üzerinden tahminler yapan bir algoritma çalışması olarak nitelendirebiliriz. Bu tür algoritmalar diğerlerinin aksine talimatları harfiyen takip etmek yerine örnek girişlerden tahminler ve kararlar gerçekleştirebilen bir model inşa ederek çalışır.

Şekil 1: Yapay zekâ, makine öğrenmesi ve derin öğrenme ilişkinin küme gösterimi.

B. Derin Öğrenme Nedir?

Derin öğrenme, makine öğrenmesinin bir alt alanıdır ve “öğrenme” kavramları benzerlik gösterir. Sırasıyla;

• Model oluşturulur.

• Kullanılmak üzere ilgili veriler ayrılır.

• Bu veriler ile algoritma eğitilir. Yani algoritma öğrenir.

• Hiç görmediği veriler hakkında tahminlerde bulunur.

Derin öğrenme metin, resim, ses gibi birçok farklı alanda uygulanabilmektedir.

Derin öğrenme konusunu biraz daha detaylandıralım. Derin öğrenmedeki ‘derin’ kelimesi, verileri dönüştüren sayısız katmanı ifade etmektedir. Bu mimari, her bir ardışık katmanın modellerle beslenerek aşamalı olarak daha karmaşık kalıpları öğrenmeye çalıştığı bir sistemdir.

Derin öğrenmeyi bu derece güçlü kılan en önemli özellik ise; modele ne kadar çok veri ile beslenirse daha iyi tahminler sunar. Diğer öğrenme algoritmalarında verinin hacminin artması algoritmayı “overfitting” yani aşırı öğrenme riski ile karşı karşıya bırakabilir. Aşırı öğrenme modelimizi eğitirken kullanılan verilere aşırı uyum sağlayarak yeni verileri tahminde yetersiz kalması durumudur.

C. TensorFlow Nedir?

Şekil 2: TensorFlow resmi logo tasarımı.

Google tarafından geliştirilen, açık kaynaklı ve derin öğrenme alanında en çok kullanılan kütüphanelerden biridir. Esnek bir yapıya sahiptir böylelikle tek bir API ile platform fark etmeden çalışabilir. Temelde Python kullanılarak geliştirilmiş bir framework olup son zamanlarda Python dilinin yanı sıra C++, Java, C#, R ve Javascript gibi birçok dili desteklemektedir. 2018 yılında yayınlanan TensorFlow.js sayesinde internet tarayıcısı üzerinden yapay zekayla ilgili birçok işlemi yapmamıza imkân sağlamıştır.

D. Öğretilebilir Makine (Teachable Machine) Nedir?

Şekil 3: Teachable Machine sitesi kullanıcı arayüzü.

İlk versiyonu 2017 yılında yayınlanmış olan ve en kısa tanımı ile makine öğrenimi modelleri oluşturmayı hızlı, kolay ve herkes için erişilebilir olan web tabanlı bir araçtır denebilir. Öğretilebilir makine, web tarayıcımızda yaptığımız modelleri eğitmek ve çalıştırmak için Javascript’te makine öğrenmesi için kullanılan TensorFlow.js kitaplığını kullanmaktadır. Tek bir cümle ile ifade etmek istersek herhangi bir kodlamada yapmadan kendi derin öğrenme modelimizi geliştirmeye imkân sağlar. Bu aracı kullanımı ise oldukça basit:

1. Örneklerimizi, modelimizin öğrenmesini istediğimiz sınıf veya kategoriler halinde gruplarız.

2. Modelimizi tek bir buton ile eğitip, ardından yeni örnekleri doğru şekilde sınıflandırılıp sınıflandırılmadığını test ederiz.

3. Modelimizi siteler, uygulamalar gibi birçok alan için ücretsiz bir şekilde indirebiliriz.

Öğretilebilir makine esnek bir yapıya sahiptir. Bu esnek yapı sayesinde halihazırda olan dosyalarımızı kullanabilir veya o an web kamerası veya mikrofonu kullanarak verilerimizi oluşturabiliriz.

Şu anlık sadece üç model sunmaktadır. Fotoğraf, ses veya poz sınıflandırabiliyoruz. Geliştiriciler yakın zamanda yeni modellerin geleceğini de belirtmektedir.

Öğretebilir makine ile yapılan tüm modeller, Javascript’in çalıştığı her yerde çalışabilen TensorFlow.js modelleridir. Bu nedenle Glitch, P5, js, Node.js gibi araçlar ile verimli çalışabilmektedir.

E. Adım Adım Teachable Machine Kullanımı

Adım 1: Teachable Machine Üzerinden Model Oluşturma

Projenin Seçilmesi: Teachable Machine oldukça kolay bir arayüze sahiptir. Bu proje de görüntü işleme üzerine bir model geliştirip yerel bilgisayarımızda çalıştırmayı hedefliyoruz. https://teachablemachine.withgoogle.com/ adresine gidelim ve ‘Get Started’ kısmına tıklayalım. Üç çeşit proje seçimi sunuluyor. Bu proje de görüntü işleme yapacağımız için ‘Image Project’ kısmını seçerek devam edelim. Bu seçim bize resimlerden model oluşturup eğitebileceğimiz bir sayfa açacaktır.

Şekil 4: Teachable Machine sayfasında ‘Get Started’ dedikten sonra seçebileceğimiz proje türleri.

Veri Setinin Oluşturulması: Resimleri sınıflandırmak ve modeli eğitmek için sınıfları ekleyip onlara etiket belirtmeliyiz. Bu etiketleri yani sınıf adlarını model eğitildikten sonra modelimiz nesneyi tanıdığında ne olduğunu belirtmek için kullanacak.

Bir grubu ‘Arka Plan’ sınıfı olarak atamak mantıklı olacaktır. Böylelikle herhangi bir nesne konulmadığında arka plan çıktısı alırız. Buna ek olarak arka plandaki ayrıntıları diğer etiketli sınıflardan biriyle ilişkilendirilmemesine yardımcı oluruz. Bu durum bize nesne algılama kısmında büyük oranda başarı getirecektir.

Şekil 5: Kaggle sayfasında üye olduktan sonra veri setinin göründüğü sayfa.

Bir sınıfa görüntü eklemek için, webcam kullanabileceğiniz gibi başka kaynaktan görüntüler yükleyebiliriz. İnternet üzerinden hazır veri setleri bulacağımız gibi kendi veri setlerimizi de oluşturabiliriz. İsterseniz webcam aracılığıyla basit bir görüntü işleme projesi geliştirebilirsiniz. Biz bu örnekte Kaggle’da bulunan ve bu link (https://www.kaggle.com/kritikseth/fruit-and-vegetable-image-recognition) üzerinden erişilebilir olan meyve ve sebzeler üzerine fotoğraflardan oluşan seti kullanıyoruz. Linke gittiğinizde Kaggle üyeliğiniz yok ise veri setini indirmeniz için üyelik isteyebilir. Üye olduktan sonra sağ üst kısımda bulunan “Download (2GB)” butonundan veri setini indirebilirsiniz. Sonrasında inen ‘.zip’ dosyasını dizine çıkardıktan sonra klasörleri inceleyebilirsiniz. Modelimizi eğitmek için ‘train’ klasörü içerisindeki görüntüleri kullanacağız.

Şekil 6: Sınıflar oluştururken Kaggle üzerinden indirdiğimiz veri setini kullanıyoruz. CTRL + A ile tüm görüntüleri seçip aç diyebiliriz. Bu işlemi her sınıf için tek tak yapmanız gerektiğini unutmayınız.

Modeli Eğitmek: Tüm sınıfları oluşturduktan ve veri setimizin yeteri kadar fotoğraf içerdiğinden emin olduktan sonra modeli eğitme aşamasına gelmiş oluyoruz. Modeli eğitmek için tarayıcı üzerindeki sekmeyi açık bırakmalısınız. Kullanılan sınıf ve görüntü sayısına göre modeli eğitmek biraz zaman alabilmektedir. Tamamlandıktan sonra modeli test etme kısmına gelmiş oluyoruz.

Şekil 7: Tüm sınıflarımızı oluşturup sınıfları görüntüler ile besledikten sonra “Train Model”” butonuna basmalısınız.

Modeli Test Etmek: Şimdi eğitilmiş modelimizi test etme ve başarısının nasıl olduğunu görebiliriz. Ön izleme bölgesine gidip ‘Input’ seçeneğini açarsak web kameramız açılacaktır. Web kamerası önüne eğitirken kullandığınız sınıflara ait nesneleri (örneğin bu proje için portakal, domates vb.) koyarak doğru tahmin edip etmediğini kontrol edebiliriz. Eğer iyi bir performans almadığınızı düşünüyorsanız modeli daha çok fotoğraf ile besleyerek tekrar eğitmeyi deneyin, memnunsanız modeli dışa aktarma zamanı gelmiştir.

Şekil 8: Modelinizi “Preview” alanında bilgisayar webcamini kullanarak deneyebilir başarısını ölçebilirsiniz.

Modeli Dışarı Aktarma: Modeli dışarı aktarmak için ‘Export Model’ butonuna tıklayın. Yeni bir pencere açılacaktır. ‘Tensorflow’ sekmesine tıkladıktan sonra hemen sonrasında ‘Keras’ türünü seçiniz. Bu işlemden sonra ‘Download my model’ diyerek modelinizi indirin. Modeli sıkıştırmak ve indirmeye hazır hale getirmek birkaç dakika sürebilir. Biraz bekledikten sonra indirilme işlemi hızlıca bitecektir. Bir ‘.zip’ dosyası inecektir. Zip içerisindeki dosyaları dışarı çıkarttığınızda ‘keras_model.h5’ dosyası ve bir ‘label.txt’ dosyası görmelisiniz. Bu dosyaları konumunu unutmayacağınız bir yere taşımanızı tavsiye ederim. Birkaç yükleme işleminden sonra modelimize ait bu dosyaları kullanmamız gerekecek.

Şekil 9: “Export Model” dedikten sonra sırasıyla “Tensorflow” ve “Keras” seçilmelidir. “Download my model” diyerek modelinizi indirmelisiniz.
Şekil 10: İndirmiş olduğunuz ‘.zip’ dosyasını dizine çıkardığınızda karşınızda bu iki dosya görünmelidir.

Adım 2: Python 3 Kurulumu

Şekil 11: Python’un resmi indirme adresine gidip işletim sisteminize uygun olan versiyonu indirmelisiniz.

Yapılması gereken ilk işlem eğer bilgisayarınızda halihazırda kurulu değilse Python 3’ü kurmak olacaktır. https://www.python.org/downloads/ adresine gidip işletim sisteminiz için doğru kurulumu indirip çalıştırabilirsiniz. Kurulum sırasında, Python’u Path’e eklmek için kutuyu işaretlediğinizden emin olun.

Şekil 12: Windows işletim sistemine sahip cihazlarda kurulum yaparken “Add Python <versiyon> to PATH” kutusunun seçili olduğundan emin olunuz.

Python’u tam olarak yükledikten ve Path’e ekledikten sonra, terminalizden veta komut istemcisini açıp ‘python — version’ ve hemen ardından ‘python3 — version’ yazın. (Terminali yani ‘Komut İstemi’ni açmak için Windows işletim sisteminde arama kısmına ‘cmd’ yazabilirsiniz.) Bu önemlidir çünkü; ‘python’ veya ‘python3’ komutunun Python 3 kurulumunuzla eşleşip eşleşmediğini öğrnenmemiz lazım. Python komut satırlarını çalıştırmak ve teni Python paketleri yüklemek gibi işlemler için bilmemiz gerek. Python ve Python3 ile hiçbir yürütülebilir dosya eşlenmemiş ise, işletim sisteminizin Path kısmına ortam değişkenleri eklemeyi deneyebilirsiniz. Ortam değişkenlerine Python Path ekleme ile ilgili internette birçok yazı bulabilirsiniz.

Şekil 13: Komut isteminde doğru yüklendiğinden emin olmak için çalıştırılması istenilen kodlar görseldeki gibidir.

Şimdi bu projeyi yaparken yararlandığımız dosyaları ve makine öğrenimi modelini, projeyi farklı bir veri seti ile yapan Micheal’in Github deposundan veya direkt olarak bu projeyi şahsi Github depomdan almanız gerekecek. Bir git istemcisi kurabilir ve depoyu klonlayabilir veya isterseniz direkt tarayıcınızdan deponun zip dosyasını indirebilirsiniz:

Şekil 14: Şahsi GitHub hesabım için linke tıklarsanız öncelikle 1 numaralı repo içerisinde olduğunuzdan emin olduktan sonra 2 ve 3 ile gösterilen kısımlara sırasıyla tıklamanız durumunda proje dosyaları ‘.zip’ olarak bilgisayarınıza inecektir.

Micheal Github Depo Linki: https://github.com/mjdargen/Teachable-Machine-Object-Detection

Şahsi Github Depo Linkim: https://github.com/fatihes1/Techable-Machine-Turkish-Directory

Adım 3: Python Ortamını Ayarlama: OpenCV ve TensorFlow

Bu geliştirme ortamı için kurulum sürecini basitleştirmek adına Micheal’in hazırladığı kurulum komut dosyalarını kullanacağız. Github üzerinden aldığınız dosyalar içerisinde ‘installation_scripts’ adlı klasörün içerisine girmeliyiz. İşletim sistemimize uygun olan çalıştırmalıyız.

Şekil 15: Farklı işletim sistemleri için farklı komut dosyaları vardır. İşletim sisteminize uygun olan komut dosyasını çalıştırmalısınız.

Windows Kurulumu: Bu adıma geçmeden önce Python 3’ün doğru kurulduğundan emin olmanız gerektiğini unutmayın. Python 3 çalıştırılabilir dosyanızın ‘python3’ ibaresiyle birlikte çağırmak isteyecektir. Bu aşamada sorun yaşamanız durumunda, toplu komut dosyasını düzenlemeniz ve ‘python3’ komutunun her örneğini ‘python’ ile değiştirmeniz gerekir. ‘Windows_install.btt’ komut dosyasını çalıştırmalıyız ancak yönetici olarak çalıştırmayalım. Sistem ve internet hızına bağlı olarak yarım saat veya daha fazla sürebilmektedir.

Mac Kurulumu: Bu adıma geçmeden önce Python 3’ün doğru kurulduğundan emin olmanız gerektiğini unutmayın. Python 3 çalıştırılabilir dosyanızın ‘python3’ ibaresiyle birlikte çağırmak isteyecektir. Bu aşamada sorun yaşamanız durumunda, toplu komut dosyasını düzenlemeniz ve ‘python3’ komutunun her örneğini ‘python’ ile değiştirmeniz gerekir. İndirilen dosyaların olduğu klasörde terminal açalım ve şu kodu yazarak komut dosyasını çalıştırılabilir hale getirmeniz gerekmektedir:

sudo chmod + x ./installation_scripts/mac_install.sh

Komut dosyasını şu komutu kullanarak çalıştırabilirsiniz:

./installation_scripts/mac_install.sh

Sistem ve internet hızına bağlı olarak yarım saat veya daha fazla sürebilmektedir.

Linux Kurulumu: Bu adıma geçmeden önce Python 3’ün doğru kurulduğundan emin olmanız gerektiğini unutmayın. Python 3 çalıştırılabilir dosyanızın ‘python3’ ibaresiyle birlikte çağırmak isteyecektir. Bu aşamada sorun yaşamanız durumunda, toplu komut dosyasını düzenlemeniz ve ‘python3’ komutunun her örneğini ‘python’ ile değiştirmeniz gerekir. İndirilen dosyaların olduğu klasörde terminal açalım şu kodu yazarak komut dosyasını çalıştırılabilir hale getirmeniz gerekmektedir:

sudo chmod + x ./installation_scripts/linux_install.sh

Komut dosyasını şu komutu kullanarak çalıştırabilirsiniz:

./installation_scripts/linux_install.sh

Not: Proje yanında gelen komut dosyaları ile kurulumunuz sağlanmaz ise OpenCV ve Tensorfow kurulumlarını resmi siteleri üzerinden de yapabilirsiniz.

OpenCv Kurulumu: https://docs.opencv.org/master/d5/de5/tutorial_py_setup_in_windows.html

Tensorflow Kurulumu: https://www.tensorflow.org/install

Bu kurulumlara rağmen kodunuzu Visual Studio Code veya Pycharm gibi bir IDE ile açtığınızda kütüphanelerin içeri aktarması (import işlemi) ile ilgili hata almanız durumunda içeri aktarılamayan kütüphaneleri manuel olarak indirebilirsiniz. Şöyle bir örnek ele alalım. “import pyttsx3” satırında hata aldığımızı düşünelim ve bu kütüphaneyi cihazımıza indirmemiz gerekiyor. Tarayıcımızı açıp bir arama motoruna “pyttsx3 install” yazdığımızda arama sonuçlarından resmi olan siteye girdiğimizde bizi aşağıdaki görseldeki gibi bir sayfa bekleyecektir.

Şekil 16: Kopyalamanız gereken kod işaretli kısımda bulunmaktadır.

“Installation” kısmında gördüğümüz kodu kopyala yapıştır ile veya direkt olarak elle komut isteminde çalıştırmamız gerekir. Arama kısmına “cmd” yazarak komut istemini çalıştıralım ve kodu girelim.

Şekil 17: Komut istemine kodu yazdıktan sonra ‘enter’ tuşuna basınız ve paketlerin indirilip kurulmasını bekleyiniz.

Bir başka örnek vermek gerekirse import numpy kısmında hata aldığımızı düşünelim ve tarayıcımızdan herhangi bir arama motorunu kullanarak ‘numpy install’ yazdığımızda aynı şekilde kurulum için gerekli kodu bulabiliriz. Numpy için kod aşağıdaki gibidir.

pip install numpy

Adım 4: Projedeki Kodu Kendi Projenize Uyarlayın

Artık OpenCV ve TensorFlow geliştirme ortamı kurulumlarına sahip olduğumuza göre Teachable Machine ile oluşturduğumuz modelimizi çalıştırabiliriz. Sağlanılan örnek modeli (Micheal’ın deposundan almışsanız kutu içecekler ile ilgili bir görüntü işleme modeli; benim github depomdan aldıysanız ise bu meyve-sebze sınıflandırma üzerine olan model varsayılan olarak tanımlıdır.) veya Teachable Machine ile oluşturup dışa aktardığınız modeli kullanabilirisiniz

‘Adım 1’in sonunda dışarı aktardığınız dosyaları konumunu unutmayacağınız bir yerde depolamamız gerektiği vurgulanmıştı. Modelimizi dışarı aktarıldıktan ve sonra da ‘.zip’ dosyasından dizine çıkardıktan sonra ‘keras_model.h5’ ve ‘label.txt’ dosyamız vardı. Bunları kopyalayıp Github deposu üzerinden indirdiğimiz dosyaların dizininde bulunan ‘la_croix_model’ klasörünün içine yapıştırıp içeride aynı adla bulunan dosyalarla değiştir dememiz yeterlidir.

Webcam ile veriyi görecek olan modelimiz için genişlik ve yükselliğini piksel cinsenden belirlemek için ‘tm_obj_det.py’ dosyasını sağ tık yaptıktan sonra ‘Edit with IDLE’ diyebiliriz (Windows bilgisayarlar için). Açtıktan sonra ‘frameWidth’ ve ‘frameHeight’ değişkenlerini güncelleyebilirsiniz veya bu kısma hiç dokunmadan devam edebilirsiniz.

Şekil 18: Güven eşiğini belirtilen satırdaki ‘90’ sayısını değiştirerek istediğiniz değere atayabilirsiniz. Proje dosyasını kapatmadan CTRL+S ile kaydetmeyi unutmayınız.

İsterseniz güven eşiğini (conf_threshold) ayarlayabilirsiniz. Bu değişken, modelimizin görüntüyü etiketlemeden ve tahmini söylemeden mnce ne kadar emin olmasını belirlediğimiz bir yüzde değeridir. Varsayılan olarak güven eşiği %90’a ayarlanmıştır.

Son olarak, videonun düzgün bir şekilde gösterilmesi ile ilgili sorunla karşılaşmamız durumunda, matplotlib kütüphanesini kullanabilirsiniz. Bunun için ‘cv.imshow’ ve ‘cv2.waitKey’ satırlarını yorumlamanız gerekecektir. Daha sonrasında ‘import matplotlib’ ve kodun sonlarına doğru olan olan ‘plt’ ile başlayan kod satırlarının yorumlarını kaldırmanız gerekecektir. Bu durum için ayrıca cihazınızda yok ise ‘matplotlib’ kütüphanesini indirmeniz gerekebilir. Bunun için aşağıdaki kodları kullanabilirsiniz:

python -m pip install -I pippython -m pip install -U matplotlib

Adım 5: Projeyi Ayağa Kaldırma Zamanı

Şekil 19: Microsoft Visual Studio üzerinde projenin çalıştırması aşamaları.

Artık kodumuz çalışacak şekilde ayarlanmış olmalı. Dizine gidin, terminal yardımıyla veya kullandığınız bir IDE (Tümleşik Geliştirme Ortamı) aracılığıyla ‘tm_obj_det.py’ dosyasını çalıştırın. VS Code tarzı bir IDE kullanıyor iseniz üst kısımda bulunan alanda terminal sekmesine tıklayıp terminal açtıktan sonra aşağıda açılan terminale kod olarak:

python tm_obj_det.py

komutunu girmeniz gerekecektir. Program, eğittiğimiz nesnelerden biri webcam kadrajına girdiğinde ve nesnenin ne olduğundan %90 emin olduğunda, hangi nesneyi tanıdığını etiketleyecek ve nesnenin adını söyleyecektir.

Not: Programı sonlandırmak için VS Code gibi IDE’lerde açılan terminal alanına tıkladıktan sonra CTRL + C tuşlarını kullanın aksi takdirde çalışmaya devam edecektir veya ‘PyCharm’ gibi bir IDE kullanıyor iseniz aşağıdaki resimde gösterilen alanda programın çalışmasını sonlandırabilirsiniz.

Şekil 20: PyCharm üzerinden çalışan kodu/programı sonlandırmak için işaretli buton kullanılabilir.

Adım 6: Örnek Proje Çıktıları

Şekil 21: Sırasıyla %91, %99, %99, %99 güvenilirlik yüzdeleri ile verilen dört nesneyi doğru olarak sınıflandırmıştır.

Yukarıda dört farklı meyve-sebze görüntüsü telefon ile açılan görüntüler webcam aracılığıyla programımıza gösterilmiştir. Her sınıf için yaklaşık 95–100 görüntü arasında kullanılmış bu proje gibi birçok proje geliştirilebilir. Yeni fikirler ve modeller farklı yerlerde kullanılabilir. Örneğin yazılacak bazı kodlar ve oluşturulacak model ile bilgisayarın karşısına oturan kişi sadece sizken açılabilir. (Yüz kilidi ile açılan telefonlardaki gibi.) Veya zile basıldığında açılan bir kamera eğer aile fertlerinden birini görmüş ise bir dizi donanımsal parça ile kapı otomatik açılabilir. Bu tarz fikirleri sınırı siz ve hayal gücünüzdür.

--

--

Fatih Es

AWS Certified Solutions Architect ☁️ | Full Stack Web Developer