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.
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.
- Dataset: Textile Defect Detection oleh Nacim Belkhir (Lisensi: CC BY-NC-SA 4.0).
- Referensi Utama: Textile Defect Detection: Binary Classification oleh Muhammad Danish.
Proyek ini mengikuti alur kerja standar machine learning dari persiapan data hingga evaluasi model.
Untuk mempercepat proses training yang intensif secara komputasi, proyek ini dikonfigurasi untuk berjalan di TPU (Tensor Processing Unit) yang disediakan oleh Kaggle.
- Analisis Awal: Dataset sumber tersedia dalam format HDF5 (
.h5), yang tidak kompatibel secara langsung dengantf.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
goodmerupakan kelas minoritas.
Untuk mengatasi masalah format dan ketidakseimbangan data, sebuah kelas kustom H5ToStorage dibuat dengan logika sebagai berikut:
- Generator Efisien: Membaca gambar satu per satu dari file HDF5 untuk menghindari error out of memory.
- Augmentasi & Balancing: Untuk data training, gambar dari kelas
good(minoritas) diaugmentasi (flip horizontal & vertikal) dan digandakan untuk menyeimbangkan jumlahnya dengan kelasdamaged. - Penyimpanan ke Direktori: Semua gambar (asli dan hasil augmentasi) disimpan sebagai file
.jpegdalam struktur direktori (dataset/train/good,dataset/train/damaged, dll.) yang sesuai untuk TensorFlow.
Model dibangun menggunakan arsitektur EfficientNetB5 dengan strategi transfer learning.
- Base Model:
EfficientNetB5yang telah dilatih pada dataset ImageNet digunakan sebagai feature extractor. Bobotnya dibekukan (trainable=False) agar tidak berubah selama training awal. - Input Preprocessing: Karena model
EfficientNetB5membutuhkan input 3-channel, sebuah layerConv2Dditambahkan 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
GlobalAveragePooling2Ddan dua layerDenseuntuk 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")
])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.
Grafik akurasi dan loss menunjukkan bahwa model belajar dengan stabil. Kurva validasi mengikuti kurva training dengan baik, yang mengindikasikan model tidak mengalami overfitting.
| 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 |
- Performa Umum: Model mencapai akurasi keseluruhan yang tinggi (95%), menunjukkan potensi yang baik dalam membedakan kain baik dan cacat.
- 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.
- 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.
