CoreML: Sınıflandırma

CreateML ile sınıflandırma modelleri oluşturarak kendi makine öğrenmesi modellerinizi oluşturabilirsiniz.

Tutku Doğa Nazlı
TurkishKit
6 min readJan 1, 2020

--

Merhaba sevgili TurkishKit okurları! 👋 Bugün size Apple’ın WWDC 2018’de tanıtmış olduğu CreateML ile nasıl uygulamalarınızda makine öğrenmesi modellerini kullanabileceğinizi göstereceğiz. Hazırsanız haydi başlayalım! 🙃

CreateML nedir?

CreateML Apple tarafından çıkarılan ve kullanıcıların uygulamarında makine öğrenmesinden faydalanabilecekleri bir altyapıdır. CreateML kendi data setlerinizi kullanarak yarattığınız CoreML modellerini IOS uygulamalarınızda kullanmanıza olanak sağlar. Mesela bu modelleri kullanarak bir fotoğraftaki hayvanları tespit edebilir, bir ses kaydını yazıya dönüştürebilir ve fotoğrafları sınıflandırabilirsiniz. Eğer siz de uygulamanızın bu ilgi çekici özelliklere sahip olmasını istiyorsanız gelin birlikte adım adım bir makine öğrenme modelini nasıl oluşturabileceğimizi ve uygulamalarımda kullanabileceğimizi öğrenelim! 🎉

Sınıflandırıcı Yaratmak

Makine öğrenme modellerini sayısız amaç için kullanabilirsiniz ancak bu yazının devamında kolay bir şekilde uygulamalarınızda kullanabileceğiniz bir kedi-köpek sınıflandırıcısı yaratacağız. Bu sınıflandırıcı uygulamaya verilen bir resim üzerine bu resimde bulunanın bir köpek mi yoksa kedi mi olduğunu belirleyecek. Her ne kadar Apple kullanıcıları için birçok CoreML modeli çıkarmış olsa da kendi uygulamanız için özel olarak tasarlanmış bir makine öğrenme modeli yaratabilirsiniz!

Veri Setlerini Hazırlamak

Kendi CoreML modelinizi oluşturmanın ilk aşaması verilerinizi hazırlamaktır. Bu veriler testing ve training veri setleri olarak ikiye ayrılır. Peki testing ve training veri seti ne demek? Training veri seti modelinize önceden sınıflandırılmış resimler ekleyerek modelinizi eğitmenizi sağlar. Mesela birazdan oluşturacağımız köpek ve kedi sınıflandırıcısında kullanacağımız training seti modelimizin köpek ve kedi arasındaki farkları anlamasını sağlar. Testing veri seti ise modelinizin ne kadar iyi çalıştığını ve ne kadar doğru sınıflandırma yaptığını anlamanıza yardımcı olur. Peki training ve testing veri setlerini oluştururken nelere dikkat etmek gerekir?

1. Training ve testing veri setlerinizde aralarında sınıflandırma yapacağınız nesneler olmalı. Örneğin bu yazıda yapacağımız köpek-kedi sınıflandırıcısının veri setlerinde köpek ve kedi fotoğrafları olmalı. Kullanacağınız fotoğrafların %80’ini training seti için %20’sini ise testing seti için ayırın. Bu oranlar sahip olduğunuz fotoğraf sayısına göre değişse de makine öğrenme standartlarında en çok kabul edilen oranlar bunlardır.

2. Bir fotoğrafın sadece training data setinde ya da testing data setinde olmasına özen gösterin.

3. Kedi ve köpek fotoğraflarınızın benzer sayılarda olmasına dikkat edin. Örneğin 100 tane köpek fotoğrafınız varken 10 tane kedi fotoğrafınız olmamalı.

4. Çeşitli fotoğraflar kullanmaya çalışın. Farklı renklerde, farklı açılarda ve farklı büyüklüklerde kedi ve köpek resimleri kullanmak modelinizin daha başarılı sınıflandırmalar yapmasını sağlayacaktır.

Yukarıdaki noktalara dikkat ederek veri setlerimizi hazırladıktan sonra verilerimizi klasörlerde düzenliyoruz.

Testing ve training veri setleri
Testing ve training veri setleri

Training veri setimizdeki fotoğrafları ayrı bir klasöre, testing veri setimizi ise ayrı bir klasöre koyuyoruz. Bu iki klasör içinde de yine ikişer tane köpek ve kedi alt-klasörleri yaratıp köpek ve kedi fotoğraflarını sınıflandırıyoruz. Verilerimizi hazırladığımıza göre artık CreateML üzerinden bir model oluşturabiliriz! 🤗

CreateML ile CoreML Modeli Oluşturmak

İlk olarak Xcode’u açtıktan sonra Xcode>Open Developer Tools>CreateML ile bir CreateML dosyası açıyoruz. Çıkan ana sayfada ImageClassifier’ı seçiyoruz ve sınıflandırıcımıza bir ad veriyoruz.

CreateML’de sınıflandırıcı oluşturmak

Sınıflandırıcımıza anlamlı bir ad verdikten sonra çok kısa bir sürede kod yazmadan bir CoreML modeli oluşturacağız! Projemizin içindeki Model Sources sayfasındaki Training Data kısmına training setimizin olduğu klasörünü, sağ taraftaki Testing Data kısmına ise testing setimizin olduğu klasörü sürüklüyoruz. Aynı sayfada bulunan parameters kısmından modelinizin veri setinizi kaç kere eğitmesi gerektiğini seçebilirsiniz. Ancak unutmayın daha fazla eğitmek modelinizi kuvvetlendirse de modelinizin eğitim süresini uzatacaktır.

Input ve Training

Daha sonra yukarıda bulunan train sekmesine girip play butonuna tıklıyoruz ve modelimizin verileri eğitmesini bekliyoruz. CreateML bu eğitim sırasında training setinizi biri training biri de validation olmak üzere iki sete ayırır. Bu nedenle modelinizin doğruluk yüzdesi her eğitimde farklı çıkabilir. Eğitimin sonunda sayfanın üst kısmında çıkan doğruluk yüzdesi modelinizin fotoğrafları ne kadar doğru sınıflandırdığını yansıtır.

Modelemizi eğittikten sonra şimdi sırada modelimizi test etmek var! Bunun için bulunduğunuz sayfadaki testing sekmesine gelerek play butonuna tıklamanız yeterli. CreateML sizin için daha önceden oluşturduğunuz testing seti klasöründeki fotoğrafların hepsini işler ve bu fotoğraflar için tahmini bir sınıflandırma yapar. Daha sonra bu sınıflandırmayı fotoğrafların gerçek etiketleriyle karşılaştırarak testing doğruluk yüzdesine ulaşır.

Eğer modelinizin doğruluk oranları istediğiniz yükseklikteyse bu modeli uygulamanızda kullanmak için kaydetmeniz gerekir. Sayfada bulunan Output sekmesinden modelinizi sürükleyerek bir .mlmodel formatında kaydedebilirsiniz. Artık modeliniz uygulamanızda kullanılmayı hazır! 👏 👏

CoreML Modelimizi Uygulamamıza Aktarmak

Şimdi işin en heyecanlı kısmına geldik: modelimizi uygulamamıza aktarmak! Bunun için ilk olarak bir Xcode dosyası açıyoruz ve dosyaya CreateML ile oluşturduğumuz modeli sürüklüyoruz. Ve kodlamaya başlıyoruz!

Uygulamamıza CoreML modelimizi aktarıyoruz

CoreML Modeli ile Vision Kurulumu

Modelinizi Xcode dosyanıza aktardığınızda CoreML sizin için modelinizin adında bir class oluşturuyor. Mesela hazırladığımız CatAndDogClassifier modeli için bir CatAndDogClassifier classı oluşuyor. Uygulamamızda fotoğrafları sınıflandırmak istediğimizden dolayı Vision anayapısından yararlanmamız gerekiyor. Bunun için ilk olarak ViewController.swift dosyasına CoreML ve Vision yapılarını import ediyoruz. Daha sonra modelimizin classını VNCoreMLModel classını kullanarak model adlı bir objede aktif hale getiriyoruz. Şimdi de bir Vision yapısını kurmak için VNCoreMLRequest classından request adlı bir obje yaratıyoruz ve bu classın model adlı özelliğini kullanarak bir önceki satırda oluşturduğumuz model objesini ekliyoruz.

Yukarıdaki kodda görebileceğiniz gibi request objemizin completionHandler özelliğini kullanarak modelimizin sonuçlarını almamızı sağlayan .processClassifier metodunu ekliyoruz. Uygulamamıza koyulan fotoğraflar ML modelimizin eğitildiği fotoğraflardan farklı boyutlara sahip olabilir. Modelimizin bu fotoğrafları işleyebilmesi için request objemizin .imageCropAndScaleOption özelliğini kullanıyoruz. Böylece, aşağıdaki satırlarla ML modelimizi kullanarak uygulamamızda bir Vision altyapısı yaratıyoruz.

Vision Objemizi Aktif Hale Getirmek

İlk olarak uygulamamıza koyulan UIImage ı CIImage a dönüştüyoruz. Eğer bu gerçekleştirilemezse uygulamamız hata veriyor ve sınıflandırma yapılamıyor. `

Şimdi Vision objemizi çalıştırma vakti! Bunun için ilk olarak bir VNImageRequestHandler objesi oluşturuyoruz ve bir önceki adımda oluşturduğumuz ciImage objesiyle modelimizin işlemek istediği fotoğrafları belirtiyoruz. Daha sonra oluşturduğumuz objenin .perform metodunu kullanarak Vision’ı aktif hale getiriyoruz. Ve tabiki herhangi bir fotoğrafın işlenmesinde çıkabilecek bir hata için catch ifadesini kullanıyoruz.

Modelimizi Çalıştırmak

Haydi şimdi de sınıflandırmamızın sonuçlarını görelim! Sonuçları görmek için sınıflandırma objemizin .results özelliğini kullanıyoruz. .results VNClassificationObservation objelerinden yararlanarak bize ML modelimizin yarattığı sınıflandırmaları gösteriyor. Bu sonuçları görmek için aşağıdaki satırları yazmamız yeterli.

CreateML ile Sınıflandırma’nın sonuna geldik! Birlikte CreateML kullanarak fotoğraflar arasında sınıflandırma yapacak bir model yarattık ve bu modeli uygulamamıza aktarmanın yollarını öğrendik. Hepinize keyifli ve hatasız kodlamalar dilerim 🤗 💻

Bizi daha yakından takip etmek istiyorsanız, sosyal medya hesaplarımıza aşağıdan ulaşabilirsiniz!

Twitter | Instagram | Facebook

--

--