Mengidentifikasi Tekstil Tradisional Nigeria menggunakan Artificial… – Menuju AI

Mengidentifikasi Tekstil Tradisional Nigeria menggunakan Artificial… – Menuju AI

Author(s): Oluwatimilehin Ogidan

Awalnya diterbitkan di Menuju AI.

Mengidentifikasi Tekstil Tradisional Nigeria menggunakan Kecerdasan Buatan pada Perangkat Android (Bagian 1)

Nigeria adalah negara yang diberkati oleh Tuhan dengan 3 kelompok etnis utama (Yoruba, Hausa, dan Ibo) dan kelompok etnis yang berbeda ini memiliki perbedaan budaya yang berbeda dalam hal berpakaian, menikah, makanan, dll.

Dalam hal pakaian, ketiga kelompok etnis ini memiliki beragam tekstil cantik yang digunakan untuk pakaian dan gaya mereka.

Mengenali tekstil yang berbeda dengan namanya menjadi masalah bahkan bagi beberapa orang dewasa Nigeria karena volumenya. Sekarang bisa dibayangkan bagaimana jadinya generasi muda, turis, dan orang asing (Pasti ribet banget 😢)

Kemudian saya berpikir, mengapa saya tidak membuat model pembelajaran mesin dan menyematkannya ke dalam aplikasi sehingga orang dapat dengan mudah menggunakannya untuk mengidentifikasi mereka dan juga mendapatkan saran tentang berbagai pakaian yang dapat mereka jahit dengannya.

Saya kemudian memutuskan untuk membangun algoritma pembelajaran mesin yang mampu menamai beberapa tekstil tradisional Yoruba yaitu tekstil Ankara, Aso oke, Atiku, dan renda menggunakan gambar mereka. Saya menyematkan model ke dalam aplikasi android sehingga turis, orang asing, dan orang Nigeria dapat menggunakan aplikasi tersebut untuk mengambil gambar tekstil tradisional, mendapatkan nama tekstil, dan juga mendapatkan saran tentang berbagai pakaian yang dapat dibuat dengannya.

Kedengarannya keren, bukan?

Tentu saja.

Berikut adalah demo cepat tentang cara kerjanya

Sekarang mari selami lebih dalam bagaimana saya menjalankan proyek ini.

Mendekati

Di bawah ini adalah langkah-langkah yang saya ikuti untuk membangun model:

Pengumpulan data Pembersihan dan persiapan data Arsitektur model Pembuatan model Pembuatan prediksi

Dalam tutorial berikut, saya akan menunjukkan cara menerapkan model dengan mudah pada aplikasi Android Flutter. Jadi, mari kita lanjutkan.

Pengumpulan data

Ketika saya memutuskan untuk memulai proyek ini, saya tidak dapat menemukan kumpulan data online yang berisi berbagai tekstil Nigeria dan labelnya. Itu hanya berarti satu hal,

Saya harus mengumpulkan dataset sendiri

Saya belum pernah melakukan hal seperti itu sebelumnya. Pada titik ini, saya punya dua pilihan.

Untuk membatalkan proyek dan memilih yang lebih sederhana yang memiliki kumpulan data yang tersedia Untuk mengumpulkan kumpulan data sendiri

Saya memutuskan untuk melanjutkan proyek karena saya menyukai ide itu dan ingin melihatnya berhasil. Saya secara manual mengumpulkan gambar Google dari empat kelas, yaitu Akara, Aso oke, Atiku, dan Lace. Saya mengunduh 50 sampel dari masing-masing, tetapi sesuatu yang tidak menguntungkan terjadi — semua gambar yang saya kumpulkan terhapus! Itu terjadi sebagai akibat dari kesalahan dalam skrip saya. Anda dapat membayangkan bagaimana perasaan saya, tetapi itu tidak menghalangi saya. Saya menyesuaikan kesalahannya, dan mengumpulkan keberanian untuk mengumpulkannya lagi.

Saya juga harus memastikan bahwa saya hanya mengunduh foto bagus dari berbagai tekstil yang saya minati. Secara total, saya mengunduh sekitar 200 gambar. Ini kumpulan data minimal, tapi ini cara yang baik untuk memulai. Saya kemudian mengupload gambar tersebut ke Google Drive karena saya ingin menggunakan Google Collab untuk melatih model tersebut.

Persiapan data

Hal pertama yang saya lakukan adalah mengimpor perpustakaan yang diperlukan.

Saya perlu memasang data karena kumpulan data ada di Google Drive saya.

Apa yang saya lakukan pada tahap ini adalah memasukkan data saya ke dalam subdirektori pelatihan dan validasi sehingga generator data gambar akan memberi label otomatis untuk saya.

Saya menggunakan skrip Python terpisah untuk melakukan tugas ini. Ini menjadi sangat berguna ketika Anda perlu membagi ribuan gambar dengan banyak kelas menjadi direktori pelatihan dan validasi. Script dapat diakses di sini

Sekarang, mari kita lihat beberapa gambar di dalam folder. Untuk mencapai ini, saya mendefinisikan dua fungsi, “check_image” dan “view_image.” Gambar centang memungkinkan saya melihat jumlah file di subdirektori dan namanya, sedangkan direktori tampilan membantu saya memvisualisasikan ide menggunakan Matplotlib.

Berikut beberapa contoh gambarnya:

Kelas “ImageDataGenerator” tersedia di Tensorflow di bawah “Keras.preprocessing.image” dari pustaka TensorFlow.

Untuk menggunakan generator gambar, Anda akan membuat turunannya. Anda kemudian memanggil “flow_from_directory” untuk mendapatkan objek generator. Untuk dataset pelatihan, Anda kemudian akan menunjuk ke direktori pelatihan dan menentukan ukuran target.

Karena ada empat kelas yang ingin kita klasifikasikan, parameter “class_mode ” akan disetel ke “kategorikal”

Saya menggunakan teknik augmentasi data untuk menyajikan beberapa sisi dari gambar yang sama selama pelatihan karena kami hanya memiliki sedikit data. Dengan menampilkan sisi alternatif dari gambar yang sama selama pelatihan, Anda juga menghentikan model menjadi sangat mahir dalam mempelajari satu fitur.

Berikut adalah beberapa yang saya manfaatkan:

Kisaran rotasi: rentang dari 0 hingga 180 derajat yang dengannya Anda dapat memutar gambar secara acak Width_shift_range dan height_shift_range: mereka menentukan sebagai proporsi dari ukuran gambar berapa banyak kita harus memindahkan gambar dalam bingkainya Shear_range: ini memotong gambar secara acak jumlah proporsi yang ditentukan dalam gambar Zoom_range: ini menentukan bagian relatif dari gambar yang akan Anda perbesar

Untungnya, kelas generator data gambar hadir dengan banyak opsi augmentasi gambar. Inilah cara saya menggunakannya:

Saya memanggil fungsi dan menggunakan output “train_generator” dari model untuk mendapatkan label. Ini akan sangat berguna saat kita melakukan prediksi.

Model arsitektur

Saya menggunakan metode pembelajaran transfer untuk membangun model.

Pembelajaran transfer adalah metode pembelajaran mesin di mana kami menggunakan model yang telah dilatih sebelumnya sebagai titik awal untuk model pada tugas baru.

Kami menggunakan metode ini ketika volume data yang tersedia terbatas. Kita juga dapat menyebut model pra-pelatihan sebagai “model dasar”. Saya menggunakan “MobileNetV2” sebagai model dasar saya karena memungkinkan Anda untuk membangun dan menjalankan jaringan saraf yang dapat berjalan di lingkungan “komputasi rendah”. Telah dioptimalkan dengan baik untuk berjalan di perangkat edge seperti ponsel, mikrokontroler, mikroprosesor, dll., yang sesuai dengan kasus penggunaan saya.

Model jaringan seluler memanfaatkan konvolusi kedalaman yang dapat dipisahkan yang membuatnya cocok untuk lingkungan komputasi rendah.

Untuk mempelajari lebih lanjut tentang arsitektur mobilenetv2, Anda dapat membaca makalah penelitiannya di sini

Saya menggunakan kombinasi model dasar dan layer TensorFlow yang “terhubung penuh”.

Bangunan model

Untuk membangun model, hal pertama yang saya lakukan adalah mengunduh model pra-terlatih dan bobotnya menggunakan Keras API.

Saya kemudian mendapat nama lapisan atas karena mereka bertanggung jawab untuk klasifikasi. Saat kita memulai pelatihan dari lapisan sebelumnya, model dapat dengan mudah disesuaikan dengan kasus penggunaan kita.

Kami menemukan bahwa jumlah total lapisan jaringan seluler adalah 152. Saya kemudian memutuskan untuk memulai penyempurnaan dari lapisan ke-120.

Untuk mencapai ini, saya harus membuat semua lapisan jaringan saraf dapat dilatih oleh jaringan saraf dengan menyetel “layer. dapat dilatih” menjadi benar. Saya kemudian membekukan semua lapisan sebelum lapisan ke-120 dengan memutarnya dan mengatur “lapisan. dapat dilatih” menjadi salah.

Dalam membangun model ini, saya menggunakan API fungsional Keras.

API fungsional Keras adalah cara untuk membuat model yang lebih fleksibel daripada API tf.keras.Sequential. API fungsional dapat menangani model dengan topologi non-linier, lapisan bersama, dan bahkan banyak masukan atau keluaran.

Jaringan berisi model dasar, Maxpool, Dropout, dan lapisan Dense.

Lapisan dropout tidak mengizinkan fungsi aktivasi dari lapisan sebelumnya bergantung pada fitur apa pun, sehingga harus menyebarkan bobotnya, sehingga membantu mencegah overfitting.

Saya kemudian melanjutkan untuk membuat model saya, mengkompilasinya dan menunjukkan ringkasan model.

Untuk mengompilasi model, Anda perlu menentukan fungsi kerugian, fungsi pengoptimalan, dan metrik Anda.

Fungsi kerugian membantu jaringan saraf menghitung seberapa jauh prediksinya dari nilai target pada setiap instance pelatihan. Kami memanfaatkan kerugian “kategori lintas-entropi” dari Keras API karena kami berurusan dengan masalah multi-klasifikasi.

Jika itu menjadi masalah klasifikasi biner, kita akan menggunakan “binary cross-entropy”. Ada jenis fungsi kerugian lain yang dapat Anda gunakan. Untuk mempelajari lebih lanjut tentang mereka, periksa posting blog ini yang dijelaskan dengan baik.

Untuk pengoptimal pilihan kami, kami menggunakan pengoptimal “Adams”. Fungsi dari fungsi optimalisasi adalah untuk mengoptimalkan bobot ke arah yang mengurangi hilangnya jaringan saraf menggunakan penurunan gradien.

Pengoptimal “Adams” memiliki momentum yang terpasang di dalamnya untuk membantu meredam osilasi dari algoritme penurunan gradien normal dengan memungkinkannya bergerak lebih lambat ke arah vertikal dan lebih lambat ke arah horizontal.

Saya kemudian mengkompilasi model saya dan mencetak ringkasannya, seperti yang ditunjukkan di bawah ini.

Saya kemudian pergi untuk menentukan kembali panggilan “penghentian awal” saya untuk mencegah overfitting dan saya menyesuaikan model dan memulai pelatihan

Saya lulus di kereta dan generator validasi dari sebelumnya. Saya menetapkan jumlah zaman saya menjadi 50.

Catatan Samping: Zaman hanyalah satu lintasan penuh melalui set pelatihan

Ini penampakan pelatihannya :

Mari kita lihat seberapa akurat kinerja model kita dengan memplotnya dari sejarah menggunakan Matplotlib.

Mari kita juga memplot pelatihan dan kehilangan serta akurasi validasi.

Membuat Prediksi

Sudah waktunya untuk membuat beberapa prediksi! Untuk melakukan ini, kita perlu:

Ekstrak gambar. Dapatkan prediksi dari model. Dapatkan kelas dengan prediksi tertinggi. Visualisasikan output dan lihat apakah itu mendapatkan gambar dengan benar.

Berikut fungsi untuk memprediksi gambar:

Mari kita uji model dengan semua kelas makanan dan lihat seberapa baik kinerjanya.




Kita dapat melihat bahwa model tersebut hanya salah satu dari empat. Modelnya tidak bisa benar-benar membedakan antara tekstil Aso oke dan Atiku mungkin karena mereka memiliki pola garis yang mirip. Model masih dapat ditingkatkan dengan menambahkan lebih banyak kelas dari gambar yang berbeda.

Kami harus menyimpan model dan mengonversinya ke format TensorFlow lite sehingga kami dapat menyematkannya di aplikasi flutter kami.

Saya kemudian mengunduh model yang disimpan dan file label.txt ke sistem lokal saya.

Terima kasih telah tinggal bersamaku sejauh ini! Di bagian kedua, saya akan membahas cara menerapkan model di Android.

Jangan ragu untuk bertanya atau menghubungi saya.

Di Twitter di sini @HopeOgidan Di LinkedIn di sini Project Repository di GitHub di sini

Mengidentifikasi Tekstil Tradisional Nigeria menggunakan Kecerdasan Buatan di Perangkat Android ( Bagian 1… awalnya diterbitkan di Menuju AI di Medium, di mana orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Scott Anderson