Computer Vision menggunakan Transfer Learning di Keras
Halo sahabat AI.
Di tulisan kali ini kita akan belajar bareng tentang cara membuat sebuah model machine learning menggunakan metode transfer learning.
Definisi transfer learning
Pertama, apa itu transfer learning?
Transfer learning umumnya mengacu pada proses di mana model yang dilatih pada suatu problem dapat digunakan dalam kasus lain karena adanya keterkaitan masalah.
“ Dalam deep learning, Transfer learning adalah teknik di mana model jaringan saraf yang sebelumnya sudah dilatih/trained untuk memecahkan suatu masalah, memiliki kemiripan dengan masalah yang sedang dipecahkan. Sehingga memungkinkan satu atau lebih lapisan (layer) dari model yang sudah dilatih dapat digunakan dalam model baru yang sedang kita kembangkan. “
TL ini biasanya dimanfaatkan dalam konteks supervised learning, di mana inputnya sama tetapi targetnya yang mungkin saja berbeda. Misalnya, kita sedang mengembangkan sebuah model image classification, seperti mengklasifikasikan kucing dan anjing, di setting pertama, kemudian belajar tentang set kategori visual yang berbeda, seperti klasifikasi semut dan tawon, di setting kedua.
Transfer learning memiliki keuntungan dalam mengurangi waktu training model untuk model jaringan saraf dan dapat menghasilkan kesalahan generalisasi yang lebih rendah.
Bobot (weight) pada lapisan yang digunakan kembali dapat digunakan sebagai titik awal untuk proses pelatihan dan diadaptasi untuk menanggapi masalah baru. Penggunaan ini memperlakukan transfer learning sebagai jenis skema inisialisasi bobot. Sehingga dapat dikatakan metode transfer learning ini sangat berguna ketika model yang sudah pernah dikembangkan memiliki banyak data yang sudah dilabeli daripada data yang sedang kita kembangkan (dengan catatan kedua masalah memiliki kemiripan karakteristik problem).
Transfer learning dalam image recognition
Seperti yang kita tahu, berbagai model berkinerja tinggi telah dikembangkan untuk klasifikasi gambar dan didemonstrasikan pada acara tahunan ImageNet Large Scale Visual Recognition Challenge , atau ILSVRC.
Dalam kompetisi ini, sering disebut hanya sebagai ImageNet, mengingat sumber gambar yang digunakan dalam kompetisi tersebut telah menghasilkan sejumlah inovasi dalam arsitektur dan pelatihan convolutional neural networks. Selain itu, banyak model yang digunakan dalam kompetisi telah dirilis di bawah lisensi permisif (permissive license).
Model ini dapat digunakan sebagai dasar untuk transfer learning dalam aplikasi computer vision.
Beberapa alasan mengapa transfer learning sangat diminati :
- Banyak fitur berguna yang telah dipelajari: Model telah mempelajari cara mendeteksi fitur umum dari foto, mengingat mereka telah dilatih pada lebih dari 1.000.000 gambar untuk 1.000 kategori.
- Performa luar biasa: Model mencapai performa cukup baik dan tetap efektif pada tugas pengenalan gambar spesifik yang dikembangkannya.
- Mudah diakses: Bobot model disediakan sebagai file yang dapat diunduh gratis dan banyak library menyediakan API yang mudah untuk mengunduh dan menggunakan model secara langsung.
Bobot model dapat diunduh dan digunakan dalam arsitektur model yang sama menggunakan berbagai library deep learning yang berbeda, termasuk Keras.
Bagaimana cara menggunakan pre-trained models?
Model dapat kita unduh dan gunakan sebagaimana adanya, seperti disematkan ke dalam aplikasi dan digunakan untuk mengklasifikasikan foto baru.
Sebagai alternatif lain, model dapat diunduh dan digunakan sebagai model ekstraksi fitur. Di sini, keluaran model dari sebuah layer sebelum ke layer output model digunakan sebagai input untuk model pengklasifikasian yang baru.
Pre-trained model dapat digunakan sebagai program ekstraksi fitur terpisah, dalam hal ini input dapat diproses sebelumnya oleh model atau bagian model menjadi output tertentu (misalnya vektor angka) untuk setiap gambar masukan, kemudian dapat digunakan sebagai input saat melatih model baru.
Selain itu, pre-trained model atau bagian model yang diinginkan dapat diintegrasikan langsung ke model jaringan neural baru. Dalam penggunaan ini, bobot pre-trained dapat dibekukan sehingga tidak diperbarui saat model baru dilatih. Bergantian, bobot dapat diperbarui selama pelatihan model baru, mungkin dengan kecepatan pembelajaran yang lebih rendah, yang memungkinkan pre-trained model untuk bertindak seperti skema inisialisasi bobot saat melatih model baru.
Beberapa pola penggunaan ini sebagai berikut:
- Pengklasifikasian: Pre-trained model digunakan langsung untuk mengklasifikasikan gambar baru.
- Ekstraktor Fitur Mandiri: Pre-trined model, atau sebagian dari model, digunakan untuk memproses gambar sebelumnya dan mengekstrak fitur yang relevan.
- Pengekstrak Fitur Terintegrasi: Model yang telah dilatih sebelumnya, atau beberapa bagian dari model, diintegrasikan ke dalam model baru, tetapi lapisan model yang telah dilatih sebelumnya dibekukan selama pelatihan.
- Inisialisasi Bobot: Model yang dilatih sebelumnya, atau beberapa bagian dari model, diintegrasikan ke dalam model baru, dan lapisan model yang telah dilatih sebelumnya dilatih bersama dengan model baru.
Setiap pendekatan dapat menjadi efektif dan menghemat waktu secara signifikan dalam mengembangkan dan melatih deep convolutional neural network model.
Mungkin tidak jelas penggunaan pre-trained mana yang dapat memberikan hasil terbaik pada model kita, oleh karena itu sangat diperlukan banyak eksperimen.
Beberapa model untuk transfer learning
Mungkin ada selusin atau lebih model dengan kinerja terbaik untuk pengenalan gambar yang dapat diunduh dan digunakan sebagai dasar untuk pengenalan gambar dan tugas-tugas computer vision terkait.
Mungkin tiga dari model yang lebih populer adalah sebagai berikut:
- VGG (misalnya VGG16 atau VGG19).
- GoogLeNet (mis. InceptionV3).
- Jaringan Residual (misalnya ResNet50).
Model-model ini banyak digunakan untuk transfer learning karena performanya, tetapi juga karena model tersebut memperkenalkan inovasi arsitektur tertentu, yaitu struktur yang konsisten dan berulang (VGG), modul awal (GoogLeNet), dan modul residual (ResNet).
Keras menyediakan akses ke sejumlah pre-trained model dengan performa terbaik yang dikembangkan untuk tugas pengenalan gambar.
Mereka tersedia melalui API Aplikasi, dan menyertakan fungsi untuk memuat model dengan atau tanpa bobot terlatih, dan menyiapkan data dengan cara yang mungkin diharapkan oleh model tertentu (misalnya penskalaan ukuran dan nilai piksel).
Saat pertama kali pre-trined model dimuat, Keras akan mengunduh bobot model yang diperlukan, yang mungkin memerlukan waktu karena kecepatan koneksi internet Anda. Bobot disimpan dalam direktori .keras / models / di bawah direktori home Anda dan akan dimuat dari lokasi ini saat bobot tersebut digunakan lagi.
Saat memuat model tertentu, argumen “include_top” dapat disetel ke False, dalam hal ini lapisan keluaran model yang terhubung sepenuhnya yang digunakan untuk membuat prediksi tidak dimuat, sehingga lapisan keluaran baru dapat ditambahkan dan dilatih.
Sebagai contoh:
# load model without output layermodel = VGG16(include_top=False)
Selain itu, jika argumen “include_top” adalah False, argumen “input_tensor” harus ditentukan, sehingga input model berukuran tetap yang diharapkan dapat diubah. Sebagai contoh:
Model tanpa bagian atas akan mengeluarkan aktivasi dari lapisan konvolusional atau penggabungan terakhir secara langsung. Salah satu pendekatan untuk meringkas aktivasi ini untuk digunakan dalam pengklasifikasi atau sebagai representasi vektor fitur dari input adalah dengan menambahkan lapisan penggabungan global, seperti penggabungan global maksimum atau penggabungan global rata-rata. Hasilnya adalah vektor yang dapat digunakan sebagai deskriptor fitur untuk input. Keras menyediakan kemampuan ini secara langsung melalui argumen ‘pooling’ yang dapat disetel ke ‘avg’ atau ‘max’. Sebagai contoh:
Gambar dapat disiapkan untuk model tertentu menggunakan fungsi preprocess_input (); misalnya, penskalaan piksel dilakukan dengan cara yang dilakukan pada gambar dalam training dataset saat model dikembangkan. Sebagai contoh:
Terakhir, Anda mungkin ingin menggunakan arsitektur model pada dataset Anda, tetapi tidak menggunakan bobot yang telah dilatih sebelumnya, dan sebagai gantinya menginisialisasi model dengan bobot acak dan melatih model dari awal.
Ini dapat dicapai dengan menyetel argumen ‘weights’ ke None daripada ‘imagenet’ secara default. Selain itu, argumen ‘classes’ dapat disetel untuk menentukan jumlah kelas dalam kumpulan data Anda, yang kemudian akan dikonfigurasi untuk Anda di lapisan keluaran model. Sebagai contoh:
Sekarang kita sudah familiar dengan API, mari kita lihat memuat tiga model menggunakan API Aplikasi Keras.
Load Pre-trained Model VGG16
Model VGG16 dikembangkan oleh Visual Graphics Group (VGG) di Oxford dan dijelaskan dalam makalah tahun 2014 berjudul “Deep Residual Learning for Image Recognition.”
Secara default, model mengharapkan gambar input berwarna akan diskalakan kembali ke ukuran 224 × 224.
Model dapat dimuat sebagai berikut:
Menjalankan source code di atas akan memuat model VGG16 dan mendownload bobot model jika diperlukan.
Model tersebut kemudian dapat digunakan secara langsung untuk mengklasifikasikan foto ke dalam salah satu dari 1.000 kelas. Dalam kasus ini, arsitektur model diringkas untuk memastikan bahwa model dimuat dengan benar.
Contoh Penggunaan Pre-trained Model
Sekarang kita sudah bisa memuat pre-trined model di Keras, mari kita lihat beberapa contoh bagaimana model tersebut dapat digunakan dalam praktik sesungguhnya.
Dalam contoh ini, kita akan menggunakan dengan model VGG16 karena ini adalah model yang relatif mudah digunakan dan arsitektur model yang sederhana untuk dipahami.
Kami juga membutuhkan foto untuk digunakan dalam contoh ini. Di bawah ini adalah foto seekor anjing.
Unduh foto dan letakkan di direktori kerja Anda saat ini dengan nama file ‘dog.jpg’.
Foto Anjing (dog.jpg)
Model yang Dilatih sebagai Pengklasifikasi
Model yang telah dilatih sebelumnya dapat digunakan secara langsung untuk mengklasifikasikan foto-foto baru sebagai salah satu dari 1.000 kelas yang diketahui dalam tugas klasifikasi citra di ILSVRC.
Kami akan menggunakan model VGG16 untuk mengklasifikasikan gambar baru.
Pertama, foto perlu dimuat dan dibentuk ulang menjadi persegi 224 × 224, yang diharapkan oleh model, dan nilai piksel diskalakan dengan cara yang diharapkan oleh model.
Model beroperasi pada array sampel, oleh karena itu dimensi gambar yang dimuat perlu diperluas sebesar 1, untuk satu gambar dengan 224 × 224 piksel dan tiga saluran.
Selanjutnya, model sudah dapat dimuat dan dilakuakan prediksi.
Ini berarti bahwa kemungkinan prediksi foto milik masing-masing dari 1.000 kelas telah dibuat. Dalam contoh ini, kita hanya mementingkan kelas yang paling mungkin, jadi kita bisa mendekode prediksi dan mengambil label atau nama kelas dengan probabilitas tertinggi.
Source code lengkap di bawah ini untuk memuat foto baru dan memprediksi kelas yang paling mungkin.
Menjalankan source code di atas akan memprediksi lebih dari sekedar anjing; namun juga memprediksi jenis spesifik ‘Doberman’ dengan probabilitas 33,59% benar.
Ringkasan
Dalam postingan ini, Anda telah menemukan cara menggunakan transfer learning saat mengembangkan jaringan saraf konvolusional (CNN) untuk aplikasi computer vision.
Secara khusus, Anda telah mempelajari:
- Transfer learning melibatkan penggunaan model yang dilatih pada satu masalah sebagai titik awal pada masalah terkait.
- Transfer learning bersifat fleksibel, memungkinkan penggunaan pre-trined model secara langsung sebagai praproses ekstraksi fitur dan diintegrasikan ke dalam model yang sepenuhnya baru.
- Keras menyediakan akses mudah ke banyak model berkinerja terbaik pada tugas pengenalan gambar ImageNet seperti VGG, Inception, dan ResNet.