Panduan praktis untuk menerapkan machine learning dalam dunia kesehatan
Kesehatan adalah industri yang memunculkan harapan tertinggi mengenai manfaat potensial dari Kecerdasan Buatan (AI). Dokter dan peneliti medis tidak akan menjadi programmer atau data scientist dalam semalam, mereka juga tidak akan digantikan olehnya, tetapi mereka membutuhkan pemahaman tentang apa itu sebenarnya AI dan bagaimana cara kerjanya. Demikian juga, data scientist perlu bekerja sama erat dengan dokter untuk berfokus pada pertanyaan medis yang relevan dan memahami pasien di balik data tersebut.
Studi kasus ini bertujuan untuk menghubungkan kedua audience (dokter/tenaga medis dan data scientist) dengan memberikan analisis tentang bagaimana cara menerapkan machine learning ke kasus penggunaan medis tertentu. Kami akan memandu Anda melalui pertimbangan pendekatan kami sehingga Anda bisa menemani kami dalam perjalanan praktik (melalui notebook Colab ) yang berfokus dalam memahami mekanisme yang mendasari model machine learning terapan.
Eksperimen kami berfokus dalam membuat dan membandingkan algoritme peningkatan kompleksitas dalam upaya yang berhasil untuk memperkirakan usia fisiologis otak berdasarkan data Magnetic Resonance Imaging (MRI). Berdasarkan percobaan ini, kami mengemukakan bagaimana pencitraan biomarker bisa berdampak dalam memahami penyakit neurodegeneratif seperti Alzheimer.
Menentukan input (X) dan output (Y) yang dibutuhkan untuk membingkai masalah medis yang menarik untuk machine learning bukanlah tugas yang mudah, tetapi berikut adalah beberapa contohnya:
Pertanyaan medis dibingkai sebagai masalah machine learning terarah
Ketika dihadapkan dengan masalah seperti ini, data scientist selalu mengambil pendekatan yang sama, tanpa mengindahkan X dan Y:
Ambil data dan bersihkan
Analisis data lalu ekstrak fitur yang relevan dengan masalah tersebut
Rancang strategi validasi
Latih algoritme dengan data tersebut, analisis error, dan interpretasikan hasilnya
Ulangi terus sampai kinerja terbaik algoritme didapatkan.
Catatan: Dalam pekerjaan ini, kami menggunakan Python, salah satu bahasa pemrograman paling populer dalam machine learning. Untuk pengguna baru, kami mengundang Anda untuk mengeksekusi baris kode pertama di notebook Colab untuk mengetahui cara kerjanya.
Pengumpulan Data
Untuk project ini, kami menggunakan dua set data MRI otak yang tersedia untuk publik dan anonim dari subjek yang sehat. Pertama, Set Data A , yang dikumpulkan di tiga rumah sakit London yang berbeda dan berisi data dari hampir 600 subjek. Kedua, Set Data B , yang berisi data dari lebih dari 1.200 subjek dari 25 rumah sakit di AS, Cina, dan Jerman.
Catatan: Bagian ini tentu mudah bagi kami, karena set data gambar yang kami gunakan sudah dikumpulkan dan dikurasi, serta dapat digunakan, dari perspektif hukum dan peraturan. Dan juga, keuntungan pencitraan medis dari format standar yang disebut DICOM, tidak seperti catatan kesehatan elektronik, data genomik, atau patologi digital. Namun, kompilasi set data medis biasanya merupakan tugas yang paling sulit dan memakan waktu bagi dokter dan peneliti, sering kali membutuhkan waktu berbulan-bulan untuk mengumpulkan data dari beberapa ratus pasien.
Seperti dalam project sains data, ini dimulai dengan pembersihan data. Ini menimbulkan masalah: Masalah ID, baris yang hilang dalam spreadsheet, gambar berkualitas rendah, dll. Error semacam itu sangat umum untuk set data medis.
Setelah itu, kami memperoleh 563 subjek “bersih” dari Set Data A (turun dari 600, atau 94%) dan 1.034 subjek untuk Set Data B (turun dari 1.200, atau 86%). Ini ditangkap dalam notebook Colab . Kami mengamati demografi berikut dalam kelompok: 55% adalah perempuan, yang termuda berusia 18 tahun, yang tertua berusia 87 tahun, dan kuartil usia 22, 27, dan 48.
Histogram distribusi usia di antara 1.597 subjek, yang menunjukkan bias terhadap subjek yang lebih muda.
Sebelum Memproses Data
Saat membuka file yang berisi MRI, kami mengamati diferensiasi yang sangat tinggi antar masing-masing gambar: resolusi, nilai voxel, kolom tampilan, orientasi, dll. Oleh karena itu, diperlukan beberapa metode normalisasi agar kita bisa membandingkannya.
Catatan: Komunitas pencitraan medis dan neuroscience telah mengembangkan fitur software normalisasi MRI otak. Kami menerapkan hal ini, pertama-tama menggunakan ANTs untuk mendaftarkan semua gambar ke atlas (MNI152 ) dan melakukan skull stripping, kemudian menormalkan nilai intensitas voxel dengan menerapkan koreksi kolom bias N4 dan teknik yang populer, normalisasi white stripe . MRI bukanlah gambar kuantitatif, jadi yang perlu diperhatikan adalah perbedaan kontras.
Pipeline prapemrosesan MRI.
Apa yang dokter ketahui tentang penuaan otak?
Tidaklah mungkin bagi dokter untuk menentukan usia subjek secara tepat hanya dari gambar otak. Namun, ahli radiologi tahu setidaknya ada tiga fitur anatomi yang terkait dengan penuaan otak, terlihat pada urutan MRI T1 yang kami gunakan dalam pekerjaan ini:
Atrofi, penurunan ketebalan materi abu-abu (karena hilangnya neuron)
Leukoaraiosis, yang muncul sebagai hipointensitas materi putih (karena penuaan pembuluh darah)
Dilatasi ventrikel, sebagai konsekuensi atrofi dan penumpukan cairan serebrospinal di ventrikel otak.
Perbandingan usia otak secara fisiologis dengan fitur-fitur yang diperjelas
Beberapa peneliti telah menyelidiki prediksi usia otak dengan data anatomi, serta kaitannya dengan genetika atau gangguan otak. James Cole , rekan peneliti di King’s College London, telah menulis serangkaian makalah yang bagus tentang topik ini (Cole et al., 2017 adalah yang paling mirip dengan pekerjaan kami). Sebuah studi yang jauh lebih besar (Kaufmann et al., 2018 ) pada sekitar 37.000 pasien saat ini sedang ditinjau, dan keduanya tercakup dengan baik dalam artikel Quanta ini.
Memulai dengan baseline
Untuk memahami kompleksitas masalah, kami mendefinisikan algoritme baseline sederhana. Kami memutuskan untuk tidak menggunakan seluruh 3D MRI, tetapi memakai refleksi yang lebih sederhana dari konten, histogram dari intensitas voxel mereka. Histogram khas T1-MRI ditunjukkan di bawah ini (bangun histogram Anda di notebook Colab ).
Dua puncak tersebut merepresentasikan materi abu-abu dan materi putih. Seperti yang kita ketahui, penuaan berhubungan dengan atrofi materi abu-abu. Bisakah kita memprediksi usia otak dengan representasi yang belum sempurna ini?
Regresi linear ridge yang dilatih pada histogram ini memberi kami mean absolute error rata-rata 9,08 tahun (menggunakan 5-fold cross-validation, random split ). Gradient boosted trees memberikan hasil yang jauh lebih baik dan mengurangi error menjadi 5,71 tahun, yang jauh lebih dekat dengan kinerja termutakhir (4,16 tahun seperti yang dilaporkan dalam Cole et al. 2017 ). Termutakhir adalah titik henti yang menggoda, tetapi kami membuat kesalahan besar yang sayangnya, cukup umum.
Meninjau kembali cross validation
Kisaran intensitas voxel dalam MRI tidak memiliki arti biologis dan sangat bervariasi antara satu pemindai MRI dengan yang lain. Dalam prosedur cross-validation, kami membagi subjek secara acak di antara set pelatihan dan pengujian. Namun, apa yang akan menjadi konsekuensi dari pengacakan bukanlah subjek tetapi rumah sakit, dan karenanya pemindai MRI?
Setelah kami membagi berdasarkan rumah sakit, (dan pembatas tambahan dengan ukuran set pelatihan yang kira-kira konstan), mean absolute error dari model regresi linier dan gradient boosted trees kami meningkat secara dramatis sekitar 5 dan 6 tahun.
Dua gambar berikut menunjukkan bahwa analisis data yang lebih hati-hati akan mencegah kita melakukan kesalahan seperti itu. Dalam gambar pertama, Anda bisa melihat bahwa distribusi usia per rumah sakit sangat berbeda: beberapa rumah sakit hanya memiliki subjek berusia muda dalam set data mereka, sementara yang lain hanya memiliki subjek berusia tua.
Distribusi usia per rumah sakit.
Pada gambar berikutnya, di sebelah kiri, kami menunjukkan histogram rata-rata dari subjek di setiap rumah sakit dan mendapatkan penjelasannya: meskipun puncak materi putih cukup selaras di berbagai rumah sakit, puncak materi abu-abu tersebar luas. Heterogenitas ini menghasilkan bias yang bisa dipelajari oleh algoritme, dan dapat menyebabkan prediksi yang salah. Untuk membatalkan efek ini, kami menggunakan metode normalisasi buatan sendiri untuk memperbaiki puncak materi abu-abu, seperti yang terlihat di bawah sebelah kanan:
Rata-rata histogram intensitas voxel per rumah sakit: kiri, dinormalisasi hanya pada puncak materi putih (v1); kanan, dinormalisasi pada puncak materi putih dan materi abu-abu (v2).
Seperti yang diduga, error cross-validation acak meningkat dengan normalisasi baru ini, tetapi menurun untuk cross-validation rumah sakit, seperti yang diilustrasikan di bawah ini:
Mean Absolute Error (MAE) dan deviasi standar selama bertahun-tahun untuk berbagai algoritme
Bagian ini memperjelas bahwa cross-validation harus dikelompokkan secara cermat untuk menghindari kebingungan variabel (seperti pemindai MRI). Menurut pendapat kami, praktik terbaik untuk memvalidasi suatu algoritme adalah dengan mengujinya pada set data eksternal dan prospektif. Hambatan untuk menyimpulkan kebenaran dari pengobatan berbasis-bukti adalah kurangnya validitas eksternal hasil dalam sebuah makalah ilmiah. Hal ini bisa menyebabkan, dalam bahasa machine learning, kurangnya “kemampuan generalisasi” dari algoritme. Konsep “level of evidence ” dalam kedokteran memungkinkan hierarki tingkat kepercayaan terhadap hasil yang dipublikasikan dalam makalah penilaian sejawat. Saat ini, tidak ada yang setara dalam machine learning.
Lebih jauh lagi dengan segmentasi jaringan
Dengan mereduksi seluruh MRI menjadi histogram, kami mengabaikan informasi spasial tentang struktur otak. Sebagai langkah berikutnya menuju algoritme yang lebih efektif dan bisa ditafsirkan, kami menggunakan paket software lain, FSL FAST , untuk membagi setiap MRI menjadi materi abu-abu, materi putih, dan cairan serebrospinal (CSF). Segmentasi ini didasarkan pada nilai voxel dan memberikan hasil meyakinkan yang bisa Anda lihat di notebook Colab kami .
Tampilan masker segmentasi jaringan otak yang berbeda. Dari kiri ke kanan, masker materi abu-abu, materi putih, dan cairan serebrospinal (CSF)
Berdasarkan segmentasi ini, kami mengamati korelasi Pearson negatif antara usia dan volume total materi abu-abu sebesar -0,75, yang membenarkan hipotesis atrofi materi abu-abu. Lebih jauh, kami menghitung volume lokal jaringan tersegmentasi dan menggunakannya sebagai input dari model linier. Dengan menggunakan fitur tingkat tinggi ini, kami mendapatkan hasil yang lebih baik daripada dengan histogram sederhana, seperti yang diilustrasikan di bawah ini:
Mean Absolute Error (MAE) dan deviasi standar selama bertahun-tahun untuk berbagai algoritme.
Mari kita mulai dengan CNN!
Ini adalah langkah terakhir dari petualangan kita. Sejauh ini, kami memanipulasi data untuk mengekstrak fitur yang kami anggap relevan dengan prediksi usia. Deep learning menghadirkan pendekatan lain dan menggunakan keluarga fungsi yang disebut Convolutional Neural Networks (CNN) yang bekerja langsung pada gambar mentah. Mereka mampu mengidentifikasi fitur paling relevan untuk tugas yang diberikan tanpa panduan manusia.
Untuk studi kasus ini, kami menyederhanakan masalah dengan mengurangi masing-masing MRI dari sekitar 200 gambar dalam dimensi aksial menjadi hanya 10 gambar, masing-masing mewakili zona aksial 1mm di level ventrikel, di mana atrofi, dilatasi ventrikel, dan leukoaraiosis bisa dideteksi. Kami merancang CNN sederhana (10 layer convolutional, parameter 5M), dan memperoleh mean absolute error 4,57 tahun untuk random split dan 6,94 tahun untuk hospital split.
Kami kemudian menyempurnakan model dengan menggunakan augmentasi data yang terdiri dari menyimulasikan lebih banyak data dari yang Anda miliki dengan sedikit mengubah bentuk set data, menambahkan sedikit distorsi melalui rotasi, zoom, mengubah intensitas piksel. Model terlatih bisa dimuat dan digunakan dalam notebook Colab .
Transfer learning adalah teknik yang banyak digunakan dengan menyempurnakan CNN yang sudah dilatih sebelumnya pada tugas yang benar-benar baru. Kami menggunakan salah satu CNN ini (ResNet50 ) dan menyempurnakannya pada set data kami. Rangkaian hasil lengkap dari berbagai arsitektur CNN ditunjukkan di bawah ini:
Mean Absolute Error (MAE) dan deviasi standar selama bertahun-tahun untuk berbagai algoritme
Metode ensemble untuk kinerja terbaik
Sebagai trik terakhir, kami merata-rata prediksi dua algoritme terbaik kami: CNN dengan augmentasi data dan model linier pada MRI tersegmentasi. Sama dengan kolaborasi antar para pakar, metode ensemble membawa dorongan tambahan dalam kinerja, memperjelas bahwa kedua model ini berbeda tetapi saling melengkapi.
Dalam tabel di bawah, kami menyajikan lebih banyak metrik dari model akhir kami. Karena kelompok kami masih muda (usia median adalah 27 tahun), model kami lebih bisa diandalkan untuk subjek muda daripada untuk yang lebih tua:
Kinerja rata-rata pada 5-fold cross-validation untuk algoritme terakhir
Melihat ke dalam kotak hitam
Metrik kinerja mungkin meyakinkan, tetapi sering kali tidak cukup untuk membangkitkan kepercayaan. Algoritme seperti CNN, dengan jutaan parameter, sulit dipahami dan merupakan kotak hitam yang membuat frustrasi dokter yang mencoba memahami biologi di baliknya.
Untuk sekilas pandang ke dalam kotak hitam, kami menggunakan teknik oklusi sederhana. Idenya adalah dengan menyumbat area kecil (4 cm² di sini) dari set pengujian gambar dan mengamati penurunan yang berhubungan dalam mean absolute error. Jika kinerjanya turun secara signifikan, berarti area yang tersumbat itu penting untuk algoritme. Pada gambar di bawah, region merah muda terkait dengan penurunan error tertinggi:
Peta oklusi yang diperoleh untuk subjek dewasa di bawah 30 tahun (kiri), dan subjek di atas usia 60 tahun (kanan).
Peta oklusi subjek termuda di sebelah kiri mengungkapkan bahwa region yang paling dekat dengan ventrikel sangatlah penting dalam prediksi, dan secara ilmiah, memang demikian adanya. Kita tahu bahwa ventrikel paling tipis terdapat pada orang yang lebih muda, karena ventrikel semakin membesar seiring dengan penuaan. Peta oklusi subjek tertua mengungkapkan pentingnya insula di kedua sisi yang konsisten dengan hasil dari Good et al., 2001 .
Beberapa teknik yang lebih canggih untuk menginterpretasikan algoritme deep learning dirangkum dengan baik dalam postingan ini .
Menggunakan model kami untuk memprediksi penyakit Alzheimer
Aplikasi praktik latihan ini adalah memperkirakan usia fisiologis otak untuk mengembangkan pemahaman yang lebih baik tentang penyakit neurodegeneratif seperti penyakit Alzheimer. Sebagai eksperimen terakhir, kami menerapkan model kami pada 489 subjek dari database ADNI , dibagi menjadi dua kategori: kontrol normal (269 subjek) dan penyakit Alzheimer (220 subjek).
Kami mendownload data, membersihkannya, meneruskannya melalui pipeline prapemrosesan kami, dan menerapkan model regresi linier dan CNN yang terlatih. Pasien dalam database ini jauh lebih tua (rata-rata berusia 75 tahun) dibandingkan set data yang kami gunakan untuk pelatihan (rata-rata berusia 35 tahun), dan seperti yang diduga, model kami secara konsisten mengabaikan usia subjek sehat. Kegagalan ini memperjelas keterbatasan utama dari model machine learning: jika mereka tidak dilatih pada sampel populasi yang representatif, mereka mungkin saja berkinerja sangat buruk pada subjek yang tidak terlihat. Kurangnya transferabilitas dan data kesehatan non-stasioner mungkin merupakan salah satu hambatan yang paling serius dalam menggunakan machine learning dalam dunia kesehatan.
Namun, ketika membuat plot distribusi perbedaan antara usia subjek yang dilaporkan dan usia otak yang diprediksi dengan algoritme akhir, kami menemukan perbedaan rata-rata 6 tahun antara pasien penderita Alzheimer dan subjek sehat, sesuai dengan skor ROC-AUC 76%. Ini seakan mengonfirmasi bahwa otak subjek penderita Alzheimer entah bagaimana mengandung fitur yang berkorelasi dengan percepatan penuaan otak (Gaser et al., 2013 ), dan menguatkan hipotesis bahwa usia otak bisa menjadi biomarker baru untuk penyakit neurodegeneratif (Rafel et al., 2017 , Koutsouleris et al., 2014 , Coleet al., 2015 ).
Distribusi perbedaan antara usia subjek yang diprediksi dan yang dilaporkan rata-rata berbeda 6 tahun antara kontrol normal dan penyakit Alzheimer pada 489 pasien dari database ADNI.
Kesimpulan
Prediksi dengan machine learning bisa dimulai dari penerapan model linier sederhana dalam hitungan detik hingga pembangunan CNN kompleks yang terus dilatih selama berhari-hari. Dalam kedua model tersebut, interpretabilitas sangatlah penting, terutama dalam kedokteran di mana ia bisa mengarah pada penemuan biomarker atau mekanisme biologis baru.
Namun, praktisi harus berhati-hati ketika membangun dan menganalisis model-model ini. Bahkan ketika cross-validation distratifikasi dengan benar, kinerja luar biasa pada jumlah kasus penggunaan yang terbatas tidak menjamin kemampuan generalisasi yang baik. Terlebih jika algoritme tidak dilatih pada sampel yang representatif dari keseluruhan populasi, dan sering terjadi bias dalam praktik. Walaupun sulit dari sudut pandang organisasi dan peraturan, menginvestasikan waktu untuk mengumpulkan dan membersihkan set data adalah kunci keberhasilan project machine learning. Kami berharap artikel ini bisa memberi Anda gambaran tentang bagaimana AI bekerja ketika diterapkan pada data medis, dan dapat membantu Anda mengetahui kesalahan-kesalahan umum yang harus dihindari.
Ucapan Terima Kasih
Beberapa anggota tim Owkin berkontribusi dalam pekerjaan ini, termasuk Simon Jégou*, Paul Herent*, Olivier Dehaene dan Thomas Clozel. Kami berterima kasih kepada Dr. Roger Stupp, Dr. Julien Savatovsky, dan Olivier Elemento, PhD, atas dukungan aktifnya, Sylvain Toldo dan Valentin Amé atas pekerjaannya dengan angka-angka, serta Sebastian Schwarz, Eric Tramel, Cedric Whitney, Charlotte Paut dan Malika Cantor, untuk pengeditan naskahnya. Versi yang lebih panjang dari postingan ini tersedia di sini
Simon Jégou, data scientist: simon.jegou@owkin.com
Paul Herent, radiologist: paul.herent@owkin.com
Bonus 7x WIN Sabung Ayam SV388 Winning303
ReplyDeletePenawaran Promosi :
1.Promosi berlaku untuk Seluruh Member Baru Winning303 yang menggunakan Mata Uang IDR ( Indonesian Rupiah )
2.Promosi berlaku untuk Permainan Sabung Ayam SV388 Pada Situs Winning303
3.Bonus Tidak Dapat Di Klaim Apabila Mengikuti Promo Bonus Deposit
4.Syarat dan ketetuan berlaku.
Buruan langsung gabung bersama kami bosku, agar bisa menang kesempatan ini :
WA : 0877 8542 5244
atau langsung di Livechat kita www(titik)winning303(titik)org
>>>DAFTAR<<<
Winning303
data sgp
ReplyDeleteprediksi togel
data hk
idn poker
prediksi togel
poker99
judi poker
agen togel online
bandar togel online
This comment has been removed by the author.
ReplyDeleteGreat post. Saya tidak tahu bahwa usia otak dapat dihitung dengan alat. Bukankah usia otak sama dengan usia manusianya?
ReplyDeletelink alternatif login mobile
login alternatif sbobet
peraturan baccarat
download s128
daftar s1288
s128 asia
indomaxbet
aplikasi indomaxbet
daftar maxbet terpercaya
prediksi togel
ReplyDeleteprediksi togel
prediksi togel
prediksi togel
prediksi togel
prediksi togel
prediksi togel
prediksi togel
prediksi togel
daftar rajaqq
daftar omiqq - daftar playerqq - daftar kokiqq - daftar mejaqq - daftar diskonqq -daftar qiuqiu99 - jaguarqq - sahabatpoker
ReplyDeletenagaqq - taipanqq - daftar rajaqq - daftar laguqq - daftar mainqq - daftar idrpoker - daftar boyaqq - daftar kompasqq - daftar elangqq - daftar jasaqq
ReplyDeleteRajajudi14 Agen Judi Online yang terdapat banyak macam game hanya dengan satu usergame saja:
ReplyDelete- Judi bola
- Live casino
- Slots
- Lotre
- Poker
- ddan masi banyak lagi
Menawarkan berbagai bonus menarik diantaranya:
- Bonus New Member Sportbook dan Casino 20%
- Bonus Next Deposit 5%
- Bonus Cash Back 5%
- Bonus Turnover Poker 0,5%
Support Bank:
- BCA
- BNI
- BRI
- MANDIRI
segera kunjungi kami di website kami Rajajudi14
Borneopoker
ReplyDeleteLasvegasqq
Amanqq
Permainan Sabung ayam sudah terkenal dimanapun tentunya dengan Ayam melawan ayam, Kami agent judi tepercaya tentunya bagi kalian yang berminat untuk bermain sabung ayam bisa datang ke situs kami :)
ReplyDeletesilahkan di klik link yang kita berikan :)
adu ayam s128
sabung ayam s128
agen s128 Indonesia
download aplikasi adu ayam
download aplikasi adu ayam online
download s128 sabung ayam
download s128 adu ayam
downliad s128.apk
s128 apk
aplikasi s128
install s128 apk
agen sabung ayam sv388
agen live casino sv388
daftar live casino sv388
register sabung ayam sv388
register sv388
daftar sv388 tembak ikan
daftar sv388 sabung ayam
Maxbet adalah permainan yang dapat memainkan taruhan Esport, bagi kalian yang sangat suka bermain permainan esports tentunya kalian ingin mendapatkan jajanan tambahan bukan ? silahkan kunjungi situs kami dan dapatkan uang jajan tambahan untuk kalian.
ReplyDeleteAgen Maxbet
agen judi bola maxbet
daftar maxbet
daftar akun maxbet
cara daftar akun maxbet
aplikasi maxbet
maxbet mobile
agen maxbet terpercaya
daftar maxbet
maxbet daftar
daftar akun maxbet
daftar ibcbet
login maxbet
maxbet deposit pulsa
withdraw maxbet
Link maxbet
live chat maxbet
login maxbet
login akun maxbet
situs login maxbet
deposit maxbet
maxbet deposit pulsa
maxbet338 asia
agen judi maxbet338
agen maxbet338
Prediksi HK
ReplyDeletePrediksi SGP
Prediksi Sydney
Data Sydney
Data SGP
Data Sydney
Data HK
Data HK
Data SGP
Data PCSO
Data Sydney
This blog article really helps us analyze and find answers or problems on the obstacles we face, extraordinary and very helpful, thank you
ReplyDeletehttps://hasilsidney.blogspot.com
Keluaran Sidney
Make money with XVIDEOS - Become a porn model คลิปโป๊
ReplyDeleteYour provided content is helpful. I've already bookmarked your website for the future updates.
ReplyDeleteultra high purity gas delivery systems
gas cylinder pressure regulator
gas accessories