DeepFake Detection : สร้างโมเดลตรวจสอบวิดิโอ “ปลอม” บนรางวัล 1 ล้านเหรียญ (Updated เมษายน 2020: ThaiKeras ได้อันดับ 29 ของโลกจาก 2,265 ทีม)  

  RSS
The Neural Engineer
(@neural-engineer)
Boltzmann Machine
ชิงรางวัล 1 ล้านเหรียญบนการแข่งขัน Kaggle DeepFake Detection
UPDATED : 26 เมษายน 2563 ทีมของเราได้อันดับ 29 ของโลก และแชร์ไอเดียหลักๆ ด้านโพสต์ด้านล่างครับ
 
 
ด้วยเทคโนโลยีปัจจุบัน เราไม่สามารถเชื่อถือวิดิโอ หรือคลิปต่างๆ ที่เผยแพร่ทาง internet ได้อีกต่อไป การสร้างวิดีโอปลอมให้คนดังต่างๆ ออกมาพูดจาหยาบคายเพื่อทำลายชื่อเสียงกลายเป็นเรื่องที่ทำได้ไม่ยากด้วยเทคโนโลยี AI ที่เรียกว่า “DeepFake”
  ตัวอย่าง DeepFake ของบารัค โอบามา

 

เทคโนโลยีนี้ถ้าใช้ผิดวิธีจะเป็นเครื่องมือร้ายที่สร้างความเกลียดชัง และสามารถทำให้สังคมมนุษย์แตกแยกและแตกตื่นได้ ด้วยเหตุนี้บริษัทระดับโลกอย่าง Google, Facebook และ Amazon จึงได้ร่วมมือกันอย่างจริงจังที่จะสร้างโปรแกรม AI อีกประเภทหนึ่งเพื่อตรวจสอบรูปภาพและวิดีโอต่างๆ ว่าเป็น “ของจริงหรือไม่”
 
นอกจากนี้ทั้งสามบริษัทยังได้ร่วมกันจัดการแข่งขัน “DeepFake Detection” สำหรับบุคคลทั่วไปเพื่อชิงรางวัลมูลค่าหนึ่งล้านเหรียญอีกด้วยบน Kaggle ครับ ซึ่งพวกเราทุกคนสามารถเข้าร่วมเพื่อเรียนรู้ไปกับนักวิจัยทั่วโลกได้พร้อมๆ กันที่นี่ครับ
 
 
โดยการแข่งขันครั้งนี้จะมีข้อมูลเป็นคลิปวิดิโอทั้งจริงและปลอมแสนกว่าคลิป (เก็บในรูปแบบ mp4 ขนาดทั้งหมดราวๆ 500 GB) แต่ละคลิปยาวประมาณ 10 วินาที ซึ่งกติกาก็คือให้ผู้เข้าแข่งขันสร้างโมเดลเพื่อทำนายว่าคลิปที่เห็นนั้นเป็น “คลิปจริง” หรือ “คลิปปลอม” ครับ
 
โดยนอกจากผู้เข้าแข่งขันจะสามารถใช้ Kaggle virtual machine ที่ปัจจุบันมีทัั้ง GPU และ TPU ได้ฟรีแล้วยังสามารถขอทุนจาก Amazone AWS ได้อีกด้วยครับ (ดูเงื่อนไขในลิงก์ข้างบน)
 
ในการแข่งขันจะมีทั้ง Notebooks เริ่มต้นที่เพื่อนๆ สามารถเริ่มสร้างโมเดลต่อยอดได้ทันที รวมทั้งมี Forums เพื่อพูดคุยและเลกเปลี่ยนความรู้กับผู้เข้าร่วมแข่งขันอื่นๆ จากทั่วโลกอีกด้วยครับ ซึ่งเป็นโอกาสทองอย่างมากที่เราจะได้เรียนรู้ทักษะด้าน AI จากคนเก่งๆ ทั่วโลกในปัญหาที่ท้าทายมากๆ อันนี้ครับ
 
การแข่งขันจะสิ้นสุดในเช้าวันที่ 2 เมษายน ตามเวลาประเทศไทยถ้าพร้อมแล้วขอเชิญคลิ้กเข้าไปศึกษาความรู้กันได้เลยคร้าบ
-----

 

 
อ้างอิง
Posted : 19/02/2020 1:06 pm
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ตัวอย่างการใช้ DeepFake ในแง่สร้างสรรค์

https://www.smartsme.co.th/content/233242

ตอบกลับอ้างอิง
Posted : 20/02/2020 6:00 pm
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ตัวอย่าง Video DeepFake ในการแข่งขัน credit ให้เจ้าของ channel youtube คร้าบ

ตอบกลับอ้างอิง
Posted : 29/02/2020 9:41 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ไอเดียการสร้างสร้างโมเดล “Face Forensic” เพื่อจำแนก DeepFake Video 

สวัสดีครับเพื่อนๆ ในคราวก่อนเราได้พูดถึงเรื่องการแข่งขัน DeepFake ซึ่งเราต้องสร้างโมเดลเพื่อตรวจจับ วิดิโอปลอม ที่มีการเปลี่ยนใบหน้าหรือคำพูดของผู้อยู่ในวิดิโอ  

จากที่ได้แลกเปลี่ยนความรู้กับเพื่อนๆ บน Kaggle พบว่า ในงานนี้คนส่วนใหญ่ออกแบบโมเดลบนแนวคิดพื้นฐานที่เรียกว่า “Face Forensic” หรือการ ชันสูตรใบหน้า นั่นเองครับ ไอเดียของ Face Forensic นั้นเรียบง่ายแต่ทรงพลังครับ นั่นคือ ในภาพวิดิโอทั้งหมดนั้น เนื่องจากส่วนที่เปลี่ยนแปลงจะอยู่บนใบหน้าของผู้พูดในวิดิโอเป็นหลักเท่านั้น ดังนั้น แทนที่เราจะให้ input ของโมเดลเป็นภาพทั้งหมดบนวิดิโอ วิธีการ Face Forensic นี้จะใช้โมเดล “Face Detection” เพื่อจับภาพเฉพาะใบหน้าขึ้นมาก่อน แล้วค่อยให้โมเดลเรียนรู้ว่าใบหน้านี้จริงหรือปลอม  

ไอเดีย Face Forensic ง่ายๆ นี้พบว่าสามารถเพิ่มความแม่นยำของการใส่ input ลงไปทั้งภาพถึง 10-20% เลยทีเดียว (ดูอ้างอิง 1) 

สำหรับการเรียกใช้ Face Detection นั้นสามารถเรียกใช้โมดูลใดๆ ที่มีอยู่แล้วได้ทันที ตัวอย่างหนึ่งคือ MTCNN (Multi-Task Cascaded Convolutional Networks) ซึ่งเป็นโมเดลตรวจจับใบหน้าด้วย Deep Learning และให้ความแม่นยำสูง ซึ่งเรียกใช้ได้ง่ายมากๆ เพียง บรรทัดครับ (รายละเอียดดูอ้างอิง 2) 

โดยเรียก initial MTCNN ดังนี้ 

from facenet_pytorch import MTCNN 
mtcnn = MTCNN() 

และเรียกใช้งานเพียง บรรทัด 
coordinate_list, confidence_list mtcnn.detect(img) 

โดย img คือตัวแปร numpy array 3 มิติของรูปภาพที่ใช้กันทั่วไป และ MTCNN ก็จะให้ค่า list ของ Coordinates (กรอบ x1,y1,x2,y2) ของใบหน้าที่ตรวจจับเจอออกมา (ในกรณีมีหลายใบหน้า ก็จะมีหลาย coordinates) และค่าความมั่นใจ (Confidence) ที่ตรวจพบว่ามั่นใจว่าจะเป็นใบหน้ามากน้อยแค่ไหนครับ (ถ้าความมั่นใจต่ำ อาจจะตรวจจับผิดให้ Coordinate ของสิ่งของในรูปแทนใบหน้าก็เป็นได้) 

เมื่อเราเข้าใจแนวคิดพื้นฐานเรื่อง Face Forensic แล้ว การสร้างโมเดลสำหรับวิดิโอนั้นสามารถออกแบบได้หลายแนวคิด เนื่องจากวิดิโอแท้จริงแล้วก็คือรูปภาพหลายๆ เฟรมที่มีความต่อเนื่องกันนั่นเอง ซึ่งแต่ละแนวคิดนั้นสามารถเขียนได้ไม่ยากเมื่อเราใช้ Keras ซึ่งจะทยอยเล่าไอเดียในบทความถัดๆ ไปครับ 

อ้างอิง 

  1. Face Forensic Models :  https://github.com/ondyari/FaceForensics  
  2. ตัวอย่าง Face Detection หลายวิธีบน Kaggle ซึ่งเพื่อนๆ สามารถทดลองเล่นได้ทันที โดยไม่มีค่าใช้จ่ายใดๆ :  https://www.kaggle.com/timesler/comparison-of-face-detection-packages  

 

ตอบกลับอ้างอิง
Posted : 01/03/2020 9:00 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ไอเดียเพิ่มเติมเกี่ยวกับ DeepFake

https://medium.com/@jonathan_hui/how-deep-learning-fakes-videos-deepfakes-and-how-to-detect-it-c0b50fbf7cb9

ไอเดียการดูว่าภาพไหนเป็น DeepFake

https://medium.com/@jonathan_hui/detect-ai-generated-images-deepfakes-part-1-b518ed5075f4

https://medium.com/@jonathan_hui/detect-ai-generated-images-deepfakes-part-3-9c3fdf97d572

Opensource ที่นิยมใช้ทำ DeepFake

https://github.com/iperov/DeepFaceLab

ตอบกลับอ้างอิง
Posted : 07/04/2020 12:55 pm
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ว่าด้วยเรื่องการทำ Audio DeepFake

DeepFake ที่ใครก็ทำได้ไม่ยากอีกต่อไป

 

ตอบกลับอ้างอิง
Posted : 09/04/2020 1:03 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

ทีม ThaiKeras จบที่อันดับ 29 ของโลกจาก 2,265 ทีมทั่วโลก ในการแข่งขัน DeepFake ของ Google, Facebook และ Amazon --- มาดูวิธีการออกแบบโมเดลกันครับ 

By ThaiKeras 26 เมษายน 2020 

 

สวัสดีครับเพื่อนๆ ในที่สุดการแข่งขัน DeepFake ชิงรางวัล 1 ล้านเหรียญ ก็ได้ข้อสรุปแล้ว และทีมที่ ThaiKeras ของเราเข้าร่วมด้วยได้อันดับที่ 29 ของโลก วันนี้เลยจะขออนุญาตมาแชร์วิธีการออกแบบโมเดล วิเคราะห์ปัญหา การ optimize performance ที่เราได้ใช้ในการแข่งขันครับ

ในการแข่งขันครั้งนี้ผู้เขียนโชคดีมากที่ได้ร่วมงานกับ Data Scientists ที่เก่งมากๆ ที่กระจายกันคนละทวีปนั่นคือจากเยอรมัน บราซิล และนิวซีแลนด์ ทำให้เราเป็นทีม 4 คนจาก 4 ทวีป อย่างไรก็ดีการติดต่อสื่อสารระยะไกลนี้ก็กลายเป็นมาตรฐานในยุค COVID-19 ไปแล้ว

ก่อนอื่นเลยสำหรับเพื่อนๆ ที่อาจยังไม่ทราบรายละเอียดของการแข่งขันนี้ สามารถย้อนกลับไปดูรายละเอียดได้ที่ http://bit.ly/thaikeras-deepfake20 ครับ กล่าวโดยสรุปการแข่งขันครั้งนี้ โจทย์คือการสร้างโมเดลที่สามารถแยกแยะได้อย่างมีประสิทธิภาพว่า วิดิโอไหนเป็นวิดิโอที่ปลอมด้วยเทคนิก DeepFake ซึ่งเป็นภัยคุกคามในโลกอินเตอร์เน็ตนี้ (ดั่งแสดงในรูปด้านบน)

เนื่องจากโปรเจกต์นี้เป็นโปรเจกต์ใหญ่และเพื่อให้โพสต์นี้กระชับเฉพาะไอเดียสำคัญ จึงอาจจะมีลิงก์อ้างอิงไปรายละเอียดเพิ่มเติมมากสักหน่อยนะครับ

 

การออกแบบโมเดล : FaceForensics

ปัญหานี้ในมุมมองวิศวกรรม ก็คือเราต้องสร้างโมเดลที่รับ input เป็น video และมี output เป็น 0/1 (จริง/ปลอม) นั่นเองครับ โดยไอเดียหลักๆ ที่เราใช้จะเรียกว่า FaceForensics (การชันสูตรใบหน้า) ซึ่งเล่าไปในโพสต์บน วิธีการ FaceForensics นี้จะแบ่งโมเดลออกเป็น 2 ส่วนโดย ส่วนแรกจะเป็นการตรวจจับใบหน้าในวิดิโอ ซึ่งจะเป็นส่วนที่เป็นเป้าหมายสำคัญของ DeepFake และสร้าง input ใหม่ที่มีเฉพาะใบหน้าเท่านั้น และส่วนที่ 2 คือการสร้างโมเดล Classification จาก input ใบหน้า (input ใหม่เหล่านี้)

โดยในส่วนแรกเราก็ได้เจ้าของ GitHub Fast-MTCNN ซึ่งเป็น Face Detector library ที่แม่นยำสูงและรวดเร็วมากๆ (สามารถตรวจใบหน้าได้ถึง 55 frames ใน 1 วินาที) ให้กับผู้เข้าแข่งขันทุกคน (นี่เป็นสเน่ห์ของ Kaggle ที่เราแชร์ความรู้กันข้ามทีมด้วย) รายละเอียดและโค้ดของภาค 1 สามารถดูได้ที่นี่ครับ :

https://www.kaggle.com/timesler/fast-mtcnn-detector-55-fps-at-full-resolution

 

Levels ของการออกแบบโมเดลในส่วนที่ 2

การออกแบบโมเดลนี้เราออกแบบได้ตั้งแต่ level ตื้นไปจนถึงลึก ซึ่งจะได้ประสิทธิภาพที่ต่างกันครับ

 

***Level1 ***: โดยมุมมองที่ง่ายที่สุด กํ็คือการมองว่าปัญหานี้คือปัญหา “pure classification” นั่นคือพอเราได้ใบหน้าจากวิดิโอทั้งหมดแล้ว (อาจจะ extract ใบหน้าจากหลายเฟรมใน 1 วิดิโอ) เราก็นำใบหน้าทั้งหมดมารวมกันแล้วแบ่งเป็น training / validation sets แล้วก็ทำการ classification แบบปกติไป

จุดอ่อนสำคัญของการออกแบบแบบนี้คือ “Data Leakage” ซึ่งจะทำให้โมเดลใช้งานไม่ได้จริง ดังที่อธิบายในโพสต์ก่อนหน้าครับ  http://bit.ly/thaikeras-on-generalization   ทั้งนี้เนื่องจากว่าหลายๆ วิดิโอ Fake นั้นมีต้นกำเนิดมาจาก Video ต้นฉบับเดียวกัน ทำให้หลายๆ วิดิโอที่มาจากต้นฉบับเดียวกันกระจายไปทั้ง train และ valid set และโมเดลเราอาจจะ “จำ” เลยว่าคนไหนจริง คนไหนปลอม ดังนั้นหัวใจหลักของการออกแบบ train/test split คือจะต้องแยกนักแสดงรายคนให้ออกจากกันเด็ดขาดมากที่สุด และวิดีโอของนักแสดงคนใดคนหนึ่งต้องอยู่ใน train หรือ valid test set เท่านั้น (ห้ามกระจายไปทั้งสอง sets)

และ ซึ่งเรื่องนี้ใน context ของ DeepFake เพื่อนบราซิลหนึ่งในทีมของเราได้ถกรายละเอียดที่นี่ครับ : https://www.kaggle.com/c/deepfake-detection-challenge/discussion/126691

อีกเรื่อง leakage ที่หลายทีมผิดพลาดกันมากก็คือการ “ตัดใบหน้า” ในส่วนที่ 1 ที่ตัด background ติดมามากเกินไปนอกจากใบหน้า ทำให้บางครั้งโมเดลไป “จำฉากหลัง” ว่าฉากไหนคือวิดีโอจริง แต่พอไปเจอวิดิโอใหม่ๆ ฉากใหม่ๆ โมเดลนี้ก็จะทำงานไม่ได้เลย

 

***Level 2 *** : เราสามารถสร้างความท้าทายเพิ่มเติมให้โมเดลได้ด้วยการ “การันตี” ว่าทุก input batch ที่โมเดลต้องเรียนรู้นั้น จะต้องมีทั้ง “ภาพต้นฉบับ (Real)” และ “ภาพที่ปลอมจากต้นฉบับนั้น (Fake)” อยู่ด้วยกันเสมอ (ดูรูปแนบ) ทำให้โมเดลต้องพยายามมากขึ้น ที่จะแยกแยะหน้าที่ใกล้เคียงกันแต่รูปนึงจริง และรูปนึงปลอม

เทคนิกนี้จะคล้ายไอเดียของ Siamese Networks ซึ่งใช้ในงาน Face Recognition ครับ

 

***Level 3 ***: เราสามารถให้ข้อมูล model เพิ่มเติมเช่นให้ “มิติเวลา” นั่นคือส่ง input หลายเฟรมจาก 1 วิดิโอเข้าไปพร้อมกัน และใช้ LSTM มารวมข้อมูลจาก CNN อีกที ซึ่งโมเดลที่ซับซ้อนแบบนี้สามารถ implement ได้ง่ายๆ บน Keras ครับ 

หรือ เราอาจท้าทายโมเดลเพิ่มเติม แทนที่จะให้โมเดลเพียงทำนายว่าเป็น “วิดิโอจริง หรือ ปลอม” เราก็อาจจะบังคับให้โมเดลต้อง “ระบุ” ส่วนที่โมเดลคิดว่า “ปลอม” ออกมาด้วย นั่นคือเราเปลี่ยนปัญหาจาก Classification เป็น Segmentation ครับ ดั่งรูปแรก

 

Optimize Models

เมื่อเราได้ Model Pipeline ที่พอใจแล้วก็ถึงเวลาที่จะต้องมา optimize เวลาการฝึกสอนโมเดลของเรา เนื่องจากข้อมูลในโจทย์นี้มีปริมาณมหาศาลมากหลายร้อย GB เราจำเป็นต้องหาวิธีการสอนที่เร็วทีสุดที่เป็นไปได้ ซึ่งในเพื่อนนิวซีแลนด์ในทีมของเราได้โชว์การเปลี่ยนโค้ดทั้งหมดของทีมเราให้ใช้งานได้ใน Keras TPU ซึ่งเร็วกว่า GPU ราว 20 เท่า!!! (ทำความรู้จัก GPU และ TPU เบื้องต้นใน https://bit.ly/thaikeras-deeplearning-faq )

ซึ่งจากโค้ดที่่ประสิทธิภาพสูงนี้ทำให้เราสามารถใช้โมเดลที่ดีที่สุดของงาน Computer Vision คือ EfficientNet B5 B6 และ B7 ได้ครับ (ดู EfficientNet เพิ่มเติมที่ : https://bit.ly/thaikeras-architectures)

โดยผลทำนายสุดท้ายที่ทำให้ทีมเราได้อันดับ 29 ของโลกก็คือ การทำนายเฉลี่ยจาก B5, B6 และ B7 3 โมเดลนี้ครับ

โค้ด Keras โมเดลของเราสามารถดูได้ในที่นี่ครับ : https://www.kaggle.com/c/deepfake-detection-challenge/discussion/145965

สำหรับเพื่อนๆที่อยากดูแนวคิดของ Data Scientists ระดับสุดยอดของโลกเพิ่มเติม อันดับ 3 ของโลกได้แชร์ไอเดียไว้ที่นี่ครับ : https://www.kaggle.com/c/deepfake-detection-challenge/discussion/145721

ตอบกลับอ้างอิง
Posted : 26/04/2020 4:44 am
The Neural Engineer
(@neural-engineer)
Boltzmann Machine

มาเล่นเกมส์ "which face is real?" กันครับ

http://whichfaceisreal.com/

เกมส์จะสุ่มภาพมาสองภาพ โดยจะมีภาพหนึ่งสร้างจาก StyleGAN-2 ซึ่งเป็น AI ที่วาดหน้าคนเก่งที่สุดในปัจจุบัน อีกภาพนึงเป็นภาพจริง

ถ้าใครทายถูกสิบรูปติดกัน แอดมินขอคารวะครับ 

ตอบกลับอ้างอิง
Posted : 04/05/2020 2:28 pm
Share:

Please Login or Register