AI-For-Beginners/translations/th/lessons/4-ComputerVision/12-Segmentation/README.md

80 lines
11 KiB
Markdown

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "d7f8a25ff13cfe9f4cd671cc23351fad",
"translation_date": "2025-08-29T08:56:39+00:00",
"source_file": "lessons/4-ComputerVision/12-Segmentation/README.md",
"language_code": "th"
}
-->
# การแบ่งส่วนภาพ
เราได้เรียนรู้เกี่ยวกับการตรวจจับวัตถุ (Object Detection) ซึ่งช่วยให้เราสามารถระบุตำแหน่งของวัตถุในภาพโดยการทำนาย *กรอบสี่เหลี่ยม* (bounding boxes) ของวัตถุ อย่างไรก็ตาม สำหรับบางงาน เราไม่ได้ต้องการแค่กรอบสี่เหลี่ยม แต่ต้องการการระบุตำแหน่งของวัตถุที่แม่นยำยิ่งขึ้น งานนี้เรียกว่า **การแบ่งส่วนภาพ** (segmentation)
## [แบบทดสอบก่อนเรียน](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/112)
การแบ่งส่วนภาพสามารถมองว่าเป็น **การจำแนกพิกเซล** ซึ่งสำหรับ **แต่ละ** พิกเซลในภาพ เราต้องทำนายคลาสของมัน (*พื้นหลัง* เป็นหนึ่งในคลาส) โดยมีอัลกอริทึมการแบ่งส่วนภาพหลักสองประเภท:
* **Semantic segmentation** บอกเพียงคลาสของพิกเซล แต่ไม่ได้แยกแยะวัตถุที่แตกต่างกันในคลาสเดียวกัน
* **Instance segmentation** แบ่งคลาสออกเป็นวัตถุแต่ละชิ้น
สำหรับ instance segmentation แกะเหล่านี้ถือเป็นวัตถุที่แตกต่างกัน แต่สำหรับ semantic segmentation แกะทั้งหมดจะถูกแทนด้วยคลาสเดียวกัน
<img src="images/instance_vs_semantic.jpeg" width="50%">
> ภาพจาก [บทความนี้](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50)
มีสถาปัตยกรรมของเครือข่ายประสาทเทียมที่หลากหลายสำหรับการแบ่งส่วนภาพ แต่ทั้งหมดมีโครงสร้างเดียวกัน ในบางแง่ มันคล้ายกับ autoencoder ที่คุณเคยเรียนรู้มาก่อนหน้านี้ แต่แทนที่จะถอดรหัสภาพต้นฉบับ เป้าหมายของเราคือการถอดรหัส **mask** ดังนั้น เครือข่ายการแบ่งส่วนภาพจะมีส่วนประกอบดังนี้:
* **Encoder** สกัดคุณลักษณะจากภาพต้นฉบับ
* **Decoder** แปลงคุณลักษณะเหล่านั้นเป็น **ภาพ mask** ที่มีขนาดและจำนวนช่องสัญญาณเท่ากับจำนวนคลาส
<img src="images/segm.png" width="80%">
> ภาพจาก [งานวิจัยนี้](https://arxiv.org/pdf/2001.05566.pdf)
เราควรกล่าวถึงฟังก์ชันการสูญเสีย (loss function) ที่ใช้สำหรับการแบ่งส่วนภาพเป็นพิเศษ เมื่อใช้ autoencoder แบบดั้งเดิม เราต้องวัดความคล้ายคลึงกันระหว่างภาพสองภาพ และเราสามารถใช้ mean square error (MSE) เพื่อทำเช่นนั้น ในการแบ่งส่วนภาพ แต่ละพิกเซลในภาพ mask เป้าหมายแสดงถึงหมายเลขคลาส (one-hot-encoded ในมิติที่สาม) ดังนั้นเราจำเป็นต้องใช้ฟังก์ชันการสูญเสียที่เฉพาะเจาะจงสำหรับการจำแนกประเภท เช่น cross-entropy loss ที่เฉลี่ยในทุกพิกเซล หาก mask เป็นแบบไบนารี จะใช้ **binary cross-entropy loss** (BCE)
> ✅ การเข้ารหัสแบบ one-hot เป็นวิธีการเข้ารหัสป้ายกำกับคลาสลงในเวกเตอร์ที่มีความยาวเท่ากับจำนวนคลาส ลองดู [บทความนี้](https://datagy.io/sklearn-one-hot-encode/) เกี่ยวกับเทคนิคนี้
## การแบ่งส่วนภาพสำหรับการถ่ายภาพทางการแพทย์
ในบทเรียนนี้ เราจะเห็นการแบ่งส่วนภาพในทางปฏิบัติโดยการฝึกเครือข่ายให้รู้จักเนื้องอกผิวหนัง (หรือที่เรียกว่าขี้แมลงวัน) ในภาพทางการแพทย์ เราจะใช้ <a href="https://www.fc.up.pt/addi/ph2%20database.html">ฐานข้อมูล PH<sup>2</sup></a> ของภาพถ่ายผิวหนังเป็นแหล่งข้อมูลภาพ ฐานข้อมูลนี้มีภาพ 200 ภาพที่แบ่งออกเป็นสามคลาส: เนื้องอกทั่วไป, เนื้องอกผิดปกติ, และมะเร็งผิวหนัง ภาพทั้งหมดมี **mask** ที่ระบุขอบเขตของเนื้องอกด้วย
> ✅ เทคนิคนี้เหมาะสมอย่างยิ่งสำหรับการถ่ายภาพทางการแพทย์ประเภทนี้ แต่คุณสามารถจินตนาการถึงการใช้งานในโลกจริงอื่น ๆ ได้หรือไม่?
<img alt="navi" src="images/navi.png"/>
> ภาพจากฐานข้อมูล PH<sup>2</sup>
เราจะฝึกโมเดลเพื่อแบ่งส่วนเนื้องอกออกจากพื้นหลัง
## ✍️ แบบฝึกหัด: การแบ่งส่วนภาพแบบ Semantic
เปิดโน้ตบุ๊กด้านล่างเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับสถาปัตยกรรมการแบ่งส่วนภาพแบบ Semantic ฝึกการทำงานกับมัน และดูการทำงานจริง
* [Semantic Segmentation Pytorch](SemanticSegmentationPytorch.ipynb)
* [Semantic Segmentation TensorFlow](SemanticSegmentationTF.ipynb)
## [แบบทดสอบหลังเรียน](https://red-field-0a6ddfd03.1.azurestaticapps.net/quiz/212)
## สรุป
การแบ่งส่วนภาพเป็นเทคนิคที่ทรงพลังมากสำหรับการจำแนกภาพ โดยก้าวข้ามกรอบสี่เหลี่ยมไปสู่การจำแนกในระดับพิกเซล เป็นเทคนิคที่ใช้ในภาพทางการแพทย์และการใช้งานอื่น ๆ
## 🚀 ความท้าทาย
การแบ่งส่วนร่างกายเป็นหนึ่งในงานทั่วไปที่เราสามารถทำได้กับภาพของมนุษย์ งานสำคัญอื่น ๆ รวมถึง **การตรวจจับโครงกระดูก** และ **การตรวจจับท่าทาง** ลองใช้ไลบรารี [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) เพื่อดูว่าการตรวจจับท่าทางสามารถนำไปใช้ได้อย่างไร
## การทบทวนและการศึกษาด้วยตนเอง
บทความ [Wikipedia นี้](https://wikipedia.org/wiki/Image_segmentation) ให้ภาพรวมที่ดีเกี่ยวกับการใช้งานต่าง ๆ ของเทคนิคนี้ เรียนรู้เพิ่มเติมด้วยตัวเองเกี่ยวกับสาขาย่อยของ Instance segmentation และ Panoptic segmentation ในการศึกษานี้
## [การบ้าน](lab/README.md)
ในห้องปฏิบัติการนี้ ลอง **การแบ่งส่วนร่างกายมนุษย์** โดยใช้ [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) จาก Kaggle
---
**ข้อจำกัดความรับผิดชอบ**:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษาจากผู้เชี่ยวชาญที่เป็นมนุษย์ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้