Huawei Machine Learning Kit ile Alışveriş Uygulamaları için Akıllı Ürün Sınıflandırma Sistemi.

Murat Çakır
Huawei Developers - Türkiye
7 min readJan 29, 2021

Herkese selamlar,

Bu yazıda, bir e-ticaret uygulamasında Huawei Machine Learning Kit Custom Model özelliğini nasıl kullanacağımızı öğreneceğiz. Bu özelliği kullanmamızın amacı, e-ticaret uygulamalarında makine öğrenimi ile ürünleri kategorize etmek olacak. Bununla ilgili bir demo proje yapıp sonuçlarını test edeceğiz. Özellikle e-ticaret uygulamalarında ürünleri doğru kategorilere ayırmak çok önemlidir. Bunun nedeni, e-ticaret uygulamalarının kullanıcıya ilgi duyduğu kategorileri analiz edip uygulamanın farklı ekranlarında benzer kategorilerdeki ürünleri bize göstererek daha fazla satış yapmak istemesidir.

Huawei ML Kit Custom Modeli ile Derin Öğrenmenin önemli algoritmalarından biri olan Convolutional Neural Network’ü (CNN) rahatlıkla kullanabilirsiniz. CNN algoritması ile resimler yüksek bir başarı oranıyla sınıflandırılabilir. Örneğin, CNN ile kedi ve köpeklerin resimlerini eğittiğinizde, yeterince veri kullandıysanız, yeni bir resim bir kedi mi yoksa köpek mi olduğunu ayırt edebilecektir.

Huawei ML Kit Custom model ile herhangi bir kod yazma gereksinimi olmadan modeli eğiteceğiz. Ardından Kotlin dilini kullanarak bir proje geliştireceğiz. Projede Picasso dışında herhangi bir kütüphane veya mimari kullanmayacağız. Kodları en basit seviyede yazarak, istediğiniz mimariye uygun olarak kolayca kullanabilmenizi sağlamaya çalışacağız.

MindSpore Lite, entegrasyonu ve geliştirmeyi basitleştirmek için HMS ML Kit tarafından sağlanan custom modeller için oluşturulmuş bir frameworktür ve kendi modelimizi oluşturup eğitmemizi sağlar. Şu anda yalnızca görüntü sınıflandırması desteklenmektedir.

Bu tanımlamaları yaptıktan sonra yapacaklarımıza adım adım başlayalım.

1- Huawei Developers web sitesine kaydolun

2- HMS ToolKit eklentisini indirin
HMS ToolKit bir IDE eklentisi olup kendi HMS Core ile entegre uygulamanızı geliştirmek (oluşturma, kodlama, hata ayıklama ve test etme) ve HUAWEI AppGallery’de yayınlamanız için ihtiyacınız olan tüm araçları sağlar.
Şimdi bu eklentiyi Android Studio’ya nasıl kurarız onu anlatalım. Öncelikle Android Studio’dan ayarları açtıktan sonra Plugins sekmesine tıklayalım. Daha sonra Marketplace kısmına HMS Toolkit yazdığımızda çıkan eklentiyi kuralım. Bundan sonra Android Studio’yu yeniden başlattığımızda eklenti tamamen kullanıma hazır hale gelmiş olacak.

3- Daha önce Python 3.7.5 kurulmadıysa, bilgisayarınıza Python’u indirip kurmamız gerekiyor. (Şu anda yalnızca 3.7.5 sürümü desteklenmektedir)
Python resmi siteden indirme bağlantısı için tıklayın.

Aşağıda yazdığım komutu çalıştırdığınızda ekran görüntüsündeki gibi çıktı alıyorsanız Python’u doğru bir şekilde kurdunuz demektir.

4- Makineyi eğitmeye başlamadan önce makine öğrenimini eğitecek resim veri setini hazırlamamız gerekiyor. Mont, tişört, pantolon ve ayakkabı kategorilerinden resimlerle makineyi eğiteceğiz.
Veri setimin nasıl göründüğünü daha iyi anlamak için aşağıdaki ekran görüntüsüne bakabilirsiniz. Veri setimi indirmek için buraya tıklayabilirsiniz.

Bu adımlardan sonra, HMS ToolKit’in AI Create özelliğini kullanmaya hazır olacağız. AI Create ile görüntüleri herhangi bir kod kullanmadan sınıflandırabileceğiz.
Resimleri sınıflandırmak için:
* Görüntüler yüksek kalitede olmalı ve ilgili sınıflara ayrılmalıdır. Resimlerin yol ve sınıf adları yalnızca harfleri, sayıları veya alt çizgi (_) karakterini içerebilir.
* Boşluklara ve diğer sembollere izin verilmez.
* Eğitim veri setinin sınıflandırma numarasının alt sınırı 2 ve üst sınırı 1000'dir.
* Eğitim veri setindeki her sınıf en az 10 resim içermelidir.
* Desteklenen resim biçimleri: .bmp, .jpg, .jpeg, .png veya.gif.

Şimdi modeli oluşturmaya başlayalım.

5- Bu adımı Android Studio’da herhangi bir proje açıkken yapabiliriz. Android Studio’da aşağıdaki resimdeki gibi HMS sekmesinden Codding Assistant’ı seçiyoruz.

Coding Asistant’a tıkladıktan sonra kimlik doğrulama işlemi istenebilir. Bu işlemlerden sonra resimdeki gibi AI Create seçeneğini seçmeliyiz.

AI Create’i seçtikten sonra bize 2 seçenek sunuyor. Bu seçeneklerden Image Classification seçip sonraki ekranda Confirm’e tıklayarak adımlara devam ediyoruz. Confirm’e tıkladıktan sonra php hakkında bir uyarı mesajı ile karşılaşırsak bunun nedeni PHP 3.7.5'i yükleyememeniz olabilir 3.adımı doğru yaptığınıza emin olmalısınız.

Önceki adımları doğru yaptıysak aşağıdaki gibi bir ekran göreceğiz.

Bu adımda, “Please select train image folder” seçeneğine tıklayarak veri setimizi hazırladığımız klasörümüzü seçmemiz gerekiyor.
Dilerseniz Gelişmiş bölümünü kullanabilirsiniz. Bu bölümde öğrenme sürecinin sayısını ve hızını kontrol edebilirsiniz. Çok fazla seçim yaparsanız veya veri setiniz büyükse öğrenme süreci daha uzun sürecektir. Ayrıca overfitting hatasıyla da karşılaşabilirsiniz.
Veri setimizi seçtikten sonra Create Model’e tıklayıp öğrenme sürecini başlatıyoruz.

İşlem yapılırken aşağıdaki gibi bir ekran çıkıcaktır. Bu işlem, veri setimizin boyutuna bağlı olarak biraz zaman alabilir.

Modelin eğitilme süreci bittikten sonra, önceki adımda seçtiğimiz yolda MindSpore dosyası oluşturulacaktır. Örnekte, modelimizin %91.67 oranında başarılı bir şekilde çalışacağını tahmin ediyoruz. Kullanılan veri setindeki görsellerin kalitesine ve netliğine bağlı olarak bu oranı çok daha fazla artırabilirsiniz.

6- “Please select test image folder” tıklayarak daha önce hazır olan test veri setimizi seçtim. Eğittiğimiz model, 28 görüntüden 26'sının hangi kategoriye ait olduğunu başarılı şekilde bildi.

Bu aşamadan sonra oluşturduğunuz projede MindSpore dosyamızı kullanarak işleme devam edebilirsiniz. Dilerseniz MindSpore dosyamız ile ekranın altındaki “Generate Demo” butonuna tıklayarak demo uygulaması oluşturabilirsiniz. Her iki olasılık için de ben sıfırdan proje oluşturacağım. Böylece siz de istediğiniz adımlardan devam edebilirsiniz.

Burada önemli olan nokta ise “Generate Demo” diyerek oluşturulan demo projede kendi eğittiğiniz modeli test etmek istersek, test verilerimizi projeye otomatik yüklü olarak gelecek olan “cat” ve “dog” resimlerini silerek aşağıdaki ekran görüntüsündeki gibi assets klasörünün altına koymamız gerekmektedir.

7- Bu aşamadan sonra yeni bir proje oluşturarak devam edeceğiz. Öncelikle, gradle ve manifest dosyalarımıza gerekli eklemeleri yaparak başlayalım. Manifest ve gradle dosyamız aşağıdaki gibi olacaktır. Manifest’e sadece internet izni eklememiz gerekiyor. Projede Gradle’a kullanacağımız kütüphaneleri ekledik sonrasında .ms formatında dosya kullandığımız için gerekli kod bloğunu Gradle’a ekledik. Ayrıca Huawei kütüphanelerinin çalışması için gerekli eklemeleri de yaptık.

8- Daha önce oluşturduğumuz varlıklar dosyasına MindSpore ve labels.txt ekliyoruz. Varlıklar dosyaları & labels.txt aşağıdaki gibi görünmelidir.

9- Şimdi kodlamaya başlayalım. İlk olarak, gerekli xml dosyalarımızı oluşturarak başlayalım.
Activity_main.xml dosyasında yalnızca bir RecyclerView kullandık.

RecyclerView’ın her bir item tasarımını da aşağıdaki gibi oluşturdum.

10- Uygulamada kullanacağımız ürün modelini oluşturdum.

11- Öncelikle LabelUtils adında bir nesne sınıfı oluşturdum. Bu sınıfta 2 fonksiyon yazacğız.
readLabels fonksiyonunda gönderdiğimiz parametreler ile labels.txt içeriğini okuyup modelimizde hangi kategoriler kullanılmış bu bilgiye erişeceğimiz bir kod parçası oluşturduk.
processResult fonksiyonunda ise eğittimiz modele istek atıp gelen sonuçları olasılıklarıyla beraber hangi kategoriye ait olduğunu liste halinde aldık. Biz bu makalede tüm olasılıkları almak yerine en olası kategoriyi kullancağımız için sadece en iyi tahmini aldık ancak siz tüm olasılıkları görmek isterseniz yorum satırı olan kısmı yorum satırından çıkarmanız gerekmektedir.

Sonraki sınıfları yazarken bu fonksiyonları nereden çağıracağımızı göreceğiz.

12- ModelOperator adında abstract bir sınıf oluşturdum. Bu yapıda girdi ve çıktılar için kullancağımız fonksiyonlar ve değişkenleri tanımladık. Modelimize istek atarken, sonuçları alırken ve sonuçlarda gelen çıktıyı yönetirken bunları kullanacağız.

Daha sonra ImageLabelModel adında bir sınıf oluşturduk. Bu sınıfta girdi tipini, girdileri ve çıktı sonucunu yönetiyoruz. Burada önemli olan nokta ise modelName ve modelLabelFile’ın assets dosyanızdaki ile aynı isimlere sahip olmasıdır.

13- InterpreterManager adıyla oluşturduğumuz sınıf ise oldukça önemli fonksiyonlara sahip olacak. Eğittiğimiz makineye yapılacak olan tüm istekleri bu sınıfta oluşturacağız ayrıca attığımız isteklerdeki nesneleri de yine bu sınıfta tanımlayacağız.

Öncelikle daha önce yazdığımız fonksiyonları kullanarak modelimizin tüm bilgilerini alıyoruz. Daha sonra MLCustomLocalModel ve MLModelExecutorSettings nesnesini oluşturuyoruz. Ardından girdileri bitmap cinsinden set ediyoruz. Bu işlemden sonra MLCustomModel’imize bir istek gönderiyoruz, sonucu hashmap’e set ediyoruz ve hashmap’i adaptörümüze bir callback yardımıyla geri yolluyoruz -bir sonraki adımda adaptörü yazacağız.-

14- Bu adımda ise RecyclerView adaptörümüzü oluşturduk. Her ürün görselini Picasso ile yükledikten sonra, görüntüyü bitmap’e dönüştürüyoruz ve bu bitmap’i analiz için modelimize gönderiyoruz. Hashmap ile sonucu aldıktan sonra product_category’e (TextView) bu aldığımız veriyi set ediyoruz.

15- Son olarak ise uygulamanın başlayacağı kısım olan MainActivity’yi kodlayalım. Statik olarak adaptörümüze 4 ürün bilgilerini elle girdik. Fark etmiş olabileceğiniz gibi kategori alanı şimdilik “” dır. Çünkü bu bilgileri resim yüklendikten sonra eğittiğimiz modele istek atıp sonucu alacağız ve ekranda kullanıcıya göstereceğiz.

Artık uygulamamız sonunda hazır. Şimdi birkaç ekran görüntüsü ile nasıl bir uygulama bizi bekliyor. Hadi kontrol edelim.

Videoda da görebileceğiniz gibi, kategori bölümleri ML’ye istek göndermeden önce görünmüyor. Ardından, sonuç istekten geri döndüğünde analiz edilmiş kategori isimlerini TextView’ımıza set ediyoruz. 4 farklı ürünün de kategori sonuçlarını ekranda görebilirsiniz.

Sonuç olarak, e-ticaret uygulaması için ürünleri otomatik olarak kategorize etmek için Huawei ML Kit Özel Modelini başarıyla kullandık. Bu makalede sadece bu kullanım durumu üzerine odaklandık. Ancak Huawei ML Kit Özel Model özelliği, birçok farklı kullanım durumu için kullanılabilen başarılı bir özelliktir. Bu özelliği doğru veri setleri ile eğitirseniz çok yüksek bir başarı yüzdesi ile kullanabilirsiniz.

Projenin kaynak kodlarına buradan ulaşabilirsiniz.

Makalemi okuduğunuz için çok teşekkür ederim!

References

--

--