Thursday

19-06-2025 Vol 19

How I Built and Compared a Custom CNN vs MobileNetV2 for Boat Image Classification

Klasifikasi Gambar Perahu: Perbandingan CNN Kustom vs. MobileNetV2

Klasifikasi gambar merupakan aspek fundamental dari visi komputer, dengan berbagai aplikasi mulai dari mobil self-driving hingga diagnosis medis. Dalam postingan blog ini, kita akan menjelajahi dunia klasifikasi gambar perahu, membandingkan dan membedakan dua pendekatan: jaringan saraf konvolusi (CNN) kustom dan model MobileNetV2 yang sudah dilatih. Kita akan membahas langkah-langkah yang terlibat dalam membangun dan melatih kedua model, mengevaluasi kinerja mereka, dan membahas trade-off antara keduanya.

Daftar Isi

  1. Pendahuluan: Mengapa Klasifikasi Gambar Perahu?
  2. Dataset: Mengumpulkan Data untuk Klasifikasi
    • Sumber Dataset
    • Pra-pemrosesan Data
    • Augmentasi Data
  3. CNN Kustom: Membangun Arsitektur Sendiri
    • Merancang Arsitektur CNN
    • Lapisan Konvolusi
    • Lapisan Pooling
    • Lapisan Fully Connected
    • Fungsi Aktivasi dan Regularisasi
  4. Implementasi CNN Kustom dengan Keras/TensorFlow
    • Mendefinisikan Model
    • Kompilasi Model
    • Pelatihan Model
    • Evaluasi Model
  5. MobileNetV2: Kekuatan Transfer Learning
    • Apa itu Transfer Learning?
    • Mengapa Memilih MobileNetV2?
    • Arsitektur MobileNetV2
  6. Implementasi MobileNetV2 dengan Keras/TensorFlow
    • Memuat Model Pre-trained
    • Menyesuaikan Lapisan Klasifikasi
    • Freezing dan Unfreezing Lapisan
    • Pelatihan Model
    • Evaluasi Model
  7. Perbandingan: CNN Kustom vs. MobileNetV2
    • Akurasi
    • Waktu Pelatihan
    • Ukuran Model
    • Kompleksitas
    • Persyaratan Sumber Daya
  8. Analisis Hasil
    • Matriks Konfusi
    • Laporan Klasifikasi
    • Visualisasi Prediksi
  9. Peningkatan dan Pertimbangan Masa Depan
    • Fine-tuning Lanjutan
    • Arsitektur Alternatif
    • Mengatasi Data yang Tidak Seimbang
    • Penerapan di Dunia Nyata
  10. Kesimpulan

1. Pendahuluan: Mengapa Klasifikasi Gambar Perahu?

Klasifikasi gambar perahu lebih dari sekadar latihan akademis. Ini memiliki aplikasi praktis yang signifikan di berbagai bidang:

  • Keamanan Maritim: Mengidentifikasi jenis perahu dapat membantu memantau lalu lintas maritim, mendeteksi aktivitas ilegal (misalnya, penyelundupan), dan meningkatkan keselamatan maritim.
  • Pencarian dan Penyelamatan: Dalam operasi pencarian dan penyelamatan, pengenalan cepat jenis perahu dapat membantu dalam mengalokasikan sumber daya yang tepat.
  • Manajemen Lingkungan: Memantau populasi perahu di lingkungan laut dapat membantu melacak dampak aktivitas manusia terhadap ekosistem.
  • Pariwisata: Klasifikasi perahu dapat digunakan untuk meningkatkan pengalaman wisatawan dengan memberikan informasi tentang berbagai jenis perahu yang terlihat.

Proyek ini berfungsi sebagai studi kasus yang baik untuk memahami trade-off antara membangun model klasifikasi gambar dari awal dan memanfaatkan model yang sudah dilatih.

2. Dataset: Mengumpulkan Data untuk Klasifikasi

Keberhasilan proyek klasifikasi gambar sangat bergantung pada kualitas dan kuantitas dataset. Berikut adalah langkah-langkah penting dalam mengumpulkan dan menyiapkan data:

Sumber Dataset

Ada beberapa cara untuk memperoleh dataset gambar perahu:

  • Dataset Publik: Beberapa dataset publik tersedia online, seperti dataset “Ships in Satellite Imagery” di Kaggle. Dataset ini mungkin menyediakan koleksi gambar perahu yang sudah diberi label.
  • Web Scraping: Anda dapat menggunakan web scraping untuk mengumpulkan gambar dari situs web yang menampilkan gambar perahu. Berhati-hatilah dengan hak cipta dan ketentuan penggunaan.
  • Membuat Dataset Sendiri: Jika Anda memiliki akses ke gambar perahu (misalnya, dari kamera Anda sendiri atau kamera pengintai), Anda dapat membuat dataset sendiri.

Dataset yang baik harus memiliki ciri-ciri berikut:

  • Keragaman: Berisi gambar dari berbagai jenis perahu, sudut pandang, kondisi pencahayaan, dan latar belakang.
  • Ukuran yang Memadai: Cukup besar untuk melatih model secara efektif tanpa overfitting.
  • Kualitas Tinggi: Gambar harus jelas dan bebas dari noise atau artefak yang signifikan.
  • Label yang Akurat: Setiap gambar harus diberi label dengan benar dengan jenis perahu yang sesuai.

Pra-pemrosesan Data

Setelah Anda mengumpulkan dataset, Anda perlu memprosesnya terlebih dahulu untuk mempersiapkannya untuk pelatihan model. Langkah-langkah pra-pemrosesan umum meliputi:

  • Resizing: Mengubah ukuran semua gambar ke ukuran yang konsisten. Ini diperlukan karena model CNN mengharapkan gambar input dengan ukuran tetap.
  • Normalisasi: Menskalakan nilai piksel ke rentang [0, 1] atau [-1, 1]. Ini membantu meningkatkan kinerja pelatihan dan mencegah masalah numerik.
  • Mengubah ke Grayscale (Opsional): Jika warna tidak penting untuk tugas klasifikasi, Anda dapat mengubah gambar menjadi grayscale untuk mengurangi kompleksitas dan meningkatkan kecepatan pemrosesan.

Augmentasi Data

Augmentasi data adalah teknik untuk meningkatkan ukuran dan variasi dataset Anda dengan membuat versi yang diubah dari gambar yang ada. Ini membantu meningkatkan generalisasi model dan mengurangi overfitting.

Teknik augmentasi data yang umum meliputi:

  • Rotasi: Memutar gambar dengan sudut acak.
  • Translasi: Menggeser gambar secara horizontal atau vertikal.
  • Skala: Memperbesar atau memperkecil gambar.
  • Membalik: Membalik gambar secara horizontal atau vertikal.
  • Shear: Memiringkan gambar.
  • Perubahan Kecerahan: Menyesuaikan kecerahan gambar.
  • Perubahan Kontras: Menyesuaikan kontras gambar.

Keras menyediakan alat yang mudah digunakan untuk augmentasi data melalui kelas `ImageDataGenerator`.

3. CNN Kustom: Membangun Arsitektur Sendiri

Membangun CNN kustom memungkinkan Anda untuk menyesuaikan arsitektur model dengan kebutuhan spesifik tugas Anda. Berikut adalah komponen utama dari arsitektur CNN:

Merancang Arsitektur CNN

Arsitektur CNN terdiri dari serangkaian lapisan yang dirancang untuk mengekstrak fitur dari gambar input dan mengklasifikasikannya. Lapisan yang paling umum adalah:

  • Lapisan Konvolusi: Mengekstrak fitur dengan menerapkan filter konvolusi ke gambar input.
  • Lapisan Pooling: Mengurangi dimensi spasial fitur yang diekstraksi, mengurangi jumlah parameter dan membuat model lebih tahan terhadap variasi kecil dalam input.
  • Lapisan Fully Connected: Mengklasifikasikan fitur yang diekstraksi ke dalam kelas yang berbeda.

Lapisan Konvolusi

Lapisan konvolusi adalah inti dari CNN. Ini bekerja dengan menerapkan filter (juga dikenal sebagai kernel) ke bagian kecil dari gambar input dan menghitung produk titik antara filter dan bagian tersebut. Hasilnya adalah peta fitur yang mewakili keberadaan fitur tertentu di lokasi tersebut dalam gambar.

Parameter penting dari lapisan konvolusi meliputi:

  • Jumlah Filter: Menentukan berapa banyak fitur yang akan diekstraksi.
  • Ukuran Kernel: Menentukan ukuran filter. Ukuran kernel yang lebih kecil mengekstrak fitur yang lebih halus, sementara ukuran kernel yang lebih besar mengekstrak fitur yang lebih kasar.
  • Stride: Menentukan seberapa jauh filter bergerak di setiap langkah. Stride yang lebih besar mengurangi ukuran peta fitur output.
  • Padding: Menentukan bagaimana gambar input diisi di sekitar tepinya. Padding dapat digunakan untuk mempertahankan ukuran spasial gambar setelah konvolusi.

Lapisan Pooling

Lapisan pooling mengurangi dimensi spasial peta fitur yang diekstraksi, mengurangi jumlah parameter dan membuat model lebih tahan terhadap variasi kecil dalam input. Dua jenis lapisan pooling yang umum adalah:

  • Max Pooling: Memilih nilai maksimum dalam setiap wilayah pooling.
  • Average Pooling: Menghitung nilai rata-rata dalam setiap wilayah pooling.

Parameter penting dari lapisan pooling meliputi:

  • Ukuran Pool: Menentukan ukuran wilayah pooling.
  • Stride: Menentukan seberapa jauh jendela pooling bergerak di setiap langkah.

Lapisan Fully Connected

Lapisan fully connected mengklasifikasikan fitur yang diekstraksi ke dalam kelas yang berbeda. Setiap neuron di lapisan fully connected terhubung ke semua neuron di lapisan sebelumnya.

Jumlah neuron di lapisan output sama dengan jumlah kelas dalam tugas klasifikasi.

Fungsi Aktivasi dan Regularisasi

Fungsi aktivasi memperkenalkan non-linearitas ke dalam model, memungkinkannya untuk mempelajari hubungan yang lebih kompleks antara input dan output. Fungsi aktivasi yang umum meliputi:

  • ReLU (Rectified Linear Unit): Sederhana dan efisien secara komputasi.
  • Sigmoid: Menghasilkan output antara 0 dan 1, yang dapat diinterpretasikan sebagai probabilitas.
  • Tanh (Hyperbolic Tangent): Menghasilkan output antara -1 dan 1.

Regularisasi adalah teknik untuk mencegah overfitting dengan menambahkan penalti ke fungsi kerugian untuk kompleksitas model. Teknik regularisasi yang umum meliputi:

  • L1 Regularization: Menambahkan penalti yang sebanding dengan nilai absolut bobot.
  • L2 Regularization: Menambahkan penalti yang sebanding dengan kuadrat bobot.
  • Dropout: Secara acak menonaktifkan neuron selama pelatihan, mencegah mereka dari co-adapting.

4. Implementasi CNN Kustom dengan Keras/TensorFlow

Berikut adalah contoh implementasi CNN kustom untuk klasifikasi gambar perahu menggunakan Keras dan TensorFlow:

“`python
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

# Mendefinisikan Model
model = Sequential([
Conv2D(32, (3, 3), activation=’relu’, input_shape=(150, 150, 3)),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation=’relu’),
MaxPooling2D((2, 2)),
Conv2D(128, (3, 3), activation=’relu’),
MaxPooling2D((2, 2)),
Flatten(),
Dense(512, activation=’relu’),
Dropout(0.5),
Dense(num_classes, activation=’softmax’) # num_classes adalah jumlah jenis perahu
])

# Kompilasi Model
model.compile(optimizer=’adam’,
loss=’categorical_crossentropy’,
metrics=[‘accuracy’])

# Pelatihan Model
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=validation_generator.samples // batch_size
)

# Evaluasi Model
loss, accuracy = model.evaluate(validation_generator, steps=validation_generator.samples // batch_size)
print(‘Akurasi: %.2f’ % (accuracy*100))
“`

Penjelasan Kode:

  • `Sequential` Model: Membuat model neural network sekuensial.
  • `Conv2D` Layers: Menambahkan lapisan konvolusi dengan filter 32, 64, dan 128, masing-masing, menggunakan fungsi aktivasi ReLU. `input_shape` ditentukan untuk lapisan pertama untuk menentukan ukuran gambar input.
  • `MaxPooling2D` Layers: Menambahkan lapisan pooling max untuk mengurangi dimensi spasial.
  • `Flatten` Layer: Meratakan peta fitur ke vektor 1D.
  • `Dense` Layers: Menambahkan lapisan fully connected dengan 512 neuron dan fungsi aktivasi ReLU, diikuti oleh lapisan output dengan `num_classes` neuron dan fungsi aktivasi softmax untuk klasifikasi multi-kelas.
  • `Dropout` Layer: Menambahkan lapisan dropout untuk regularisasi.
  • `compile` Method: Mengkonfigurasi proses pelatihan, menentukan optimizer, fungsi kerugian, dan metrik.
  • `fit` Method: Melatih model menggunakan data pelatihan dan data validasi.
  • `evaluate` Method: Mengevaluasi kinerja model pada data validasi.

5. MobileNetV2: Kekuatan Transfer Learning

Transfer learning adalah teknik di mana Anda menggunakan model yang telah dilatih sebelumnya pada dataset besar untuk tugas yang berbeda. Ini dapat menghemat waktu dan sumber daya komputasi yang signifikan, dan seringkali dapat menghasilkan akurasi yang lebih baik daripada melatih model dari awal.

Apa itu Transfer Learning?

Transfer learning bekerja dengan mentransfer pengetahuan yang dipelajari oleh model yang telah dilatih sebelumnya ke tugas baru. Ini dilakukan dengan membekukan beberapa lapisan dari model yang telah dilatih sebelumnya (yaitu, mencegah mereka dari pembaruan selama pelatihan) dan melatih hanya lapisan yang lebih tinggi (misalnya, lapisan klasifikasi) pada dataset baru.

Mengapa Memilih MobileNetV2?

MobileNetV2 adalah arsitektur neural network seluler yang ringan yang dirancang untuk perangkat seluler dan tertanam. Ia dikenal karena efisiensi dan akurasinya. Ia telah dilatih pada dataset ImageNet yang besar, yang berisi jutaan gambar dari ribuan kelas. Ini berarti bahwa ia telah mempelajari fitur-fitur representatif yang dapat ditransfer ke tugas klasifikasi gambar lainnya.

Keuntungan menggunakan MobileNetV2:

  • Efisien: Memiliki ukuran model yang kecil dan persyaratan komputasi yang rendah, membuatnya ideal untuk perangkat seluler dan tertanam.
  • Akurat: Mencapai akurasi yang kompetitif dibandingkan dengan model yang lebih besar.
  • Pre-trained: Telah dilatih sebelumnya pada dataset ImageNet yang besar, yang berarti Anda dapat memanfaatkannya untuk transfer learning.

Arsitektur MobileNetV2

MobileNetV2 didasarkan pada blok residual terbalik dengan bottleneck. Blok-blok ini dirancang untuk mengurangi jumlah parameter dan operasi komputasi yang diperlukan, sambil tetap mempertahankan akurasi yang tinggi. Arsitektur ini terdiri dari lapisan konvolusi mendalam dan lapisan konvolusi titik-demi-titik yang membangun blok residual terbalik.

6. Implementasi MobileNetV2 dengan Keras/TensorFlow

Berikut adalah contoh implementasi MobileNetV2 untuk klasifikasi gambar perahu menggunakan Keras dan TensorFlow:

“`python
import tensorflow as tf
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout

# Memuat Model Pre-trained
base_model = MobileNetV2(weights=’imagenet’, include_top=False, input_shape=(150, 150, 3))

# Menyesuaikan Lapisan Klasifikasi
model = Sequential([
base_model,
GlobalAveragePooling2D(),
Dense(1024, activation=’relu’),
Dropout(0.5),
Dense(num_classes, activation=’softmax’) # num_classes adalah jumlah jenis perahu
])

# Freezing dan Unfreezing Lapisan
base_model.trainable = False # Membekukan semua lapisan konvolusi

# Kompilasi Model
model.compile(optimizer=’adam’,
loss=’categorical_crossentropy’,
metrics=[‘accuracy’])

# Pelatihan Model
history = model.fit(
train_generator,
steps_per_epoch=train_generator.samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=validation_generator.samples // batch_size
)

# Evaluasi Model
loss, accuracy = model.evaluate(validation_generator, steps=validation_generator.samples // batch_size)
print(‘Akurasi: %.2f’ % (accuracy*100))
“`

Penjelasan Kode:

  • `MobileNetV2` Model: Memuat model MobileNetV2 yang telah dilatih sebelumnya dari Keras. `include_top=False` menghapus lapisan klasifikasi akhir, dan `input_shape` menentukan ukuran gambar input.
  • `GlobalAveragePooling2D` Layer: Menambahkan lapisan global average pooling untuk mengurangi dimensi spasial dari peta fitur.
  • `Dense` Layers: Menambahkan lapisan fully connected dengan 1024 neuron dan fungsi aktivasi ReLU, diikuti oleh lapisan output dengan `num_classes` neuron dan fungsi aktivasi softmax.
  • `base_model.trainable = False`: Membekukan semua lapisan konvolusi di model dasar, mencegah mereka dari pembaruan selama pelatihan.
  • `compile` Method: Mengkonfigurasi proses pelatihan, menentukan optimizer, fungsi kerugian, dan metrik.
  • `fit` Method: Melatih model menggunakan data pelatihan dan data validasi.
  • `evaluate` Method: Mengevaluasi kinerja model pada data validasi.

7. Perbandingan: CNN Kustom vs. MobileNetV2

Sekarang mari kita bandingkan CNN kustom dan MobileNetV2 dalam beberapa metrik kunci:

  • Akurasi: MobileNetV2 cenderung mencapai akurasi yang lebih tinggi, terutama dengan data pelatihan terbatas, karena memanfaatkan pengetahuan yang telah dipelajari sebelumnya dari dataset ImageNet yang besar. CNN kustom membutuhkan lebih banyak data pelatihan untuk mencapai akurasi yang sebanding.
  • Waktu Pelatihan: MobileNetV2 biasanya melatih lebih cepat karena sebagian besar lapisan dibekukan. CNN kustom memerlukan waktu pelatihan yang lebih lama karena semua lapisan dilatih dari awal.
  • Ukuran Model: MobileNetV2 jauh lebih kecil dari CNN kustom, membuatnya lebih cocok untuk perangkat seluler dan tertanam.
  • Kompleksitas: CNN kustom lebih kompleks untuk dirancang dan di-tune daripada MobileNetV2.
  • Persyaratan Sumber Daya: MobileNetV2 membutuhkan lebih sedikit sumber daya komputasi daripada CNN kustom, membuatnya lebih mudah untuk dilatih dan di-deploy pada perangkat dengan sumber daya terbatas.

Berikut tabel ringkasan:

Fitur CNN Kustom MobileNetV2
Akurasi Tergantung pada Data & Arsitektur Umumnya Lebih Tinggi (dengan Transfer Learning)
Waktu Pelatihan Lebih Lama Lebih Pendek
Ukuran Model Lebih Besar Lebih Kecil
Kompleksitas Lebih Tinggi Lebih Rendah
Persyaratan Sumber Daya Lebih Tinggi Lebih Rendah

8. Analisis Hasil

Setelah melatih dan mengevaluasi model Anda, penting untuk menganalisis hasil untuk mendapatkan wawasan tentang kinerja mereka.

Matriks Konfusi

Matriks konfusi adalah tabel yang meringkas kinerja model klasifikasi. Ia menunjukkan jumlah prediksi yang benar dan salah untuk setiap kelas.

Matriks konfusi dapat digunakan untuk mengidentifikasi kelas-kelas yang keliru oleh model dan untuk mendiagnosis sumber kesalahan.

Laporan Klasifikasi

Laporan klasifikasi menyediakan metrik evaluasi yang lebih rinci, seperti presisi, recall, skor F1, dan dukungan untuk setiap kelas.

  • Presisi: Proporsi prediksi positif yang benar.
  • Recall: Proporsi instans positif aktual yang diidentifikasi dengan benar.
  • Skor F1: Rata-rata harmonik presisi dan recall.
  • Dukungan: Jumlah instans dalam setiap kelas.

Visualisasi Prediksi

Memvisualisasikan prediksi model dapat membantu Anda untuk memahami bagaimana model membuat keputusannya dan untuk mengidentifikasi area untuk perbaikan.

Anda dapat memvisualisasikan prediksi model dengan menampilkan gambar input dan label yang diprediksi.

9. Peningkatan dan Pertimbangan Masa Depan

Berikut adalah beberapa peningkatan dan pertimbangan masa depan untuk proyek klasifikasi gambar perahu:

  • Fine-tuning Lanjutan: Bereksperimen dengan unfreezing lebih banyak lapisan dari model MobileNetV2 yang telah dilatih sebelumnya dan melatihnya pada dataset perahu. Ini dapat meningkatkan akurasi model.
  • Arsitektur Alternatif: Menjelajahi arsitektur neural network lainnya, seperti EfficientNet atau ResNet, dan membandingkan kinerja mereka dengan CNN kustom dan MobileNetV2.
  • Mengatasi Data yang Tidak Seimbang: Jika dataset tidak seimbang (yaitu, beberapa kelas memiliki lebih banyak gambar daripada yang lain), Anda dapat menggunakan teknik seperti oversampling atau downsampling untuk menyeimbangkan data.
  • Penerapan di Dunia Nyata: Menerapkan model klasifikasi gambar perahu di lingkungan dunia nyata, seperti sistem pengawasan pantai atau aplikasi seluler untuk mengidentifikasi perahu.

10. Kesimpulan

Dalam postingan blog ini, kita telah menjelajahi dunia klasifikasi gambar perahu, membandingkan dan membedakan dua pendekatan: jaringan saraf konvolusi (CNN) kustom dan model MobileNetV2 yang telah dilatih. Kami telah membahas langkah-langkah yang terlibat dalam membangun dan melatih kedua model, mengevaluasi kinerja mereka, dan membahas trade-off antara keduanya.

MobileNetV2, dengan transfer learning, menawarkan pendekatan yang lebih cepat dan efisien, terutama ketika sumber daya komputasi terbatas atau data pelatihan terbatas. CNN kustom, di sisi lain, memberi Anda lebih banyak fleksibilitas untuk menyesuaikan arsitektur model dengan kebutuhan spesifik Anda, tetapi memerlukan lebih banyak waktu, sumber daya, dan data pelatihan.

Pilihan terbaik tergantung pada kendala dan tujuan spesifik Anda. Kami harap postingan blog ini telah memberikan Anda pemahaman yang lebih baik tentang klasifikasi gambar perahu dan membantu Anda membuat keputusan yang tepat untuk proyek Anda sendiri.

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *