6.8 KiB
🚀 Model Retraining Guide - 4 Classes (Healthy Added)
📋 Perubahan Terbaru
Sistem klasifikasi telah diupdate untuk support 4 kelas daripada 3:
- ✅ Bacterialblight (Bercak Bakteri)
- ✅ Brownspot (Bercak Coklat)
- ✅ Healthy (BARU - Daun Sehat)
- ✅ Leafsmut (Jamur Daun)
File yang Sudah Diupdate
- Backend:
web_TA/scripts/rice_inference.py- CLASS_NAMES updated - Laravel:
web_TA/app/Http/Controllers/ClassificationController.php- Added Healthy disease info - Mobile:
mobile_TA/padi_app/lib/screen/result_screen.dart- UI support untuk Healthy class
🔧 Langkah Retrain Model
Step 1: Siapkan Dataset
Pastikan folder struktur ada:
rice leaf diseases dataset/
├── Bacterialblight/ (foto daun bercak bakteri)
├── Brownspot/ (foto daun bercak coklat)
├── Healthy/ (BARU - foto daun sehat)
└── Leafsmut/ (foto daun jamur)
Dataset Healthy harus contain:
- Daun padi yang SEHAT (tanpa penyakit)
- Minimal 100-200 foto berkualitas tinggi
- Beragam kondisi pencahayaan & angle
- Resolusi minimal 224x224 pixel
Step 2: Bersihkan Dataset (Optional tapi Recommended)
Hapus gambar duplikat/corrupted dari Jupyter notebook:
# Jalankan cell "Menghapus Gambar Duplikat" di notebook
PATH_DATASET = r"d:\PROJECT TA\rice leaf diseases dataset"
hapus_gambar_duplikat(PATH_DATASET)
Step 3: Training di Jupyter Notebook
File: rice leaf diseases dataset/rice_leaf_cnn_classification.ipynb
3a. Buka Notebook
cd "d:\PROJECT TA\rice leaf diseases dataset"
jupyter notebook rice_leaf_cnn_classification.ipynb
3b. Jalankan Cell Berturut-turut (PENTING - ikuti order!)
Cell 1: Setup & Imports
# Imports yang diperlukan
import os
import warnings
warnings.filterwarnings('ignore')
Cell 2: Define Classes
- HARUS sesuai dengan folder di dataset:
classes = ['Bacterialblight', 'Brownspot', 'Healthy', 'Leafsmut']
IMG_SIZE = 224
Cell 3: Load Dataset
- Scan folder dan count gambar per class
- Output harus menunjukkan:
- Bacterialblight: N images
- Brownspot: N images
- Healthy: N images (BARU)
- Leafsmut: N images
Cell 4: Data Augmentation
- Augment gambar untuk variance yang lebih baik
Cell 5: Model Building
- Build MobileNetV2 transfer learning model
- 4 output classes (index 0-3)
Cell 6: Training
- Train untuk 50-100 epochs
- Monitor accuracy & loss
- Tunggu sampai selesai (~30 menit - 2 jam)
Cell 7: Evaluation
- Test model accuracy
- Check confusion matrix
Cell 8: Save Model
model.save('rice_leaf_disease_model.keras')
# atau .h5 jika ingin format lama
✅ Validasi Model Baru
1. Check Model File Exists
cd "rice leaf diseases dataset"
ls -la rice_leaf_disease_model.keras
# File harus ada & > 30MB
2. Test dengan Python Script
cd web_TA
$json = @{image="[base64-image-here]"} | ConvertTo-Json
# Test classify
$json | python scripts/rice_inference.py classify --model-dir "../rice leaf diseases dataset"
Output harus format:
{
"success": true,
"predicted_class": "Healthy",
"confidence": 0.95,
"all_predictions": {
"Bacterialblight": 0.01,
"Brownspot": 0.02,
"Healthy": 0.95,
"Leafsmut": 0.02
},
"leafiness": 0.45
}
3. Health Check Endpoint
curl http://localhost:8000/api/health/
# Response:
# {
# "healthy": true,
# "health": {
# "python_model": {
# "status": "ok",
# "classes": ["Bacterialblight", "Brownspot", "Healthy", "Leafsmut"]
# }
# }
# }
🧪 Test Mobile App
1. Upload Foto Daun Sehat
- Open app
- Click "Ubah Foto"
- Upload foto daun sehat
- Harus detect sebagai "Daun Sehat" (hijau color)
- Severity: "Tidak Ada" (green badge)
2. Upload Foto Penyakit
- Upload foto daun sakit
- Harus detect penyakit specifik
- Severity: Normal (red/orange/yellow)
3. Test Concurrent Requests
- Multiple foto sekaligus
- Tidak boleh ada error "gagal menghubungi model"
📊 Training Performance Tips
Meningkatkan Accuracy
-
Dataset Quality - Lebih penting dari quantity
- Foto clear, bien-lit
- Tidak ada gambar upside-down/rotated
- Consistent background (daun only, no tools)
-
Data Augmentation - Notebook sudah punya
- Rotation, Flip, Zoom
- Brightness/Contrast adjustment
-
Class Balance - Pastikan semua class balanced
- Ideal: ~200-300 per class
- Min: 50 per class
-
Training Parameters
# Already optimized di notebook:
IMG_SIZE = 224 # MobileNetV2 optimized size
learning_rate = 0.0001 # Small LR = stable learning
epochs = 50-100
batch_size = 32
Jika Accuracy Rendah
- Tambah dataset (lebih banyak foto)
- Improve data quality
- Increase epochs (sampai loss plateau)
- Check class imbalance (use confusion matrix)
🚨 Common Issues & Fixes
Issue: "Classes mismatch"
Error: IndexError: list index out of range saat inference
Solusi:
# Pastikan di notebook CLASS_NAMES updated:
classes = ['Bacterialblight', 'Brownspot', 'Healthy', 'Leafsmut'] # 4 classes
Issue: Model Predicts Wrong Class
Penyebab:
- Dataset Healthy tidak representative
- Too little training data
- Model overfit
Solusi:
- Add more Healthy images
- Increase epochs
- Check data quality
Issue: Timeout saat Classification
Penyebab: Model loading memakan waktu lama
Solusi: Sudah fixed dengan file locking!
- Requests di-queue
- Model load once → reuse untuk requests berikutnya
📈 After Training Checklist
- Model file exists:
rice_leaf_disease_model.keras - File size > 30MB
rice_inference.pyhas 4 classesClassificationController.phphas Healthy info- Mobile app UI updated (green color untuk Healthy)
- Test health endpoint:
/api/health/ - Test mobile app dengan foto sehat
- Test mobile app dengan foto sakit
- Check no "gagal menghubungi model" errors
🎯 Expected Results
Setelah training dengan Healthy class:
- ✅ Daun sehat ter-classify dengan akurat
- ✅ Penyakit tetap ter-classify dengan akurat
- ✅ Mobile app display correctly (green untuk sehat, red untuk sakit)
- ✅ No more intermittent classification errors (sudah fixed)
- ✅ Confidence score consistent & reliable
📞 Troubleshooting Commands
Clear Model Cache (jika ada issue)
# Delete old model files
rm "rice leaf diseases dataset\rice_leaf_disease_model.h5"
rm "rice leaf diseases dataset\rice_leaf_disease_model.json"
# Keep only .keras version
Test Model Directly
cd web_TA
python scripts/diagnosis.py "../rice leaf diseases dataset"
Output akan show:
- TensorFlow status
- Model file status
- Model loading test result
- Memory usage
Last Updated: May 2026 Version: 2.0 - 4 Classes with Healthy Support