หน้าแรก · Lab · AI ในงาน comp: แนวคิด CopyCat

AI2 เลือกเฟรมเทรน: ข้อมูลต้องครอบคลุม

เทรนแต่ส่วนมืด แล้วโมเดลพังที่ท้องฟ้า

AI ในงาน comp: แนวคิด CopyCat · ~7 นาที · ฟรี

1 อธิบาย

โมเดลเชื่อได้เฉพาะช่วงค่าที่มันเคยเห็น นอกช่วงนั้นมันเดา และเดาผิดได้มาก loss ตอนเทรนจึงบอกแค่ว่ามันเข้ากับตัวอย่างดีแค่ไหน ไม่ได้บอกว่าใช้กับทั้งช็อตได้

grade ในบทนี้เป็นเส้นโค้ง (contrast) ไม่ใช่เส้นตรง และโมเดลเป็น neural net จิ๋ว (3 → 8 → 3) ลองเทรนด้วยพื้นกับหินก่อน ดู error map ที่ท้องฟ้า แล้วเพิ่ม patch และเทรนใหม่

2 ลงมือลอง

โจทย์: เลือก patch แล้วเทรนจน error ทั้งเฟรมต่ำกว่า 0.012

เปลี่ยน patch = เริ่มเทรนใหม่จากศูนย์ เหมือนเปลี่ยน dataset

SkyVFX Lab · AI2interactive · 1001

3 เจาะลึก

โมเดลเชื่อได้เฉพาะที่เคยเห็น

ระหว่างค่าที่อยู่ใน dataset โมเดลมักเติมช่องว่างได้ดี (interpolation) แต่เกินขอบของ dataset ไป มันต้องเดาต่อออกไป (extrapolation) ซึ่งผิดได้มาก ในบทเรียน ทรายกับหินเป็นสีอุ่นและมืด ช่องน้ำเงินไม่เกินราว 0.18 ส่วนท้องฟ้าที่มีเมฆมีน้ำเงินถึงราว 0.27 เทรนแต่พื้น แล้วท้องฟ้าจึงพัง

สิ่งที่ dataset ควรครอบคลุมตัวอย่างในช็อต
ช่วงความสว่างเฟรมในเงาและเฟรมที่โดนแดด
สีและแสงไฟเปลี่ยนสี, ไฟกระพริบ
ท่าทางและมุมหันหน้า หันข้าง ก้ม
ขนาดในเฟรมไกลกล้องและใกล้กล้อง
motion blur และ focusช่วงที่เคลื่อนเร็วหรือหลุดโฟกัส

เลือกเฟรมแบบไหน

ไล่ดูทั้งช็อตก่อน หาเฟรมที่ "ต่างกันที่สุด" ไม่ใช่เฟรมที่ทำง่ายที่สุด เฟรมติดกันมักหน้าตาเกือบเหมือนกัน ให้ข้อมูลใหม่น้อย

เริ่มจากไม่กี่เฟรมที่กระจาย เทรนแล้วดูผลทั้งช็อต เฟรมไหนพังก็ซ่อมมือเฟรมนั้นแล้วเพิ่มเข้า dataset วนแบบนี้จนผ่าน แต่กันเฟรมที่ซ่อมมือแล้ว 2–3 เฟรมไว้นอก dataset เป็นเฟรมเช็ก (ดู AI3)

  1. 1ไล่ดูทั้งช็อต
  2. 2เลือกเฟรมที่ต่างกันที่สุด
  3. 3เทรน
  4. 4Inference ทั้งช็อต
  5. 5เฟรมพัง → เพิ่มเข้า dataset

เฟรมที่โมเดลพัง คือ dataset ของรอบถัดไป

loss ต่ำ แต่ภาพพัง

ในบทเรียน ตอนเทรนด้วยพื้นกับหิน loss ลงไปต่ำกว่า 10⁻⁶ แต่ error ทั้งเฟรมยังราว 0.017 หรือราว 1.4 เท่าของเป้า และในท้องฟ้าสูงถึงราว 0.038 loss วัดเฉพาะบนตัวอย่าง จึงต้องดูภาพผลบนเฟรมที่ไม่ได้อยู่ใน dataset เสมอ

4 ในงานจริง

ทำใน Nuke

  1. ไล่ดูทั้งช็อตใน Viewer จดเฟรมที่แสง สี ท่าทาง หรือขนาดต่างกันที่สุด
  2. ใช้ FrameHold ดึงแต่ละเฟรมที่เลือกออกมาซ่อมมือ แล้วรวมด้วย AppendClip ทั้งฝั่ง Input และ Ground Truth
  3. เทรน CopyCat แล้วรัน Inference ทั้งช็อต ไล่หาเฟรมที่พัง
  4. ซ่อมเฟรมที่พังเพิ่ม ต่อเข้า AppendClip แล้วเทรนใหม่ (เว้นเฟรมเช็ก 2–3 เฟรมไว้นอก AppendClip)

พลาดบ่อย → แก้ยังไง

  • ✗ เลือกเฟรมติดกันช่วงต้นช็อตเพราะทำง่าย✓ กระจายเฟรมให้ทั่วช็อต เลือกที่ต่างกันที่สุด
  • ✗ เห็น loss ต่ำแล้วส่งงานเลย✓ Inference ทั้งช็อตแล้วดูทุกช่วง โดยเฉพาะช่วงที่ไม่มีใน dataset
  • ✗ เทรนให้นานขึ้นเพื่อแก้เฟรมที่ไม่มีใน dataset✓ เพิ่มเฟรมแบบนั้นเข้า dataset แทน เทรนนานขึ้นไม่ได้ข้อมูลใหม่

เช็กก่อนส่งช็อต

  • dataset ครอบคลุมช่วงสว่างสุดและมืดสุดของช็อต
  • มีเฟรมจากต้น กลาง และท้ายช็อต
  • มีตัวอย่างของท่าทาง มุม และ motion blur ที่ต่างกัน
  • ดูผล Inference บนเฟรมที่ไม่ได้อยู่ใน dataset แล้ว

5 เช็กตัวเอง

เช็กตัวเอง 1 ข้อ

เทรนแล้ว 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 จริง" ให้เทียบทั้งเฟรม ต้องดูด้วยตาและเทียบกับเฟรมที่ทำมือ