Brain Tumor Segmentation using SegResNet
โดย นางสาวณัฐวดี ลีภัทรกิจ จาก ทีม Mysterious Hedgehog
github : https://github.com/Kkingssss/Brain-Tumor-Segmentation/tree/main
ที่ปรึกษาโปรเจค :
1.นพ.ปิยะฤทธิ์ อิทธิชัยวงศ์ ( ทำงานวิจัยด้านปัญญาประดิษฐ์ในภาพถ่ายทางการแพทย์ที่โรงพยาบาลศิริราช และ ปัจจุบันศึกษาต่อปริญญาเอกอยู่ที่ โรงพยาบาล St.Thomas, King’s College London )
2.นายณัฐพล ไตรจักร์วนิช(ทำงานวิจัยด้าน Transformer และ NLP ปัจจุบันศึกษาต่อระดับปริญญาเอกที่ VISTEC)
บทความนี้เป็นส่วนหนึ่งในการประเมินผลการจบการศึกษา โครงการ AI Builder
problem statement
เนื้องอกในสมองเป็นอย่างไร?
เนื้องอกในสมอง (Brain Tumor) เป็นโรคที่เกิดจากเนื้อเยื่อในสมอง หรือเนื้อเยื่อบริเวณใกล้เคียงสมองมีการเจริญเติบโตผิดปกติจนมีผลต่อระบบสมอง และระบบประสาททำให้ร่างกายมีอาการต่าง ๆ ตามมา ซึ่งเนื้องอกที่เจริญผิดปกตินั้นจะไปเบียดเนื้อสมอง และกระทบต่อการทำงานของระบบต่าง ๆ ในร่างกายที่มีสมองเป็นตัวควบคุม โดยเนื้องอกที่เกิดขึ้นในสมองอาจไม่ใช่มะเร็งเสมอไป
ปัจจัยเสี่ยงของเนื้องอกในสมอง
สาเหตุที่ทำให้เกิดเนื้องอกในสมองยังไม่เป็นที่ทราบแน่ชัด แต่เนื้องอกในสมองเกิดได้กับคนทุกวัย
การวินิจฉัยโรคเนื้องอกในสมอง
- ตรวจร่างกาย และทำการทดสอบทางประสาทวิทยา
- ตรวจหาเนื้องอกในสมองด้วยการสแกนสมอง เช่น การตรวจเอกซเรย์คอมพิวเตอร์ (CT scan) เครื่องตรวจวินิจฉัยโรคด้วยคลื่นแม่เหล็กไฟฟ้า (MRI) หรือเครื่องถ่ายภาพรังสี PET scan
- อาจทำการตัดชิ้นเนื้อส่งตรวจวินิจฉัย (Biopsy) หาความผิดปกติของเนื้อเยื่อว่าเป็นเนื้องอกที่อยู่ในขั้นและระดับความรุนแรงใด เป็นเนื้อร้ายหรือไม่ เพื่อวางแผนการรักษาอย่างถูกต้องเหมาะสมต่อไป
โดยการที่จะได้เนื้องอกและปริมาตรของเนื้องอกสมองที่แม่นยำ จะเป็นต้องใช้ผู้เชี่ยวชาญในการระบายสี ภาพสแกนสมอง ซึ่งบางครั้งหากต้องการความแม่นยำสูงอาจต้องใช้มากกว่า 15 นาทีต่อภาพ แล้วจะดีกว่ารึเปล่า ถ้าเรานำเทคโนโลยีมาช่วยแบ่งเบาภาระบุคลากรทางการแพทย์ได้!!!
เพื่อเป็นการช่วยเหลือการทำงานของบุลคลากรทางการแพทย์ในด้านของเวลาและลดภาระหน้าที่ อีกทั้งยังคงได้ผลลัพธ์ที่มีประสิทธิภาพ จึงขอเสนอ Brain Tumor Segmentation using SegResNet
อะไรคือ SegResNet ?
SegResNet เป็นโมเดลที่เป็น encoder-decoder CNN แบบไม่สมมาตร encoder จะเป็นส่วนที่มี ขนาดใหญ่กว่าเพื่อใช้ในการ สกัดฟีเจอร์ของภาพ และ decoder ขนาดเล็กกว่า เพื่อใช้ในการสร้างภาพกลับและตัดชิ้นส่วน โดยมีการใช้ autoencoder regularization โดย ณ ที่นี้ใช้ VAE เพื่อเพิ่มประสิทธิภาพของโมเดลด้วย
ในส่วนของ Encoder part ใช้ ResNet blocks ที่แต่ละ block ประกอบด้วย two convolutions with normalization and ReLU และ Decoder part จะมีความคล้ายคลึงกับ Encoder แต่จะมีเพียง a single block per each spatial level.
metrics and baselines
metrics ที่เลือกใช้ ในครั้งนี้คือ Dice coefficient เนื่องจาก ในทางการแพทย์มีการวัด 3 อย่างหลักๆคือ Dice coefficient, average surface distance, and Hausdorff distance แต่ที่นิยมคือการใช้ Dice coefficient เพราะสามารถบ่งบอกความสามารถ ได้ดีที่สุด
ในส่วนของ baselines ได้เลือกใช้ Swin Unet Transformers
อะไรคือ Swin Unet Transformers?
Swin Unet ประกอบด้วย Swin Transformer encoder ซึ่งมีจุดเด่นในการทำ Self-attention โดยจะต้องแบ่งข้อมูลออกเป็นส่วนย่อยๆ เป็นพื้นที่เล็กๆที่มีชื่อว่า patch แล้วจึงนำข้อมูลมาเปรียบเทียบกันเอง และยังมีการเชื่อมต่อกับ CNN-based decoder
data collection and cleaning
เนื่องจาก Datasetที่ได้มาจากการแข่งขัน Brain Tumor Segmentation (BraTS) challenge 2021 เพื่อให้เป็นการแข่งขันที่มีความยุติธรรม จึงได้สืบค้นและพบว่าส่วนใหญ่ใช้ json file fold 1 ในการแบ่ง Dataset ในการแข่งขันครั้งนี้ จึงได้นำมาใช้เช่นกัน
exploratory data analysis
- Dataset used was BRATS 2021 dataset,
- Modality: MRI Size: 1470 3D volumes (1251 Training + 219 Validation)
- Challenge: RSNA-ASNR-MICCAI Brain Tumor Segmentation (BraTS) Challenge
- data from mpMRI scans (multiparametric MRI)
- mpMRI scans describe 1.T1 2.T2 3. FLAIR 4.T1ce
modeling, validation, and error analysis
modeling : ได้เลือกใช้ Model 2 ตัว นั่นคือ SegResNet และ Swin Unet Transformers
hyper-parameters with SegResNet :
model = SegResNet( blocks_down=[1, 2, 2, 4],
blocks_up=[1, 1, 1],
init_filters=16,
in_channels=4,
out_channels=3,
dropout_prob=0.2
)
hyper-parameters with Swin Unet Transformers :
model = SwinUnet(img_size=(128,128,128),
in_channels=4,
out_channels=3,
feature_size=48,
use_checkpoint=True
)
validation :
หมายเหตุ : เนื่องจาก Swin Unet Transformers ใช้เวลาในการ Train แต่ละ Epoch ค่อนข้างเยอะ และด้วยข้อจำกัดของเวลาที่มี รวมถึงข้อจำกัดของ GPU จึงสามารถ Train ได้เพียง 70 Epoch โดยหลังจากนี้ หากมีเวลาเพิ่มจะนำไป Train on AWS ค่ะ
error analysis : ประสิทธิภาพของ model มีความคลาดเคลื่อนจากที่คาดการณ์ไว้ โดยได้คาดการณ์ว่า SwinUnet จะมีประสิทธิภาพที่สูงกว่า SegResNet model แต่สาเหตุที่ทำให้เกิดเช่นนี้ คิดว่าน่าจะเป็นเพราะ SegResNet model มีประสิทธิภาพที่เพิ่มขึ้นอย่างรวดเร็วในช่วงแรกและจะเริ่มคงที่ในช่วงหลัง แต่SwinUnet โดยทั่วไปแล้วจะใช้ถึง 600 epochs เลยทีเดียว model จึงจะมีประสิทธิภาพ ซึ่งปัญหาตรงนี้เกิดจากข้อจำกัดของ Google Colab ที่สามารถ train ได้เพียง 70 epochs เท่านั้น
deployment
สามารถดูแบบจำลองได้จาก link นี้ได้เลยค่ะ
https://share.streamlit.io/kkingssss/brain-tumor-segmentation/main/deploy.py
โดยแบบจำลองสามารถ upload file ได้ แล้วจึงรอรับผลทาง Email แต่เนื่องจากข้อจำกัดของ GPU ทำให้ ณ ตอนนี้ยังไม่สามารถที่จะประมวลผลส่งให้ทาง Email ได้ แต่ในอนาคตจะมีการนำไปทดลองใช้ในโรงพยาบาลศิริราช และใช้ GPU ของโรงพยาบาลโดยจะสามารถแก้ข้อจำกัดตรงนี้ได้อย่างแน่นอน
การนำปรับใช้ในอนาคต
จะ train model กับข้อมูลที่ได้จากภาควิชารังสีวิทยาของโรงพยาบาลศิริราช โดยคาดหวังว่าโมเดลชิ้นนี้จะสามารถนำไปใช้ได้จริงในโรงพยาบาลและช่วยแบ่งเบาหน้าที่ของบุคลากรทางการแพทย์ได้
ขอขอบคุณผู้สนับสนุนทุกท่านรวมถึงพี่ ๆ ทุกคนที่คอยช่วยเหลือตลอดการทำงานค่ะ