Cara melatih algoritme untuk mendeteksi dan mencegah kebutaan dini
Perangkat medis portabel yang dapat secara akurat mendeteksi berbagai tahap retinopati diabetik, tanpa memerlukan koneksi internet, akan sangat mengurangi jumlah kasus kebutaan akibat retinopati di seluruh dunia. Dengan pembelajaran mesin yang disematkan, pengembangan algoritme yang dapat berjalan langsung pada perangkat medis bertenaga baterai dan melakukan deteksi atau diagnosis sekarang dimungkinkan. Dalam artikel ini, kami memberikan panduan langkah-langkah yang diperlukan untuk melatih algoritme dengan cepat untuk menghadirkan kemampuan ini menggunakan platform perangkat lunak dari Edge Impulse.
Retinopati diabetik adalah suatu kondisi dimana terjadi kerusakan pada pembuluh darah pada jaringan yang terletak di bagian belakang mata. Ini dapat terjadi pada individu yang menderita diabetes dan gula darahnya tidak dikelola dengan baik. Dalam kasus kronis yang ekstrim, retinopati diabetik dapat menyebabkan kebutaan.
Lebih dari dua dari lima orang Amerika dengan diabetes memiliki beberapa bentuk retinopati diabetik. Itu membuat penangkapan dini menjadi kritis, di mana gaya hidup atau intervensi medis dapat dilakukan. Untuk daerah pedesaan di seluruh dunia di mana akses ke perawatan penglihatan terbatas, tahapan retinopati bahkan lebih sulit untuk dideteksi lebih awal sebelum kasus menjadi parah. Menggunakan deteksi retinopati diabetik sebagai tujuannya, kami berupaya mengambil data medis yang tersedia untuk umum dan melatih model pembelajaran mesin di Edge Impulse yang dapat menjalankan inferensi langsung pada perangkat edge. Algoritme idealnya dapat menilai tingkat keparahan retinopati diabetik antara gambar mata yang diambil oleh kamera retina. Kumpulan data yang kami gunakan untuk proyek ini dapat ditemukan di sini.
Untuk algoritme ini, kami membagi kelas menjadi lima kumpulan data yang berbeda:
Tidak ada retinopati diabetik (Tidak ada DR)
DR ringan
DR Sedang
DR parah
DR Proliferatif
Seperti banyak kumpulan data yang tersedia untuk umum, beberapa pembersihan data dan pelabelan harus dilakukan.
Untuk melindungi identitas pasien, setiap gambar dalam kumpulan data hanya diberi kode_id dan diagnosis dari 0-5, 0 sebagai tingkat keparahan No DR terendah dan 5 sebagai yang terburuk, atau DR Proliferatif.
Untuk memasukkan data ke dalam Edge Impulse, beberapa partisi gambar perlu dilakukan. Mengingat sifat sederhana bagaimana data dibagi, saya memutuskan untuk menulis skrip VBA untuk membaca id_code gambar dari Excel, mengambil gambar terkait, dan meletakkannya di folder masing-masing. Skrip untuk memindahkan file-file ini ditautkan di sini. Bagi mereka yang memiliki kemampuan Python atau bahasa skrip lain yang lebih baik, ada banyak cara untuk melakukan ini yang mungkin lebih sederhana.
Edge Impulse memiliki fitur penyerapan data lain seperti integrasi cloud data bucket atau pengumpulan data dari perangkat, tetapi pengunggahan data adalah metode yang saya gunakan di sini. Dengan menggunakan opsi unggah data, saya dapat membawa 5 kelas berbeda serangkaian lima unggahan. Setiap unggahan terdiri dari saya melabeli data sebagai salah satu dari 5 kelas, dan mengunggah gambar terkait yang ada di setiap folder.
Edge Impulse memiliki opsi untuk secara otomatis membagi data menjadi data pelatihan atau pengujian dengan pembagian 80/20. Namun, saya secara manual menambahkan sekitar 500 gambar di berbagai kelas ke kumpulan data pengujian.
Selanjutnya, saatnya untuk mengatur model saya dan memilih blok pemrosesan sinyal dan blok jaringan saraf untuk model ini. Untuk model ini, saya memasukkan blok gambar ke dalam blok pembelajaran transfer dengan tujuan membedakan antara lima kelas yang berbeda.
Dari sini, saya pergi untuk melatih jaringan saraf. Bermain-main dengan pengaturan jaringan saraf, akurasi terbaik yang saya dapatkan adalah sekitar 74%. Tidak buruk, tetapi modelnya macet ketika datang ke beberapa kasus tepi. Misalnya, DR berat terkadang diklasifikasikan sebagai DR ringan. Modelnya tidak terlalu akurat saat DR berkembang, seperti yang Anda lihat pada tangkapan layar di bawah.
Ini membuat saya berpikir tentang aplikasi kehidupan nyata dari proyek seperti ini dan apakah tingkat akurasi ini dapat diterima. Idealnya, semacam kamera pencitraan retina portabel (dalam lingkungan konektivitas nirkabel yang rendah) dapat menjalankan algoritme seperti ini pada perangkat itu sendiri. Saat gambar diambil, diproses, dan hasilnya ditampilkan, pada saat itu orang yang melakukan tes mata dapat memberi tahu pasien bahwa mereka perlu mencari bantuan atau intervensi medis lebih lanjut, tergantung pada hasilnya.
Untuk aplikasi ini, lebih penting untuk menangkap DR pada semua tahap sehingga pasien dapat memulai pengobatan pencegahan, atau untuk kasus yang lebih parah, mencari bantuan medis segera. Mengingat kasus penggunaan ini, model sebenarnya melayani aplikasi potensialnya dengan relatif baik.
Di luar kepala saya, ada beberapa perubahan atau peningkatan yang dapat saya lakukan pada model, yang mungkin membuat hasil yang dihasilkan lebih akurat dalam mendiagnosis tingkat keparahan DR:
Lebih banyak data selalu lebih baik. Namun, mengingat kumpulan data yang terbatas ini, pengumpulan data lebih lanjut akan diperlukan.
Satu ide dapat menggabungkan kelas, dengan membuat kelas ringan – sedang dan kelas proliferatif – parah. Saya ingin tahu apakah itu dapat membantu algoritme mengklasifikasikan dengan lebih baik, mengingat kesamaan antara kasus DR ringan dan sedang tertentu, yang sekarang semuanya termasuk dalam kelompok yang sama.
Bermain-main dengan jumlah lapisan dalam jaringan saraf (NN), serta putus sekolah.
Dari perspektif penerapan, model terlatih ini memang memiliki jejak yang lebih besar dalam hal memori, menghabiskan sekitar 306kB Flash dan 236kB RAM. Bergantung pada perangkat yang dipilih untuk menjalankan inferensi, jumlah waktu yang diperlukan agar hasil inferensi diberikan kembali berkisar antara 0,8 detik hingga 6 detik, saat melakukan benchmark pada Cortex-M4 pada 80MHz atau Cortex-M7 pada 216MHz. Mengingat produk akhir ini perlu mengambil gambar, saya mengantisipasi sesuatu seperti kemampuan pemrosesan Cortex-M7 atau lebih tinggi akan diperlukan.
Singkatnya, menggunakan kumpulan data sumber terbuka, kami dapat melatih model pembelajaran mesin yang berfungsi dengan baik untuk mendeteksi berbagai bentuk retinopati diabetik (DR). Tujuan akhirnya adalah untuk menyebarkan model seperti ini secara langsung pada mikrokontroler tertanam atau perangkat Linux dan memiliki lebih banyak perangkat medis seperti yang di bawah ini menjalankan inferensi di tepi. Hal ini membuka kemungkinan baru untuk layanan kesehatan, dengan menyediakan teknologi medis yang dapat digunakan di daerah pedesaan, tanpa konektivitas nirkabel untuk menyediakan pengujian bagi populasi yang memiliki akses rendah ke layanan kesehatan.
Memang ada peluang bagus untuk penerapan pembelajaran mesin (ML) tertanam di perangkat medis. Detail lebih lanjut tentang proyek ini, termasuk potensi peningkatan lebih lanjut tersedia di sini.