Makine Öğrenimi İçin Veri Etiketleme Araçları

Verilerin etiketlenmesi işlemi, gözetimli herhangi bir makine öğrenimi projelerinde çok önemli bir adımdır. Etiketleme, bir görüntüdeki alanları tanımlama ve bu bölgeler için hangi nesneye ait ise o nesnenin açıklamalarının oluşturulduğu işlemidir. Verilerin etiketlenmesi ile hem verilerimizi ML projelerine hazırlamış oluyoruz hem de onları daha okunabilir kılıyoruz. Çalıştığım projelerin çoğunda veri setindeki kümeleri oluştururken yeri geldi kendim etiketlemeler yaptım yeri geldi etiketlenmiş görüntüler ile eğitim işlemimi gerçekleştirdim. Bu yazıda sizler ile bu alanda tecrübelerimi paylaşarak en çok karşılaştığım veri etiketleme araçlarını tanıtacağım.

Labeling Image

📍COLABELER

Colabeler, konumlandırma ve sınıflandırma problemlerinde etiketleme yapmayı sağlayan programdır. Bilgisayarlı görü, doğal dil işleme, yapay zekâ ve ses tanıma alanlarında sıkça kullanılan bir etiketleme programıdır [2]. Aşağıda gördüğünüz görsel örnek bir görüntü etiketlenmesini göstermektedir. Burada gördüğünüz sınıflar genellikle araba (car) sınıfına denk gelmiştir. Sol tarafta gördüğünüz araç bölümünde nesneleri eğri, poligon veya dikdörtgen olarak sınıflandırmanız mümkündür. Bu seçim etiketlemek istediğiniz verinin sınırlarına göre değişebilmektedir.

 

Labeling Colabeler

Ardından ‘Label Info’ yazan bölümde kendiniz etiketlemek istediğiniz nesnelerin ismini yazıyorsunuz. Tüm etiketlemeleri bitirdikten sonra mavi tik olan butondan onaylayarak kaydediyorsunuz. Ve böylelikle bir sonraki görüntüye Next ile geçebiliyorsunuz. Burada dikkat etmemiz gereken nokta, kaydettiğimiz her görüntü bu mavi butonun soluna sıralanmaktadır. Bu şekilde kaydettiğiniz görüntüleri de kontrol etmeniz mümkündür. Colabeler’ın en çok sevdiğim yanlarından bir tanesi içerisinde yapay zeka algoritmalarını da kullanılabilir olmasıdır. 

📌 Daha önce çalıştığım bir projede Colabeler üzerinden etiketleme gerçekleştirdim ve inanılmaz kolay bir arayüze sahip bir yazılımdır.

📽 Colabeler’ ın yetkili web sitelerinde yer alan videoda etiketlemelerin nasıl yapılacağı açıklanmıştır.

Localization of Bone Age

Daha önce çalıştığım projenin örnek bir görüntüsünü yukarıda verdim. Bu proje, makine öğrenimi bağlamında yerelleştirme (localization) projesi olduğu için bu özelliklere bağlı kalınarak etiketleme yapılmıştır. Yerelleştirme, bir özelliğin bulunduğu görüntünün alt bölgesini izole etmek anlamına gelir. Örneğin, bu proje için kemik bölgelerinin tanımlanmaya çalışılması yalnızca görüntüdeki kemik bölgelerinin etrafında dikdörtgenler oluşturmak anlamına gelir [3]. Bu şekilde kemik görüntülerinde çıkarılması muhtemel sınıfları ROI bölgesi olarak etiketlemiş oldum. Ardından bu etiketleri Colabeler’ın sağladığı Export XML/JSON olarak elde ettim. Bu kısım birçok makine öğrenimi çalışanlarının hoşuna gidecektir, benim çok işime yaramıştı!

♻️ Etiketlerin Dışarıya Aktarılması

Exporting JSON Output

Bu aşamada ben JSON veriler kullanacağım için JSON çıktısı olarak kayıt etmiştim, siz verilerinizi farklı formatlarda kayıt edebilirsiniz. Aşağıda verdiğim görselde ise oluşturduğum sınıfların JSON çıktısındaki yerlerini görmektesiniz. Bu şekilde verileriniz etiketli bir şekilde hazırlanmış oldu.

JSON Format

📍ImageJ

ImageJ, Ulusal Sağlık Enstitüleri ve Optik Hesaplamalı Enstrümantasyon Laboratuvarı’nda (LOCI, Wisconsin Üniversitesi) geliştirilen Java tabanlı bir görüntü işleme programıdır. Imagej’in eklenti mimarisi ve yerleşik geliştirme ortamı, görüntü işlemeyi öğretmek için popüler bir platform haline getirmiştir [3].

Yukarıda yer verdiğim şekilde Wikipedia içerisinde ImageJ’den alınmış bir ekran görüntüsünü görmektesiniz. Görüldüğü gibi bu yazılım aşırı kompleks bir tarafı mevcut değildir. Birçok alanda meslek fark etmeksizin kullanılmakta olan bir araçtır.
📝 ImageJ’ in yetkili web sitelerinde yer alan kullanım kılavuzu olarak verilen dokümantasyonda etiketlemelerin nasıl yapılacağı ve yazılım aracının nasıl kullanılacağı açıklanmıştır.

📌 Makine öğrenimi projesinde etiketlemek zorunda kaldığım görüntüler için Fiji-ImageJ yazılım araçlarına da uğramışlığım vardır. Arayüzü diğer çalıştığım etiketleme programlarına göre çok daha eski kalmış durumda diye düşünüyorum. Yazılımsal açıdan yapmak istediğiniz işlemleri gerçekleştirebilirsiniz elbette, ancak bana göre bir yazılımın kullanıcıyı tasarımsal açıdan da doyurması gerekmektedir.

Image Toolbox Matlab

Yukarıda verdiğim görsel kişisel bilgisayarımda çalıştığım proje sırasında aldığım bir ekran görüntüsü idi. Matlab platformunda çalışırken verileri aktif edebilmek için öncellikle güncelleme yapmak gerekiyordu. Bu sebeple güncelleme yaptıktan sonra görüntüleri tanımlamaya devam ettim. ImageJ kullanıcıları için Matlab eklentisinin kurulması sırasında yüklenecek paket aşağıda verilmektedir.

ImageJ Matlab

📍Matlab Image Labeler

Image Labeler uygulaması, bir video veya görüntü dizisinde dikdörtgen ilgi alanı (ROI) etiketlerini, polyline ROI etiketlerini, piksel ROI etiketlerini ve sahne etiketlerini işaretlemenin kolay bir yolunu sunar. Örnek olması için bu uygulamayı kullanarak size göstererek başlamış olur [4]:

  • Bir resim koleksiyonundan bir resim çerçevesini el ile etiketleme
  • Bir Otomasyon algoritması kullanarak görüntü çerçeveleri arasında otomatik olarak etiketleme
  • Etiketli lokasyon gerçeği verilerini dışa aktarma

Image Toolbox Matlab

Yukarıda gördüğünüz görselde Matlab Image Labeler yazılımını kullanarak segmentasyon işlemi yapabiliyoruz. Daha doğrusu verileri ROI bölgelerine ayırarak etiketleme yapmamız mümkündür. Ayrıca, daha önce var olan algoritmaları kullanmanız mümkün olduğu gibi kendinize ait algoritmanızı da veriler üzerinde test edip çalıştırabiliyorsunuz.

Selection ROI

Matlab’ın yetkili dokümantasyonundan aldığım bu görselde sol menüde seçtiğiniz sınırlayıcı bölgelerin etiket isimleri girilmektedir. Nesnenin sınıfına göre bir etiket rengi atanmaktadır. Bu şekilde etiketlerimizi oluşturmamız da oldukça mümkün. Bir sonraki yazıda ise diğer etiketleme araçlarından bahsedeceğim. Görüşmek dileğiyle ✨

REFERANSLAR
  1. https://medium.com/@abelling/comparison-of-different-labelling-tools-for-computer-vision-f3afd678da76.
  2. http://www.colabeler.com.
  3. From Wikipedia, The Free Encyclopedia, ImageJ, https://en.wikipedia.org/wiki/ImageJ.
  4. MathWorks, Get Started with the Image Labeler, https://www.mathworks.com/help/vision/ug/get-started-with-the-image-labeler.html.
  5. https://chatbotslife.com/how-to-organize-data-labeling-for-machine-learning-approaches-and-tools-5ede48aeb8e8.
  6. https://blog.cloudera.com/learning-with-limited-labeled-data/.
Mobile Application Development

FaCiPa Serisi 3

FaCiPa Serisi 2 adlı yazımdan geriye kalan çok güzel dönütler elde ettiğim için yazılarımın son serisi olan mobil uygulama tarafını kaleme almak istedim. Bir sene boyunca geliştirdiğim projeyi bugün sizler ile konuşabiliyor olmak inanılmaz bir his! Bu yazıda sizler ile birlikte FaCiPa’ nın mobil arayüzü hakkında konuşacağız.

Projede Python programlama dili ve API taraflı kodlamalar yer aldığı için platform olarak Kiwi veya Ionic gibi farklı seçenekler mevcuttu. Ionic için yazdığım diğer yazılarıma aşağıdaki linklerden ulaşabilirsiniz. Bu bağlantılarda Ionic Nedir?, Ionic Proje Çalışma Yapısı ve Semantic UI ile kullanımı hakkında kısaca bilgiler edinebilirsiniz. Bunun yanı sıra TypeScript kod yapısı ile yazıldığı için bunun ile ilgili yazdığım yazımı da incelemeniz mümkün. Aşağıda Ionic Framework hakkında en sık karşılaştığımız açıklamalara yer vermiş bulunmaktayım:

👉 Açık kaynak kodlu olan bu kütüphane, Cordova üzerine inşa edilmiştir.

👉 Web geliştiricisi olanların bile mobil uygulama geliştirmesine olanak sağlayan bir kütüphanedir.

Mobile Application Design

İlk olarak işe FaCiPa için mobil platformu olan Ionic Framework üzerinde yeni bir proje oluşturmakla başlıyoruz.

Ionic Start

Daha sonra ionic generate komutu ile sayfa (page) oluşturuyoruz.

Generate Page

Ionic Page

Uygulamada başlangıç için giriş sayfası, kayıt ol sayfası ve analiz sayfası olması sebebiyke toplamda ana sayfa ile birlikte 4 adet sayfa oluşturulması gerekmektedir.

All files

FACIPA MOBİL ARAYÜZÜ

FaCiPa’ nın mobil arayüzünde kullanılacak olan framework Ionic olarak seçilmiştir. Mobil cihazların bilgisayarlardan daha fazla kullanılması, mobil uygulamaların artması, mobil cihazların çeşitliliği ve farklı işletim sistemlerinin bulunması yazılım geliştiricileri farklı mobil çözümler bulmaya yönlendirdi. Native uygulama geliştirmenin yanında zamanla her platformda da çalıştırılabilen bir uygulama yapısı kurmak önemli bir ihtiyaç haline geldi ve HTML5 ile JavaScript gibi dillerin desteğiyle geliştirilebilen hibrit uygulamalar ortaya çıktı [1].

Ionic Framework, bilhassa Angular.js veya Angular 2 deneyimi olan yazılımcıların ilk tercihi genellikle Ionic olmaktadır. Açık kaynak olan Ionic, binlerce takipçisi ve destekçisi ile binlerce mobil uygulamaya ev sahipliği yapmaktadır. Kendi ifadeleriyle “first-class” bir dokümantasyona sahip olan Ionic Framework kullanışlı ve öğrenmesi kolay kütüphanedir.

🏗Ionic Framework, Cordova üzerine inşa edilmiştir. Mobil cihazın donanımına ve sistem kaynaklarına erişim gibi işlemler Cordova sayesinde yapılmaktadır. Android, IOS veya Windows Phone gibi mobil işletim sistemlerinde çalıştırabilirsiniz. Hatta bu uygulamayı rahat şekilde mobil uyumlu bir web sitesi olarak da yayınlayabilirsiniz. Ionic ile uygulama geliştirebilmek için temel olarak HTMLJavaScript ve Angular.js bilmek yeterli olacaktır. Projede platform olarak Visual Studio Cide platformu kullanılmıştır. Uygulamanın tasarımları src\pages\home\home.html gibi .html uzantılı dosyalarda HTML5 ile ortaya konulmuştur. Gerekli CSS tasarımları ise  src\pages\home\home.scss gibi .scss uzantılı dosyalarda yapıldı [1].

📷Projede kullanılacak olan fotoğraflar ilk adımda kullanıcıdan 3 adet alınacak olarak belirlenmiş olup daha sonra kullanıcıyı yormamak ve makinenin işlem yükünü azaltmak adına 1 adet fotoğrafa indirgenmiştir. Kullanıcı uygulamayı mobil mağazalardan temin ederek anlık olarak fotoğraf çekmekte ve bu fotoğrafı sunucuya işlenmek üzere göndermektedir.

🛡Uygulamanın Backend bölümü ise src\pages\home\home.ts gibi .ts uzantılı dosyalarda TypeScript dilinde yapılmıştır.

Upload Camera

IONIC UYARI(ION-ALERT) EKLENTİSİ

Uygulamanın içeriğinin üstünde bir uyarı belirir ve uygulama ile etkileşime devam edebilmeleri için kullanıcı tarafından manuel olarak kaldırılması gerekir.  Uygulamada kullanıcının doğru şekilde fotoğrafı çekmesi için ion-alert ile uyarı veriliyor.

🔎 Title: Uyarı kutucuğunun başlığı

🔎 Subtitle: Uyarı metni

🔎 Butons: Uyarının kalkması için kullanılan buton eğer Tamam butonuna tıklanırsa photoOne() metodu çalıştırılıyor ve fotoğraf çekme işlemi yaptırılıyor.

Ionic Alert

IONIC KAMERA EKLENTİSİ

Ionic kamera eklentisi mobil cihazlardan fotoğraf ya da video çekmek için gerekli bir eklentidir. Cordova eklentisi gerektirir: cordova-plugin-camera

🔎 Quality: Kalite

🔎 destinationType: Hedef Türü

🔎 encodingType: Kodlama Türü

🔎 media Type:Medya Tipi (Picture) olması fotoğraf olduğunu belirtir.

Install Camera

Install Cam

PROJENİN İLK TASLAK ÇİZİMLERİ

Wireframe Templates

İçerik olarak uygulamanızın sayfalarını tamamen özgürce tasarlayabilirsiniz. Yukarıda gördüğünüz wireframe çizimi projeye ilk başlandığında tasarlanan bir çizimdi. Daha sonra projenin tasarımlarını oluşturduk.

Facipa

Yukarıda yer verdiğim görseller projenin analiz sayfası ve analiz sonucundaki dönütlerdir. Böylelikle FaCiPa’nın sonuna gelmiş olduk. Sabırla takip ettiğiniz için teşekkür ederim. Sağlıcakla kalın ✨

 

REFERANSLAR

  1. http://devnot.com/2016/hibrit-uygulama-catisi-ionic-i-taniyalim/
  2. R. L. Delinger, J. M. VanSwearingen, J. F. Cohn, K. L. Schmidt, “Puckering and Blowing Facial Expressions in People With Facial Movement Disorders,” J. Phys Ther, vol. 88, pp. 909-915, August 2008.
  3. İnternet Ve Mobil Teknolojilerin Yaygınlaşması: Fırsatlar Ve Sınırlılıklar, Hasan GÜLER, Yunis ŞAHİNKAYASI, Hamide ŞAHİNKAYASI. Sosyal Bilimler Dergisi Cilt 7 Sayı 14 Aralık 2017 Makale Gön. ve Onay Tar.: 03.10.2017-27.10.2017