1 อธิบาย
โมเดลเชื่อได้เฉพาะช่วงค่าที่มันเคยเห็น นอกช่วงนั้นมันเดา และเดาผิดได้มาก loss ตอนเทรนจึงบอกแค่ว่ามันเข้ากับตัวอย่างดีแค่ไหน ไม่ได้บอกว่าใช้กับทั้งช็อตได้
grade ในบทนี้เป็นเส้นโค้ง (contrast) ไม่ใช่เส้นตรง และโมเดลเป็น neural net จิ๋ว (3 → 8 → 3) ลองเทรนด้วยพื้นกับหินก่อน ดู error map ที่ท้องฟ้า แล้วเพิ่ม patch และเทรนใหม่
2 ลงมือลอง
โจทย์: เลือก patch แล้วเทรนจน error ทั้งเฟรมต่ำกว่า 0.012
เปลี่ยน patch = เริ่มเทรนใหม่จากศูนย์ เหมือนเปลี่ยน dataset
3 เจาะลึก
โมเดลเชื่อได้เฉพาะที่เคยเห็น
ระหว่างค่าที่อยู่ใน dataset โมเดลมักเติมช่องว่างได้ดี (interpolation) แต่เกินขอบของ dataset ไป มันต้องเดาต่อออกไป (extrapolation) ซึ่งผิดได้มาก ในบทเรียน ทรายกับหินเป็นสีอุ่นและมืด ช่องน้ำเงินไม่เกินราว 0.18 ส่วนท้องฟ้าที่มีเมฆมีน้ำเงินถึงราว 0.27 เทรนแต่พื้น แล้วท้องฟ้าจึงพัง
| สิ่งที่ dataset ควรครอบคลุม | ตัวอย่างในช็อต |
|---|---|
| ช่วงความสว่าง | เฟรมในเงาและเฟรมที่โดนแดด |
| สีและแสง | ไฟเปลี่ยนสี, ไฟกระพริบ |
| ท่าทางและมุม | หันหน้า หันข้าง ก้ม |
| ขนาดในเฟรม | ไกลกล้องและใกล้กล้อง |
| motion blur และ focus | ช่วงที่เคลื่อนเร็วหรือหลุดโฟกัส |
เลือกเฟรมแบบไหน
ไล่ดูทั้งช็อตก่อน หาเฟรมที่ "ต่างกันที่สุด" ไม่ใช่เฟรมที่ทำง่ายที่สุด เฟรมติดกันมักหน้าตาเกือบเหมือนกัน ให้ข้อมูลใหม่น้อย
เริ่มจากไม่กี่เฟรมที่กระจาย เทรนแล้วดูผลทั้งช็อต เฟรมไหนพังก็ซ่อมมือเฟรมนั้นแล้วเพิ่มเข้า dataset วนแบบนี้จนผ่าน แต่กันเฟรมที่ซ่อมมือแล้ว 2–3 เฟรมไว้นอก dataset เป็นเฟรมเช็ก (ดู AI3)
- 1ไล่ดูทั้งช็อต
- 2เลือกเฟรมที่ต่างกันที่สุด
- 3เทรน
- 4Inference ทั้งช็อต
- 5เฟรมพัง → เพิ่มเข้า dataset
เฟรมที่โมเดลพัง คือ dataset ของรอบถัดไป
loss ต่ำ แต่ภาพพัง
ในบทเรียน ตอนเทรนด้วยพื้นกับหิน loss ลงไปต่ำกว่า 10⁻⁶ แต่ error ทั้งเฟรมยังราว 0.017 หรือราว 1.4 เท่าของเป้า และในท้องฟ้าสูงถึงราว 0.038 loss วัดเฉพาะบนตัวอย่าง จึงต้องดูภาพผลบนเฟรมที่ไม่ได้อยู่ใน dataset เสมอ
4 ในงานจริง
ทำใน Nuke
- ไล่ดูทั้งช็อตใน Viewer จดเฟรมที่แสง สี ท่าทาง หรือขนาดต่างกันที่สุด
- ใช้ FrameHold ดึงแต่ละเฟรมที่เลือกออกมาซ่อมมือ แล้วรวมด้วย AppendClip ทั้งฝั่ง Input และ Ground Truth
- เทรน CopyCat แล้วรัน Inference ทั้งช็อต ไล่หาเฟรมที่พัง
- ซ่อมเฟรมที่พังเพิ่ม ต่อเข้า AppendClip แล้วเทรนใหม่ (เว้นเฟรมเช็ก 2–3 เฟรมไว้นอก AppendClip)
พลาดบ่อย → แก้ยังไง
- ✗ เลือกเฟรมติดกันช่วงต้นช็อตเพราะทำง่าย✓ กระจายเฟรมให้ทั่วช็อต เลือกที่ต่างกันที่สุด
- ✗ เห็น loss ต่ำแล้วส่งงานเลย✓ Inference ทั้งช็อตแล้วดูทุกช่วง โดยเฉพาะช่วงที่ไม่มีใน dataset
- ✗ เทรนให้นานขึ้นเพื่อแก้เฟรมที่ไม่มีใน dataset✓ เพิ่มเฟรมแบบนั้นเข้า dataset แทน เทรนนานขึ้นไม่ได้ข้อมูลใหม่
เช็กก่อนส่งช็อต
- dataset ครอบคลุมช่วงสว่างสุดและมืดสุดของช็อต
- มีเฟรมจากต้น กลาง และท้ายช็อต
- มีตัวอย่างของท่าทาง มุม และ motion blur ที่ต่างกัน
- ดูผล Inference บนเฟรมที่ไม่ได้อยู่ใน dataset แล้ว
5 เช็กตัวเอง
เทรนแล้ว loss ต่ำมาก แต่บางเฟรมในช็อตพัง ควรสงสัยอะไรก่อน
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. ช็อตนักแสดงเดินจากในร่มออกไปกลางแดด ซ่อมมือ 6 เฟรมแรกในร่ม ผลน่าจะเป็นยังไง
2. ควรเพิ่มเฟรมไหนเข้า dataset ในรอบถัดไป
ตัวเลขมาจากไหน: neural net 3 → 8 → 3 (tanh) เทรนด้วย Adam จริงบน patch ขนาด 16×16 เก็บตัวอย่างทุก 2 พิกเซล (64 คู่พิกเซลต่อ patch) error ทั้งเฟรมวัดทุก 2 พิกเซลเทียบ grade ที่เราซ่อนไว้ (contrast รอบ 0.18 ยกกำลัง 1.4 กับ tint อุ่น) ในงานจริงเราไม่มี "grade จริง" ให้เทียบทั้งเฟรม ต้องดูด้วยตาและเทียบกับเฟรมที่ทำมือ