GAN的基礎應用分享:如何合成逼真的車牌影像
OSENS光禾感知科技是以 OMO 虛實融合的智慧場域解決方案起家,利用電腦視覺辨識、AI 深度學習等核心技術為基礎,橋接線上服務及真實世界,能應用於大型展覽館、體育館、商辦大樓、交通樞紐等特定的複雜場域。在【AI CAFÉ 線上聽】資料救星!GAN的基礎應用分享這場活動上,OSENS光禾感知科技軟體工程師楊朝旭(Rex)也為聽眾帶來「GAN應用於車牌辨識」的真實案例。
首先,得先了解為什麼要將GAN應用在車牌辨識?楊朝旭提到,要訓練出一個好的AI模型,訓練期相當重要,但有三大問題:一、車牌取得困難且標記成本相當費時、昂貴;二、隱私問題,大家並不太希望自己的車子被拍攝;三、在複雜環境下所偵測的高挑戰性車牌,如各種光照、傾斜、模糊等。藉由GAN生成的特性,可以彌補訓練樣本的不足,增添訓練樣本的多樣性。
在進入主題前,我們先要理解到,GAN是由要訓練的兩個神經網路所組成,分別是Generator及Discriminator,透過輸入一個Normal distribution(可以想像成是一個低維的向量)到Generateor,接著,輸出一個高維的向量(可以想像是生成一張圖片),再將輸出的圖片透過Discriminator進行真假判定,並會出現一個數值。數值越高就代表被Discriminator判定為真,也就是說,Generator騙過Discriminator。
cycleGAN與styleGAN分別是什麼?
接著,Rex介紹了兩種GAN,分別是cycleGAN及styleGAN。在這之前,我們先了解一下,什麼是風格?風格是一個非常抽象的概念,例如莫內的日出和梵谷的星夜,不同畫派所產生的不同特色及差異,如色調、刻度輪廓、局部紋理等差異。
Rex解釋,在深度學習中,風格就是在CNN每一層的convolution過程中,萃取出特徵的統計分布,也就是說,Feature map間的關聯性。如此一來,我們就可以抓到,每一層之間的紋理空間的差異。
Rex將這次提到的GAN分為兩類,第一類是「Image-to-image translation」,也就是圖對圖的轉換,以cycleGAN為例,第二類是「Image Generation」,是透過隨機生成的方式,以styleGAN為例,並說明如何生成假車牌。
所謂圖對圖的轉換,會需要兩組訓練集,稱之為「Domain X」跟「Domain Y」。以車牌為例,Domain X需要放置大量的車牌模板,是我們根據台灣的車牌規則、字符尺寸,以及字符大小,透過CV的方式所描繪出的模板。再來,Domain Y是放置少量真實車牌的樣本,就是我們想要賦予它真實車牌的風格。將這兩個訓練集,輸入到風格轉換的AI演算法中,最終會輸出一個具有真實車牌風格的樣本。
那麼,什麼是cycleGAN?其實cycleGAN就是非監督式學習中的一種GAN,也就是說,並不需要成對的訓練集,就可以完成訓練對抗。例如,如何將一隻班馬轉成馬,然後再把馬轉回斑馬?很簡單,只要將Domain X放置一大堆的班馬,然後在Domain Y放一大堆的一般馬,就可以達到想要的效果。那我們如何將這種方法應用在車牌的生成?首先,我們將某個車牌模板輸入到Generator x→y,會生成一個具有真實車牌的樣本,再藉由Discriminator進行真假判定。一個好的Generator要能騙過所有的Discriminator,cycleGAN還有一個關鍵,就是具有cycle-consistent機制,會將具有真實車牌風格樣本,透過Generator y→x,再轉回原本模板的樣子。於是,我們透過這個轉回模板的樣子,去減掉前面原本提到的車牌模板,就間接地達到domain的制約性,並間接達到label的效果。再來,一樣將真實車牌的樣本輸入到Generator y→x,生成一個具車牌模板樣子,並利用discriminator進行判定,再透過Generator x→y轉回來,這樣所訓練出來的,就是兩組的Generator以及discriminator。
其實,最重要的就是訓練出一個好的GeneratorX,能夠生成大量具有真實車牌風格的樣本。
另一方面,在說明StyleGAN前,我們先補充說明Adaptive Instance Normalization,也被稱為AdaIN。AdaIN其實跟GAN一點關係都沒有,但被巧妙地應用在StyleGAN中。前面提到風格就是在了解資訊的統計分布,也就是說,如果去抓這個統計分布,將原始資料的特徵統計分布調整到你期望改變的Style mean跟variance,就可以達到風格轉換的效果。
我們利用一個簡單的網路架構說明,這是一個可進行生成的VGG Encoder以及Decoder,同樣需要兩對訓練集,第一對需要放置大量真實場景,Style可能是畫風的圖像,我們輸入到VGG Encoder裡面萃取特徵,然後再透過AdaIN的機制調整統計的分佈,再輸入到Decoder進行生成,就能生成期待的風格樣本。Rex補充,AdaIN這種機制能達到風格轉換的效果,也能夠應用在資料生成。另外,像是反光、色調變化,甚至是模擬某些骯髒的風格,都表現得還不錯。
所謂Image Generation就是隨機生成,也就是StyleGAN。StyleGAN一般會被用來生成高解析的逼真人臉,要如何應用於車牌的生成?我們將生成的樣本利用discriminator判定真假,經過反覆訓練對抗,期待能訓練出一個好的Generator以生成大量期待的樣本。
為什麼StyleGAN能夠生成逼真的人臉?
其實這需要付出非常多的時間成本,例如生成1024x1024 pixel圖片時,就要花上41天的時間,以特斯拉v100才完成訓練。但因為車牌沒有人臉這麼複雜,而且應用的環境可能只處理到32x32、64x64、128x128pixel的圖片。因為尺寸較小,再搭配網路架構的輕量化,其實只需兩天的時間,且只需要用1080 ti。
如果你對車牌辨識感興趣,你更需要在意混淆字的問題,例如2跟z、8跟B,他們就是導致在進行車牌辨識時,發生錯誤的主因。所以,我們在做的任何優化,都只是為了降低混淆致所發生的錯誤。
另一方面,我們也發現到字母的錯誤率遠高於數字,台灣的車牌規則約是6個字,可能是由兩個英文字母,搭配四個數字組合而成,所以一個辨識模型,他對數字的敏感度及辨識準確度,本來就比字母的辨識率還高。因此,我們要思考的是如何降低字母的錯誤率?
一個即時的車牌辨識系統,需要掌握兩個特性,第一是即時性、第二是準確性,所以如果我們只將GAN用在資料增強上的話,是完全不夠的,可能最多就提升到8、90%。因此,你還要再針對車牌的偵測模型、辨識模型,進行大量的輕量化修改。如果同時還要保持一定準確率的話,那可能另外還要再透過車牌追蹤的演算法,以及校正的演算法進行修正。
Rex提到,光禾系統的辨識率可以高達96%,以幀率來講可以到15-20 fps的即時的辨識效果。所應用在的場景極為多元且複雜,包括移動狀態、傾斜、白天、夜晚、甚至是雨天的車牌,能夠辨識成功。光禾所採用的小型裝置也十分好攜帶,可能插在頭上、機車或汽車上,就能使用。甚至也可以結合贓車辨識系統,根據資料庫比對及時抓出贓車。
Rex建議,GAN應用非常多元,透過瞭解GAN的特性,它並非傳統的辨識或分類模型,而是生成模型。如果將它應用在娛樂,或是無中生有的地方,例如換臉搭配、衣服轉換風格、男女聲或是語音風格轉換、3D模型生成、廣告生成、Logo生成,或者是結合現下流行的區塊鏈、NFT都能有許多不同也有趣的應用。