Dairy

[Dairy] 6 weeks internship as AI Model Developer

บอกเล่าประสบการณ์การไปฝึกงานในฐานะAI Model Developer

Cover Intern

โปรเจคนี้เกิดจากการมาฝึกงานที่Singapodent Digitalที่ประเทศเวียดนามโดยMVPของโปรเจคนี้คือทำAiสำหรับplotจุดlandmarkบนภาพx-rayฟัน 2 มิติ(Cephalogram image — ในเนื้อหานี้จะเขียนย่อเหลือแค่ceph) และนำไปแสดงผลเป็นdashboard และหากมีเวลาเหลือจะมีการแสดงผลลัพท์ การวัดต่างๆตามที่คลินิกต้องการอีกที โดยการฝีกงานเป็นระยะเวลาทั้งหมด 6 สัปดาห์

โดยช่วงก่อนเริ่มผมได้ไปเทคคอร์ส AI for Medical Diagosis ประมาณ1สัปดาห์ก่อนเริ่มงาน ถึงแม้จะเรียนไม่จบ😅 เนื่องจากเนื้อหาหลังๆไม่ได้สอดคล้องกับงานที่ทำขนาดนั้น แต่ก็ทำให้ได้รู้ถึงการจัดการDataในมุมMedical รวมถึงปัญหาต่างๆที่มักจะเจอในMedical field


Week 1: ผมบินถึง HCMC วันที่ 2026–04–26 ซึ่งอาทิตย์แรกด้วยความที่อาทิตย์นี้เป็นเหมือนวันหยุดใหญ่ของเวียดนาม (วันกษัตริย์หุ่ง, วันปลดปล่อย-วันรวมประเทศ, วันแรงงาน, วันชาติ) เลยได้แค่เข้าคลินิคไปรวบรวมข้อมูล พูดคุยกับsupervisorที่คุมงาน ทำLiterature reviewและวางแผนสำหรับงาน โดยตอนแรกที่คุยกับsupervisorผมคาดว่าจะมีdataประมาณ 500–600 ซึ่งถือว่าปานกลางสำหรับโจทย์ของผม

หลักๆของอาทิตย์แรกคือการศึกษาและทำความเข้าใจฝั่งOrthondotistเช่นการtracing หรือtoolที่หมอมักใช้ในปัจจุบันเช่น Webceph




Week 2: วันแรกของอาทิตย์นี้มีการประชุมอีกรอบและสรุปภาพรวมของโปรเจค ซึ่งมีการเปลี่ยนแปลงเล็กน้อยที่scopeงานเล็กลง โดยสรุปงานที่ผมต้องทำทั้งหมดคือ

  1. Setup Cvat Local สำหรับให้Orthotontistเข้ามาannotation dataเพราะdataปัจจุบันยังเป็นraw data (มีหมอ3–4คน ซึ่งversion onlineที่ใช้ฟรีใช้ได้แค่2คน)
  2. สร้างmodelสำหรับ

Landmark Detection (10จุด)

  • - Upper_tip X
  • - Upper_ape
  • - Labial_midroot
  • - Palatal_midroot
  • - Labial_crest
  • - Palatal_crest
  • - PNS แกนnormal อยู่ด้านใน X
  • - ANS แกนnormal X
  • - Palatal Bone
  • - Labial Bone

Segmentation (3 class)

  • - Upper incisor
  • - Labial cortical bone
  • - Palatal cortical bone

3. คำนวณผลที่คลินิกต้องการ รวมถึงเอาไปทำclassification ไม่ว่าจะเป็นการวัดแต่ละพาร์ทของกระดูกกับฟันเพื่อนำระยะห่างไปclassification (Bone Thickness) การเอียงของฟัน และอื่นๆ~

4. นำผลลัพท์ที่ได้ไปแสดงผลเป็นdashboard

โดยสุดท้ายผมได้dataมาทั้งหมด 382 ภาพ ในวันพุธที่ 2026–05–27 ซึ่งถือว่าค่อนข้างน้อยถ้ามองในมุมงานการแพทย์ที่ต้องการความแม่นยำสูง หลักๆที่ผมทำอาทิตย์แรกคือsetup cvatและสอนหมอแต่ละคนใช้cvatสำหรับannotation รวมถึงตัวหมอเองแต่ละคนที่ค่อนข้างยุ่งเนื่องจากคลินิกคนไข้เข้ามาปกติ



Week 3–4: อาทิตย์นี้เป็นอาทิตย์ที่ค่อนข้างชิว เนื่องจากยังไม่ได้dataจากหมอสิ่งที่ผมทำไปได้แก่

  1. เตรียมdata pipelineทั้งหมด ประกอบด้วย
  • Calibrate จากpixel -> mm เพื่อการวัดค่า
  • Data Augmentation (ไม่หันภาพซ้ายขวาเนื่องจากงานจริงเป็นภาพxrayที่กระโหลกหันขวาตลอด)

2. เตรียมpipeline สำหรับtrain model

  • ผมเลือกใช้HRNet-W32ซึ่งเป็นpretrain modelที่นิยมในงานceph
  • เลือกใช้loss fucntion เป็น adaptive wing loss เนื่องจากภาพcephส่วนที่เราโฟกัสจริงๆคือฟันซึ่งเป็นแค่ส่วนเล็กๆในภาพ ทำให้การทำlandmark detectแม่นยำขึ้น

3. เตรียมการสำหรับการวัดฟัน ซึ่งlogicในการวัดส่วนใหญ่ไม่ได้มีอะไรมาก ถ้าเราสามารถแปลงจากpixelเป็นmmได้แม่นยำ และโมเดลเราทำงานได้ดี

อาทิตย์ที่3มีการdiscussกันเล็กน้อยเรื่องการวัดbone thicknessว่า เราควรวัดยังไง อย่างคลินิกก็มีวิธีวัดของเค้า แต่ผมเองก็ไปเจอreportที่ใช้อีกแบบนึง แต่สุดท้ายก็จบด้วยทำทั้ง2วิธีไปเลย

4. ทำwebapสำหรับshow dashboard โดยversionแรกหมอต้องการแค่ให้show dashboard แต่เนื่องจากmodelของเราอาจไม่ได้แม่นมาก เลยเพิ่มฟีเจอร์สำหรับการeditจุดต่างๆที่modelเราplotให้ได้ด้วย ซึ่งจุดนี้เป็นงานที่ผมไม่ถนัดสุดๆเลยใช้Generative Aiอย่าง Sonnet 4.6 มาช่วยด้วย

ซึ่งช่วงท้ายๆของweek3ผมมีdataบ้างแล้วประมาณ 92 ภาพ ซึ่งก็ได้เอามาลองtrainแล้วแต่เนื่องจากภาพน้อยมาก จึงแทบใช้วัดผลอะไรไม่ได้มาก




Week 5: อาทิตย์นี้เรียกว่าเป็นช่วงที่เดือดสุดๆ ผมจำได้ดีเลยว่าผมได้dataที่annotateทั้งหมดตอนวันที่ 2026–05–25 ตอน2ทุ่ม แต่ประเด็นคือมันจะมีบางภาพที่คุณภาพไม่ถึง หรือเห็นไม่ชัดเนื่องจากมีวัติถุอื่นบังทำให้ภาพที่ใช้ได้จริงๆมีประมาณ 27X ภาพ (Quality Reject)

เรียกว่ารีบเร่งเครื่องสุดๆ สำหรับการtrain โดยรวมการtrainใช้เวลาค่อนข้างนาน ลองผิดลองถูกผลสุดท้ายก่อนจบอาทิตย์นี้คือ ตัวlandmark detectที่ใช้HRNet-W32มาpretrainทำ MREไปได้ 1.72mm ซึ่งถือว่าค่อนข้างสูง ในขณะที่segmentation modelซึ่งใช้Deeplabสำหรับpretrainทำได้ไม่ดีมากแต่เนื่องจากระบบสามารถeditจุดได้ จึงคิดว่าอย่างน้อยแค่ช่วยประหยัดเวลาหมอนิดนึงก็ยังพอได้

แต่สุดท้ายเอาไปส่งเรียกว่ามีสิ่งที่ต้องแก้เยอะมาก ทั้งrequirementเรียกว่าโดนแก้ยับ ความแม่นยำของโมเดลที่ไม่ถูกใจเท่าไหร่ เนื่องจากเรามี2 modelทำงานพร้อมกัน และผลลัพท์มันต้องrelateกัน ประเด็นแรกคือก่อนหน้านี้ผมได้ทำpre-prosessingที่ทำให้จุดlandmarkกับsegmentationที่วงได้ ไม่เหลือบกัน ซึ่งการเป็นว่าระบบนี้สร้างปัญหาให้กับความแม่นยำ รวมถึงความยากของหมอที่จะต้องแก้ ทำให้ทุกอย่างต้องมาจบที่อาทิตย์สุดท้าย




Week 6: ช่วงเวลานั้นผมค้นหาmodelท๊อปที่ขึ้นชื่อมาลองหมดแต่ก็แทบไม่มีโมเดลไหนที่มีท่าทีจะใช้ได้เนื่องจากmodelส่วนใหญ่เป็นtransformerแต่dataที่เรามีจำกัดมากทำให้ทำงานได้ดีไม่เท่าที่ควร สุดท้ายจบที่

YOLOv12-pose

ว่ากันตามตรงถ้ามองในมุมการวิจัยผมคิดว่าสิ่งที่ผมทำในอาทิตย์สุดท้ายค่อนข้างผิดหลักวิชาการหลายจุด เนื่องด้วยเวลาที่จำกัด ผมใช้YOLOสำหรับการcropภาพให้ไปโฟกัสแค่ที่ฟันเพื่อให้modelต่างๆสามารถโฟกัสไปแค่ที่ฟันอย่างเดียวไม่ต้องสนbackgroundโดยสำหรับlandmarkผมใช้ HRNet-W32เหมือนเดิมแต่เพิ่มepochในการtrain MREที่ทำได้อยู่ที่ 1.62 mm รวมถึงผมใช้ K-fold validation (K=5) ผมจึงนำทั้ง5modelมาทำensembleด้วย แต่เนื่องจากขั้นตอนการตรงนี้พึ่งคิดได้ทีหลัง ผมจึงไม่มีdataสำหรับtestผลลัพท์ได้ และsegmentationผมเปลี่ยนมาใช้nnU-Net ซึ่งได้Diceถึง 0.83 และแน่นอนว่าจับมาทำensembleเหมือนเดิม

ที่ผมทำทั้งหมดนี้ผ่านไปแปปๆก็ถึงวันศุกร์ที่ 2026–06–05 ใช่ครับวันสุดท้ายของการฝึกงาน เรียกว่าปั่นทุกอย่างและแน่นอนว่าถ้าขาดaiช่วยก็คงสาหัสอย่างมาก

โดยรวมการฝึกงานครั้งนี้ด้วยข้อจำกัดต่างๆ ผมคิดว่าผมยังทำได้ไม่เต็มที่ทั้งเรื่องด้วยเวลา ข้อมูล และสภาพแวดล้อม แต่ผมก็ได้ประสบการณ์อย่างมากในการมาทำงานในฝั่งcomputer visionครั้งแรก ขอบคุณอาจารย์ แพทย์ (Orthodontist) และทุกคนในบริษัทSingdentที่ให้ผมได้รับประสบการณ์ครั้งนี้

Read the next thing.

New articles, projects, Interactive Labs, and occasional professional or site announcements, primarily in Thai, with no more than one routine email a week.

Double opt-in. Unsubscribe anytime. Your address is never sold or shared for third-party marketing. Privacy