文章專區

2024-07-01AI如何辨識人臉? 一起打造能認出K-POP偶像團體的AI模型! 655 期

Author 作者 蔡炎龍/政治大學應用數學系副教授,專長為代數幾何及深度學習。近年來致力推廣Python程式語言及人工智慧教學。

Take Home Message
•傳統AI人臉辨識模型的建立需要大量訓練資料,且難以應對必須辨識新人的情況,此時就需要一個能「捕捉特徵」的AI模型。
•透過對比學習的方式,就能訓練出熟悉捕捉個人特徵的AI模型,使模型可以抓出同一人的相似特徵,並區分不同人的差異。
•我們可以使用Colab平臺打造AI人臉辨識模型,在訓練時僅需一張照片,就能讓程式抓出不同人的特徵並儲存、訓練模型。

 
在人工智慧(artificial intelligence, AI)應用愈來愈廣泛的21世紀,許多設備、公司都會應用到「人臉辨識」的系統。不過AI人臉辨識背後的原理是什麼?如何運用深度學習(deep learning)的方法進行人臉辨識呢?
 

人臉辨識的AI模型該怎麼設計?

在講述AI模型的設計原理之前,我們先說一個故事。
 
兔子老闆在臺灣經營了一間牧草買賣公司,有一天他看到隔壁公司的員工都是「刷臉」就可以開鎖,他進公司後覺得很羨慕,於是決定幫自家公司也做個人臉辨識系統。還好兔子老闆的公司只有四位員工,所以我們可以給每位一個編號。

 

 
怎麼設計這個人臉辨識系統的AI模型呢?在建立AI模型前,首先要知道我們是將什麼資料「輸入」模型,並預期會「輸出」什麼結果。而在這個故事中,我們輸入是一張照片,輸出的則是代表四個人的四個分數,得分最高的表示AI辨識出照片是那個人。
 
不過這種設計方式有兩個問題。第一,深度學習基本上是「讓電腦自己看著辦」,也就是我們並不會手把手教電腦每個人有什麼特徵,只是給他看某人的照片,告訴他正確答案是第幾號。於是電腦大約需要1000張照片才學得會一個人的長相――要向每位同仁要1000張照片好像不太合情理?
 
就算兔子老闆很有威嚴,大家真的各自交出1000張照片,模型也順利訓練完成,大家終於鬆了一口氣。但是公司的人不是永遠固定不變的,如果有一天來了一位新報到的員工,我們總不能告訴他:「本公司規定,新人要交自己的1000張照片!」而且這時候我們只能分辨四個人的模型己經不敷使用,要砍掉重練!


如果有個很會「抓特徵」的模型?

假如有一個AI 模型,它很擅長捕捉出照片中不同人物的長相特徵,當輸入一個人的照片後,它便能輸出AI 模型對這個人的「理解」。而這個理解只是一個向量、抽象的理解,我們沒辦法知道具體的意義,只知道是AI 給這個人的特徵。

接著將公司每一位同仁的照片都送進這個「擅長捕捉特徵」的 AI 模型中,如此一來每個人的特徵代表向量就出現了。再將這幾個向量放到資料庫中,以後有人進來,只要把監視器拍到的影像送入此模型,就可以比對拍到的影像和誰的代表向量最接近,藉此辨識出是哪個人進公司了。

有新進員工加入也不是問題,只要把他的照片送入這個模型並找到代表他的特徵代表向量,最後再存入公司的資料庫就可以。


如何訓練模型捕捉特徵?

這種「擅長捕捉特徵」的模型要怎麼訓練呢?畢竟我們很難訓練資料, 如果隨便找一個人的照片輸入AI 模型中,它究竟要怎麼知道什麼是這個人最合適的特徵代表向量?

很有意思的是,雖然我們沒辦法教電腦什麼是「正確答案」,卻可以讓電腦知道,他生出的特徵代表向量「好」或「不好」。要怎麼做呢? Google的AI 科學家想到,在訓練時可以每次準備三張照片,其中兩張是同一個人,另一張則是不同人的照片。將三張照片送進「找特徵」的AI 模型後,會出現三個特徵代表向量。那麼,同一個人的特徵代表向量當然應該要接近,不同人的差距要愈大愈好。也就是說,告訴電腦我們的目標,電腦就會慢慢調整成我們想要的樣子。

經過一次次學習後,電腦就會變成一個很會抓個人特徵的AI 模型。由於我們用來訓練AI 模型的照片會有「正向」(同一個人)的數據,還有「負向」(不同人)的數據。理論上正向樣本要愈接近目標愈好、負向愈遠愈好。後續在訓練模型時也發現,正向樣本較少(畢竟就是一個人)、負向的樣本較多(其他人的照片都是負向)的狀況下模型的訓練效果較佳。因此,每次在訓練AI 模型時應該多輸入一些不同人的照片。後來更導出對比學習 (contrastive learning)的概念,也就是對任一張目標照片, 一次取一張正向的樣本,但負向樣本會取數張, 成為 AI 運用中一個很重要的想法。

 

一起來實作, 辨識IVE 成員吧!
今(2024)年3 月,韓國六人女團IVE來臺灣開演唱會,但如果你不是IVE 的粉絲,可能會分不太清楚六位成員。這時候我們就可以試試看用前面提到的概念, 打造一個能夠辨識IVE 成員的AI模型!

我們可以使用Google 的Colab 雲端運算平臺來打造這個AI 模型。就算沒有什麼程式經驗也不需要太過擔心,程式中會提醒你。讀者可以點擊此連結 Colab 雲端運算平臺,並且按下「Open In Colab」的按鈕。

在操作時需要使用Google 帳號登入Colab,然後在「檔案」選單選擇「在雲端硬碟中儲存副本」,這麼一來程式就會存在你自己的Google 雲端硬碟中,這就會完全變成你的程式了。

首先,我們需要知道怎麼執行每一行程式:可按下程式儲存格前面的 「play」按鈕, 也可以直接用shift-enter 快捷鍵。整個程式只有兩個重要需要自己動手輸入的地方,第一個是你希望辨識的成員姓名,英文(作為資料夾名稱用)和中文的部分。也就是說,不一定要辨識IVE 成員,你想做出辨識任何人的AI模型都可以!

第二個需要動手操作的就是重點了。程式會幫忙開好每位成員的資料夾,此時要幫每位成員都找「一張」照片、放入資料夾中,之後程式在執行時就會先找到每一位成員的特徵代表向量, 並且儲存。

執行到最後,程式會給你一個網址,讓你可以在任何瀏覽器上執行這個AI 人臉辨識模型。也就是你可以將連結分享給親朋好友,讓他們看看你親手打造出來的IVE AI 辨識模型。
    


實作的討論

還記得每位成員我們只給一張範例嗎?你會發現AI 其實有點厲害,居然只需要少少的資料就能正確辨識。但如果你是IVE 的粉絲,還是會發現AI的辨識能力遠遠不及你。

其實這也是在實作上常會碰到的問題,模型的確能做到某種程度的辨識,但我們希望它能做得更好。於是針對不同成員,我們可以給AI 模型更多的照片,尤其是那些AI 辨識錯的照片。這種做法的確能改善AI 辨識的精準度,但卻不是最好的做法。原因在於AI 不像人類,真的認得一個人時會說:「哦這是兪真(IVE成員之一)!」AI 沒有辦法融會貫通,它只是覺得這張照片比較接近「兪真的某一張照片」,但辨識結果的第二名可能就給了其他人的照片。

另一個比較好的作法是我們可以找到分別的特徵代表向量,再用其他機器學習的方式去分類這些特徵代表向量。你也可以想成這是AI 「消化吸收」的過程。經過大量訓練後,AI 就會變得更有能力、也可以更肯定的判斷出這是誰了。