Face Recognition ที่แม่นยำที่สุด (Open Source)

Adulwit Chinapas
imageanalyst
Published in
3 min readJan 12, 2019

ทุกวันนี้อะไรๆก็ดูง่ายไปหมด การรู้จำใบหน้า (Face recognition) ก็เช่นกัน ประเทศไทยที่สนามบินก็มีการใช้ Face recognition ไว้ตรวจจับใบหน้ากับ passport ว่าใช่คนเดียวกันหรือไม่ หากใช่ก็จะสามารถผ่านไปได้ ดังรูปด้านล่าง

รูปภาพจาก https://www.youtube.com/watch?v=WknTpPKxb_M

แล้วทีนี้เราจะได้รู้ได้อย่างไรว่ามันตรวสอบได้?

คำตอบก็คือ มันตรวจสอบได้ครับ แต่มันแม่นยำแค่ไหน นี้แหละครับคือสิ่งที่ผมจะบอก มีเครื่องมือให้ใช้ให้เลือกมากมาย บางอันใช้ง่าย บางอันใช้ยาก และนี้คือเว็บฐานข้อมูลใบหน้าที่หลายๆ paper ใช้ทดลอง ทดสอบ เราสามารถโหลดมาใช้ได้เลยครับ

มีรูปภาพใบหน้าอยู่ประมาณ 13,000 รูป จากคน 1,680 คน

ซึ่งผมได้เข้าไปตรวจสอบว่า paper ไหนบ้างที่อ้างอิง ฐานข้อมูลใบหน้านี้

ก็สามารถตรวจสอบได้จาก link นี้ครับ

เขาจะบอกความแม่นยำของแต่ละ paper ทั้งหมดเลย

เห็นมั้ยครับว่าไม่มี paper ไหนถึง 100% เยอะที่สุดก็ paper ล่าสุด Camvi 99.87 %

ซึ่งแน่นอนครับว่ามันไม่ใช่ open source แน่ๆ ถ้าใช่นี่คงรวยเละกันเลยทีเดียวครับ 55555 และทีนี้เราจะรู้ได้อย่างไรว่าตัวไหนเป็น open source ผมคิดว่าทุกคนคงต้องใช้เว็บนี้เป็นประจำแน่นอนครับ พิมพ์เข้าไปเลยครับ github.com แล้วก็ search คำว่า face recognition

มีให้เลือกใช้หลายตัวเลยครับ

ไม่ว่าจะเป็น ageitgey/face_recognition ซึ่งถูกทำให้ง่ายขึ้นแต่จริงๆแล้วมัน implement มาจาก Dlib ซึ่ง ความแม่นยำอยู่ที่ 99.38% หากใครเล่น Docker เป็นก็โหลดมาแล้วใช้ได้เลยนะครับ

ตัวนี้คือตัวที่ผมจะพาใช้นะครับ davidsandberg/facenet ชื่อก็บอกอยู่แล้วครับ Facenet หากเราลองค้นหาดูก็จะพบ paper หลักของมันครับ ตัวนี้ความแม่นยำอยู่ที่ 99.65% แล้วก็ cmusatyalab/openface นะครับที่ implement มาจาก Facenet ทำให้มันใช้งานง่ายและหลากหลายมากขึ้น แต่ความแม่นยำลดลงเหลือ 92.92% ผมก็ไม่รู้ว่าเขา implement อย่างไรนะครับมันถึงลดลง แต่เดี๋ยวเราจะพาไปดูตัวหลักของ Facenet กันอีกทีครับ

และตัวสุดท้ายครับ deepinsight/insightface ตัวนี้แม่นยำที่สุดครับ ที่เป็น open source ความแม่นยำอยู่ที่ 99.83% implement มาจาก ArcFace ใช้งานยากหน่อยนะครับ เพราะยากทั้งการติดตั้ง และต้องการ GPU ด้วยครับ ความเร็วในการประมวลผลช้ามากครับ แต่ถ้าใครอยากลองก็ลองดูได้นะครับ

ต่อไปเราจะมาลอง code ฉบับ Lazy-Dev กันดูนะครับ ผมจะไม่พาเล่นตัวสำเร็จรูปนะครับ แต่จะพาเล่นตัวหลักๆมันนะครับ ก็คือ Facenet นะครับ โหลดลงมาเลยนะครับ

ผมใช้ python 3.6 ใครใช้ Window หรือ Mac ก็ลง python ก่อน

ก่อนจะรัน facenet ต้อง install requirements ก่อนนะครับ ดัง code นี้เลย

pip install -r requirements.txt

เสร็จแล้วเข้าไปที่โฟลเดอร์ src แล้วรัน compare.py

python compare.py

ได้ error ดังรูปครับ

ที่ error เพราะเราต้องมี model ก่อนครับ ถ้าอยากสร้าง model เองก็ลองดูได้นะครับ แต่ผมจะพาใช้ model ที่มีความแม่นยำ 99.65% โหลดเลย

จากนั้นแตกไฟล์ไปยังโฟลเดอร์ src

แล้วโหลดไฟล์รูปภาพบนฐาน LFW มาลองทดสอบครับ

http://vis-www.cs.umass.edu/lfw/lfw.tgz

แตกไฟล์ไปยังโฟลเดอร์ src ดังรูปด้านล่างครับ

ในโฟลเดอร์ LFW จะมีรูปภาพอยู่หลายคนนะครับแยกตามแต่ละชื่อบางคนมี 1 รูป บางคนมี 2 รูป เราจะทดสอบคนที่ชื่อ Aaron_Peirsol ว่าเป็นอย่างไร

ทดสอบรันไฟล์ compare.py ครับ

python compare.py ./ lfw/Aaron_Peirsol/*

ได้ผลลัพธ์ดังนี้ครับ

model direcotry: คือ โฟลเดอร์ที่มี model อยู่

ซึ่งจะได้ Metagraph file และ Checkpoint file ออกมา

จากนั้นจะหา Images ที่เราต้องการ compare

จะได้ออกมา 4 คน และจะได้เป็นค่า distance value เป็น metrix 4x4 ออกมาดังรูป

ที่นี้ลองเปรียบเทียบคนที่ไม่ใช่คนเดียวกัน

python compare.py ./ lfw/Aaron_Eckhart/* lfw/Aaron_Guiel/*

จะเห็นว่าค่า distance คือ 1.3417 ซึ่งมากกว่า 1

แล้วสรุปแล้ว ค่า distance ที่ได้ คือค่าที่หมายถึงอะไร ???

เฉลยนะครับ

ค่า distance คือค่าที่ไว้บอกความเหมือนของใบหน้าแต่ละรูปภาพที่เปรียบเทียบกัน

  • distance = 0 => รูปเดียวกัน
  • distance ≤ 0.9641 => ใบหน้าคล้ายคลึงกัน
  • distance > 0.9641 => ใบหน้าไม่คล้ายคลึงกัน

วันนี้พอแค่นี้ก่อนละกันครับ สงสัยหรือมีปัญหาอะไรสอบถามมาได้เลยนะครับ

ครั้งหน้า!! จะมาเล่าประเด็น Face detection, Face comparison และ Algorithm กันนะครับ หากใครมีประเด็นไหนสนใจอยากให้พูดถึงในครั้งถัดไปก็บอกเข้ามาได้นะครับ

ขอบคุณที่ปรบมือให้ครับ

--

--

Adulwit Chinapas
imageanalyst

Adul.dev I’m a Ph.D. student. My major project about Machine Learning (Python), Web (Vue), Android (JAVA), iOS (Objective-C), C#, Firebase, MySQL, PHP, Docker.