Mineral Klasifikasi Menggunakan Deep Learning
Mineral klasifikasi merupakan hal yang biasa bagi seorang geologist, namun jumlah mineral yang sangat banyak membuat tidak semua geologist paham satu-satu termasuk saya (jadi ini berlatar belakang pribadi), oleh karena itu penggunaan deep learning dan computer vision bisa sangat bermanfaat dalam mengklasifikasi mineral langsung dari foto sampel lapangan.
As of March 2020, the IMA — CNMNC Master List of Minerals lists 5,562 valid minerals
sumber data pada projek ini berasal dari kaggle Minerals Identification Dataset Hand specimen images of minerals in seven classes
Berisi berjumlah 961 files foto dengan 7 kelas mineral yaitu : biotite, bornite, chrysocolla, malachite, muscovite, pyrite and quartz.
Projek ini menggunakan Framework Pytorch dan bahasa Python
Input Data
Input data menggunakan dataloader pytorch, kemudian melihat distribusi data setiap samplenya serta mengintip beberapa sampel foto dari datasets.


seperti terlihat distibusi data tidak merata untuk setiap sampelnya oleh karena itu perlu dipertimbangkan dalam spliting data validasi dan test agar model tidak bias terhadap satu kelas saja.
Pembagian data validasi dan test
Data validasi digunakan untuk evaluasi model selama training dan data test digunakan sebagai blind test bagi model untuk diprediksi. Pembagian data validasi dan test dilakukan dengan tetap mempertahankan distribusi data setiap labelnya menggunakan modul train_test_split dari sklearn. Sehingga data train berjumlah 862 data, validasi 48 data dan test berjumlah 46 data dengan distibusi yang sama.



Dataloader dan Model
Data kemudian di input ke dataloader untuk setiap hasil pembagian data train, validasi dan testing, karena dataset sangat terbatas (cuma 961 foto) maka pada dataloader saya lakukan transformasi RandomRotation(30), RandomVerticalFlip(p=0.5), RandomHorizontalFlip(p=0.5).
model yang saya training berjumlah dua yaitu model dengan 4 konvolusi layer dan 2 dense layer dan pretrained model VGG16.

Training
Training dilakukan dengan menggunakan batch size 128 (setiap loop training dilakukan terhadap 128 foto), learning rate 0.0001, dan epoch 30. Mengunnakan negative log likelihood (NLLLoss) untuk menghitung loss dan Adam optimizer untuk memperbaharui weight pada setiap layernya.




model mineral cukup baik dengan menggunakan jumlah 30 epoch akurasi dan loss antara training dan validasi tidak jauh berbeda. namun model VGG16 cepat mengalami kovergensi validasi loss dan akurasi sudah mendatar pada epoch 7 dan training terus melakukan fitting pada data training set sehingga terjadi overfitting.
Model Evaluasi dan Prediksi
model evaluasi dilakukan terhadap data test menggunakan confusion matrix dan klasifikasi report dari module sklearn.
Model Mineral


model mineral mendapat akurasi 80 % dari total data (not bad though). kalau dicoba plot prediksi seperti gambar dibawah warna merah menandakan kesalahan label dan label dalam kurung merupakan label sebenarnya.

VGG16 Pretrained


F1 score model VGG16 lebih dari 90% pada setiap kelas label dan akurasi mencapai 96%, sehingga sangat menjanjikan ( makin banyak training data makin bagus), tampak dibawah bahwa VGG16 mampu memprediksi 20 test set (total 46 foto) dengan hanya satu kesalahan label.

Mencoba Model Hasil Training Mengunakan Gambar dari Google Image
saya mencoba menggunakan mineral bornite sebagai contoh bagi model


dengan menggunakan gambar dari google image kedua model memprediksi label dengan benar yaitu bornite.
Kesimpulan
Projek ini merupakan salah contoh manfaat penerapan deep learning dalam identifikasi mineral, jika model dapat di deploy di cloud dan dapat langsung dijalankan di device tentu pekerjaan identifikasi mineral menjadi semakin murah dan cepat di lapangan.