Bikin Projek AI Untuk Mendeteksi Kematangan Kelapa Sawit
Projek ini bertujuan untuk mengembangkan alat untuk mendeteksi kematangan kelapa sawit. Sistem ini memanfaatkan data foto buah kelapa sawit untuk melihat tingkat kematangannya.
Link
Project Over
view
Proyek ini penting karena:
Kelapa sawit merupakan komoditas yang sangat besar di Indonesia. Penentuan kematangan kelapa sawit diperlukan untuk menghasilkan produk olahan dengan kualitas yang lebih baik
Sistem pendeteksi kematangan kelapa sawit otomatis dapat bermanfaat untuk mengefisiensikan proses penyortiran buah.
Business Understanding
Problem Statements
Bagaimana cara mendeteksi tingkat kematangan buah kelapa sawit?
Goals
Mengetahui tingkat kematangan buah kelapa sawit berdasarkan foto yang diberikan.
Solution Approach
Deep Learning berbasis CNN untuk mengembangkan model pendeteksi kematangan kelapa sawit.
Menggunakan Pretrained Model untuk meningkatkan akurasi model.
Data Understanding
Data yang digunakan bersumber dari kaggle: Dataset
import os
import kagglehub
dataset_path = kagglehub.dataset_download("ramadanizikri112/ripeness-of-oil-palm-fruit")
Data Preparation
Split data menjadi train, tes, val dengan perbandingan 70:15:15
Buat dataset generator untuk memudahkan proses pelatihan menggunakan TensorFlow
Hyper parameter yang digunakan adalah sebagai berikut:
batch size = 25
input size = 128,128
rescale = 1/255
zoom range = 1 - 1.2
Hyper parameter yang digunakan pada model yang menggunakan Pretrained Layer adalah sebagai berikut:
batch size = 25
input size = 224,224
rescale = 1/255
zoom range = 1 - 1.2
Modeling
Model Building
Model dibuat dalam bentuk CNN dengan 1 convolutional layer.
Total params: 6,298,115 (24.03 MB)
Trainable params: 6,297,731 (24.02 MB)
Non-trainable params: 384 (1.50 KB)
Menggunakan DenseNet sebagai pretrained
Total params: 8,090,179 (30.86 MB)
Trainable params: 1,052,675 (4.02 MB)
Non-trainable params: 7,037,504 (26.85 MB)
Menggunakan InceptionV3 sebagai pretrained
Total params: 23,904,035 (91.19 MB)
Trainable params: 2,101,251 (8.02 MB)
Non-trainable params: 21,802,784 (83.17 MB)
Menggunakan ResNet50V2 sebagai pretrained
Total params: 25,666,051 (97.91 MB)
Trainable params: 2,101,251 (8.02 MB)
Non-trainable params: 23,564,800 (89.89 MB)
Menggunakan Xception sebagai pretrained
Total params: 22,962,731 (87.60 MB)
Trainable params: 2,101,251 (8.02 MB)
Non-trainable params: 20,861,480 (79.58 MB)
Model Training
Training dilakukan dengan menggunakan fungsi optimasi Adam dengan learning rate 1e-6 dan menggunakan fungsi loss categorical crossentropy dengan 30 epoch.
hasil akhir training mendapatkan akurasi 79% dengan val akurasi 77%
Training DenseNet121
Hasil training accuracy: 0.8821 - loss: 0.2886 - val_accuracy: 0.8889 - val_loss: 0.3107
Training InceptionV3
Hasil training accuracy: 0.8741 - loss: 0.2991 - val_accuracy: 0.8068 - val_loss: 0.4314
Training ResNet50V2
Hasil training accuracy: 0.9181 - loss: 0.2595 - val_accuracy: 0.8744 - val_loss: 0.3365
Training Xception
Hasil training accuracy: 0.8521 - loss: 0.3790 - val_accuracy: 0.7971 - val_loss: 0.4718
Evaluation
Hasil evaluasi menggunakan data test didapatkan
Test Loss: 0.5523
Test Accuracy: 0.7874
Uji coba DenseNet121
Test Loss: 0.3291 Test Accuracy: 0.8502
Uji coba InceptionV3
Test Loss: 0.4189 Test Accuracy: 0.8309
Uji coba ResNet50V2
Test Loss: 0.4150 Test Accuracy: 0.8406
Uji coba Xception
Test Loss: 0.4943 Test Accuracy: 0.7874
Kesimpulan
Model CNN dengan 1 layer convolutional berhasil mempelajari tugas dengan akurasi mendekati 79%. Namun penggunaan pretrained layer memberikan hasil yang lebih baik hingga 85% akurasi. Penerapan DenseNet merupakan model dengan performa paling baik dengan total parameter paling kecil yakni sekitar 8 juta parameter. Hal tersebut memberikan keunggulan pada beban proses komoputasi yang lebih ringan dengan hasil yang lebih baik daripada yang lainnya.