Skip to content

marifr25/Image-Classification_Dicoding-Project

Repository files navigation

Deteksi Cacat Kain (Fabric Defect Detection)

Proyek ini bertujuan untuk membangun model klasifikasi gambar menggunakan TensorFlow untuk mendeteksi cacat pada kain tekstil. Terinspirasi dari pengalaman di industri tekstil, di mana kualitas produk sering kali terpengaruh oleh human error atau sistem yang kurang efisien, proyek ini mencoba memberikan solusi otomatisasi menggunakan deep learning.

Latar Belakang

Dalam industri tekstil, kontrol kualitas adalah tahap krusial. Cacat pada kain seperti benang putus, sobekan, atau kontaminasi dapat menurunkan nilai produk secara signifikan. Proses inspeksi manual seringkali lambat, subjektif, dan rentan terhadap kesalahan. Model deep learning dapat memberikan solusi yang lebih cepat, konsisten, dan akurat untuk mendeteksi cacat ini.

Sumber Data dan Referensi

Alur Kerja Proyek

Proyek ini mengikuti alur kerja standar machine learning dari persiapan data hingga evaluasi model.

1. Pengaturan Lingkungan

Untuk mempercepat proses training yang intensif secara komputasi, proyek ini dikonfigurasi untuk berjalan di TPU (Tensor Processing Unit) yang disediakan oleh Kaggle.

2. Preprocessing dan EDA

  • Analisis Awal: Dataset sumber tersedia dalam format HDF5 (.h5), yang tidak kompatibel secara langsung dengan tf.keras.utils.image_dataset_from_directory.
  • Klasifikasi Biner: Meskipun dataset asli memiliki beberapa kelas cacat, proyek ini menyederhanakannya menjadi klasifikasi biner: damaged (cacat) dan good (baik).
  • Ketidakseimbangan Kelas: Analisis awal menunjukkan adanya ketidakseimbangan kelas yang signifikan, di mana kelas good merupakan kelas minoritas.

3. Pemuatan dan Augmentasi Data

Untuk mengatasi masalah format dan ketidakseimbangan data, sebuah kelas kustom H5ToStorage dibuat dengan logika sebagai berikut:

  1. Generator Efisien: Membaca gambar satu per satu dari file HDF5 untuk menghindari error out of memory.
  2. Augmentasi & Balancing: Untuk data training, gambar dari kelas good (minoritas) diaugmentasi (flip horizontal & vertikal) dan digandakan untuk menyeimbangkan jumlahnya dengan kelas damaged.
  3. Penyimpanan ke Direktori: Semua gambar (asli dan hasil augmentasi) disimpan sebagai file .jpeg dalam struktur direktori (dataset/train/good, dataset/train/damaged, dll.) yang sesuai untuk TensorFlow.

4. Pembuatan Model (Transfer Learning)

Model dibangun menggunakan arsitektur EfficientNetB5 dengan strategi transfer learning.

  • Base Model: EfficientNetB5 yang telah dilatih pada dataset ImageNet digunakan sebagai feature extractor. Bobotnya dibekukan (trainable=False) agar tidak berubah selama training awal.
  • Input Preprocessing: Karena model EfficientNetB5 membutuhkan input 3-channel, sebuah layer Conv2D ditambahkan untuk mengubah gambar grayscale (1 channel) menjadi 3 channel. Gambar juga di-resize dari (64, 64) menjadi (224, 224).
  • Classifier Head: Di atas base model, ditambahkan layer GlobalAveragePooling2D dan dua layer Dense untuk melakukan klasifikasi biner.
model = keras.Sequential([
    keras.Input(shape=(64, 64, 1), name="input_layer"),
    keras.layers.Resizing(224, 224, interpolation="bilinear", name="resizing_pixel"),
    keras.layers.Conv2D(3, 1, padding="same", activation="relu", name="expand_channel"),
    module,  # EfficientNetB5
    keras.layers.GlobalAveragePooling2D(name="pooling_layer"),
    keras.layers.Dense(256, activation="relu", name="dense_layer"),
    keras.layers.Dense(1, activation='sigmoid', name="output_layer")
])

5. Training

Model dilatih dengan optimizer Adam dan loss function BinaryCrossentropy. Dua callbacks digunakan untuk mengoptimalkan proses training:

  • ReduceLROnPlateau: Mengurangi learning rate jika validation loss tidak membaik.
  • EarlyStopping: Menghentikan training lebih awal jika tidak ada kemajuan untuk mencegah overfitting dan mengembalikan bobot terbaik.

Hasil dan Evaluasi

Riwayat Training

Grafik akurasi dan loss menunjukkan bahwa model belajar dengan stabil. Kurva validasi mengikuti kurva training dengan baik, yang mengindikasikan model tidak mengalami overfitting.

visualisasi_hasil_training

Laporan Klasifikasi

Class Precision Recall F1-Score Support
damaged (0) 0.99 0.95 0.97 30000
good (1) 0.78 0.94 0.85 6000
accuracy 0.95 36000
macro avg 0.88 0.94 0.91 36000
weighted avg 0.95 0.95 0.95 36000

Kesimpulan

  1. Performa Umum: Model mencapai akurasi keseluruhan yang tinggi (95%), menunjukkan potensi yang baik dalam membedakan kain baik dan cacat.
  2. Isu Kritis pada Presisi: Terdapat isu pada presisi (precision) untuk kelas good (kelas 1), yang hanya mencapai 0.78.
    • Interpretasi: Angka ini berarti dari semua gambar yang diprediksi oleh model sebagai "baik", hanya 78% yang benar-benar baik. Sisanya, yaitu 22%, adalah kain "cacat" yang keliru dianggap baik.
    • Implikasi Bisnis: Kesalahan jenis ini (False Negative untuk kelas damaged) sangat berisiko dalam kontrol kualitas, karena dapat menyebabkan produk cacat lolos ke pasar dan merusak reputasi merek.
  3. Precision yang Kuat: Di sisi lain, precision untuk kelas damaged (kelas 0) sangat tinggi (0.99), yang berarti model hampir tidak pernah melewatkan kain yang benar-benar cacat.

Secara keseluruhan, model ini menunjukkan potensi besar tetapi memerlukan perbaikan lebih lanjut untuk mengurangi tingkat kesalahan dalam meloloskan produk cacat.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published