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

AI6 อ่านผลลัพธ์: difference, flicker และ QC

loss ดีไม่ได้แปลว่าทุกเฟรมดี

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

1 อธิบาย

Inference ประมวลผลทีละเฟรมแยกกัน โมเดลไม่รู้ว่าเฟรมก่อนหน้าออกมาเป็นยังไง ผลจึงกระพริบ (flicker) ข้ามเฟรมได้ แม้ดูทีละภาพจะดูดี และโมเดลอาจไปแตะพิกเซลที่ไม่ควรแตะ

เครื่องมือ QC: output − input บอกว่าโมเดลเปลี่ยนอะไรไปบ้าง output − เฟรมก่อน บอกการกระพริบ และกราฟค่าเฉลี่ยของบริเวณที่แก้บอกว่าเฟรมไหนกระโดด ดัน gain ขึ้นให้เห็นชัด

2 ลงมือลอง

โจทย์: หา 3 เฟรมที่ไม่ผ่าน QC แล้วปักธงเฉพาะ 3 เฟรมนั้น

บทนี้ไม่มีโมเดลจริง ผลลัพธ์จำลองให้มีปัญหา 3 แบบที่พบบ่อย

SkyVFX Lab · AI6interactive · 1001

3 เจาะลึก

ทำไมผล ML ต้อง QC ต่างจากเดิม

Inference ประมวลผลแต่ละเฟรมแยกกัน ไม่มีความจำข้ามเฟรม ความนิ่งข้ามเวลาจึงขึ้นกับว่าโมเดลเทรนมาดีพอแค่ไหน เฟรมที่ input ต่างไปเล็กน้อยอาจได้ผลต่างกันมาก

ปัญหาที่พบบ่อยมีสามแบบ: แก้ไม่หมดบางเฟรม, ผลกระพริบ, และไปแตะส่วนที่ไม่ควรแตะ ทั้งสามแบบมองยากถ้าดูแค่ภาพนิ่ง

ปัญหาเครื่องมือที่จับได้
แก้ไม่หมดOutput ที่ gain สูง, output − input
flickeroutput − เฟรมก่อน, plot ตามเวลา, เล่นต่อเนื่อง
แตะส่วนที่ไม่ควรแตะoutput − input ทั้งเฟรม
grain หายในบริเวณที่แก้output − เฟรมก่อน (บริเวณนั้นนิ่งสนิท)

อ่านภาพ difference

output − input ที่ดีควรมีแค่รูปของสิ่งที่ตั้งใจลบ ที่เหลือดำสนิท ถ้ามีรอยที่อื่น โมเดลไปแตะส่วนนั้น ถ้ารูปของสิ่งที่ลบจางลงในบางเฟรม แปลว่าเฟรมนั้นแก้ไม่หมด

ค่าต่างกันมักเล็กมาก ต้องดัน gain ของ Viewer หรือคูณค่าให้เห็นชัด แยกสีบวกกับลบ จะรู้ว่าสว่างขึ้นหรือมืดลง

difference ที่ดี = ดำทั้งภาพ ยกเว้นตรงที่ตั้งใจแก้

จับ flicker ด้วยเวลา

flicker คือการเปลี่ยนข้ามเวลา จึงต้องเทียบข้ามเฟรม: เล่นต่อเนื่องด้วยความเร็วจริง, ดูผลต่างกับเฟรมก่อน, หรือวัดค่าเฉลี่ยของบริเวณที่แก้ทุกเฟรมแล้ว plot เป็นกราฟ เฟรมที่กระโดดออกจากเส้นคือเฟรมที่ต้องเก็บ

  1. 1เล่นต่อเนื่อง
  2. 2output − เฟรมก่อน
  3. 3plot ค่าเฉลี่ยตามเวลา
  4. 4เฟรมที่กระโดด → เก็บ

4 ในงานจริง

ทำใน Nuke

  1. Merge ตั้ง operation เป็น difference (หรือ minus เพื่อเก็บเครื่องหมาย) ระหว่างผล Inference กับ plate input แล้วดันค่า gain ใน Viewer
  2. ผลต่างข้ามเฟรม: ใช้ TimeOffset +1 กับผล Inference (ได้เฟรมก่อนหน้า) แล้ว Merge (difference) กับผล Inference ที่ไม่ได้ offset
  3. plot ตามเวลา: CurveTool แบบ Avg Intensities บนบริเวณที่แก้ แล้วดูเส้นกราฟใน Curve Editor
  4. จำกัดผลเฉพาะบริเวณที่แก้ด้วย Keymix กับ mask และใส่ grain กลับก่อนส่ง

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

  • ✗ QC จากภาพนิ่งทีละเฟรม✓ เล่นต่อเนื่องและดู difference ข้ามเฟรม flicker เห็นได้เฉพาะเมื่อเทียบข้ามเวลา
  • ✗ ดูเฉพาะบริเวณที่แก้✓ ดู output − input ทั้งเฟรม โมเดลอาจแตะส่วนอื่นด้วย
  • ✗ ส่งงานโดยไม่ใส่ grain กลับในบริเวณที่โมเดลเติม✓ บริเวณที่เรียบจะดูนิ่งผิดปกติ ใส่ grain ให้เข้ากับ plate
  • ✗ คิดว่า loss ต่ำแปลว่าทุกเฟรมผ่าน (ดู AI2)✓ loss วัดบน dataset เท่านั้น ผลทั้งช็อตต้องตรวจเอง

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

  • ดู output − input ทั้งเฟรม ไม่มีรอยนอกบริเวณที่แก้
  • เล่นต่อเนื่องที่ความเร็วจริง ไม่มี flicker
  • plot ค่าเฉลี่ยบริเวณที่แก้ตามเวลา ไม่มีเฟรมกระโดด
  • grain ในบริเวณที่แก้เข้ากับ plate
  • เฟรมที่พลาดถูกเก็บมือหรือกลับไปเพิ่มใน dataset

5 เช็กตัวเอง

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

วิธีไหนจับ flicker ของงาน ML ได้ดีที่สุด

สิ่งที่ได้เรียน

🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด

คำถามเพิ่ม

1. ใน output − input มีรอยสี่เหลี่ยมจาง ๆ บนพื้น ห่างจาก marker ที่ลบ แปลว่าอะไร

2. plot ค่าเฉลี่ยบริเวณที่แก้แล้วเห็นเฟรมหนึ่งสูงกว่าเพื่อนชัดเจน ขณะที่บริเวณเดียวกันบน plate input นิ่ง ปัญหาคืออะไร

ตัวเลขมาจากไหน: ผลลัพธ์จำลอง: เราใส่ปัญหาลงไปเอง 3 จุด (marker เหลือ, fill สว่างขึ้นเฟรมเดียว, ภาพเสียนอกบริเวณที่แก้) บน crop ของ plate จาก Blender พร้อม grain ที่สร้างด้วยโค้ด ไม่มีการเทรนในบทนี้ ข้อเท็จจริงที่ว่า Inference ประมวลผลทีละเฟรมมาจากคู่มือ CopyCat ในคลังความรู้ของเรา