GAN量化評估方法——IS(Inception Score)和FID(Frechet Inception Distance score)
生成模型產生的是高維的複雜結構資料,它們不同於判別模型,很難用簡單的指標來評估模型的好壞。下面介紹兩種當前比較流行的評估生成模型的指標(僅判別影象):IS(Inception Score)和FID(Frechet Inception Distance score)。
IS
IS基於Google的預訓練網路Inception Net-V3。Inception Net-V3是精心設計的卷積網路模型,輸入為圖片張量,輸出為1000維向量。輸出向量的每個維度的值對應圖片屬於某類的概率,因此整個向量可以看做一個概率分佈。下面講解IS的思路和推導過程。
定義
IS考慮以下兩個方面評估生成器的質量:
1、對於單一的生成影象,Inception輸出的概率分佈熵值應該儘量小。越小說明生成影象越有可能屬於某個類別,影象質量高。
2、對於生成器生成的一批影象而言,Inception輸出的平均概率分佈熵值應該儘量大。因為生成器應該保證生成影象的多樣性,因此Inception在不同生成影象上的輸出分佈差異應該大一些,從而使得它們的平均更接近均勻分佈,熵值更大。
1定義如下:
\begin{equation} \begin{aligned} &E_{x\sim p_G}(H(p(y|x)))\\ =&\sum\limits_{x\in G}P(x)H(p(y|x))\\ =&\sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{1}{P(y_i|x)}\\ \end{aligned} \end{equation}
即先求批量輸出分佈的熵值再求熵的均值。其中$p(y|x)$表示Inception輸入生成影象$x$時的輸出分佈,$P(x)$表示生成器$G$生成影象$x$的概率,$P(y_i|x)$表示Inception預測$x$為第$i$類的概率。
2定義如下:
\begin{equation} \begin{aligned} &H(E_{x\sim p_G}(p(y|x)))\\ =&H\left(\sum\limits_{x\in G} P(x)p(y|x)\right)\\ =&H\left( p(y)\right)\\ =&\sum\limits_{i=1}^{1000} P(y_i)\log \frac{1}{P(y_i)}\\ =&\sum\limits_{i=1}^{1000} \sum\limits_{x\in G}P(y_i,x)\log \frac{1}{P(y_i)}\\ =& \sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{1}{P(y_i)}\\ \end{aligned} \end{equation}
即先求批量輸出分佈的均值再求均值的熵。其中$p(y)$表示$G$生成的圖片在Inception輸出類別的平均分佈,$P(y_i)$表示Inception判斷$G$生成的圖片屬於$i$類的概率。
為了將1和2放在一起作為一個整體,取$(1)$式為負,這樣這兩個指標的優化目標就一致了,都是越大越好。然後將它們加起來,得到:
\begin{equation} \begin{aligned} &\sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{P(y_i|x)}{P(y_i)}\\ =&E_{x\sim p_G}KL(p(y|x)||p(y)) \end{aligned} \end{equation}
其中$KL(p(y|x)||p(y))$是這兩個分佈的KL散度(相對熵)。最後再加上指數,得到最終的IS:
\begin{equation} \begin{aligned} \text{IS}=\exp E_{x\sim p_G}KL(p(y|x)||p(y)) \end{aligned} \end{equation}
根據定義,IS值越大,生成影象的質量越高。
具體應用
假設生成器$G$生成$n$張圖片$\{x_1,x_2,...,x_n\}$,首先計算$P(y_i)$:
\begin{equation} \begin{aligned} P(y_i) = \frac{1}{n}\sum\limits_{j=1}^nP(y_i|x_j) \end{aligned} \end{equation}
然後代入公式$(4)$計算IS:
\begin{equation} \begin{aligned} \text{IS}(G) &=\exp E_{x\sim p_G}KL(p(y|x)||p(y)) \\ &=\exp\left(\sum\limits_{x\in G}P(x)\sum\limits_{i=1}^{1000}P(y_i|x)\log \frac{P(y_i|x)}{P(y_i)}\right)\\ &=\exp\left(\frac{1}{n}\sum\limits_{j=1}^n\sum\limits_{i=1}^{1000}P(y_i|x_j)\log \frac{P(y_i|x_j)}{P(y_i)}\right) \end{aligned} \end{equation}
FID
FID分數是在IS基礎上的修改(沒有優劣之分),同樣也是基於Inception Net-V3。FID與IS的不同之處在於,IS是直接對生成影象進行評估,指標值越大越好;而FID分數則是通過對比生成影象與真實影象來產生評估分數,計算一個“距離值”,指標值越小越好。以下是定義。
定義
FID並不使用Inception Net-V3的原本輸出作為依據,它刪除模型原本的輸出層,於是輸出層變為Inception Net-V3的最後一個池化層。這一層的輸出是2048 維向量,因此,每個影象會被預測為2048個特徵。
對於常見的分佈來說(比如高斯分佈),當分佈型別確定後,只要再確定均值和方差,那麼這個分佈就確定了。我們假設生成影象與真實影象也服從某類分佈,如果它們之間的均值與方差比較相近,我們就有理由認為生成影象是比較真實的。但是直接計算影象的均值和方差是不可取的,因為協方差矩陣規模太大(畫素數*畫素數)。所以就先通過Inception Net-V3對映為2048維的特徵向量,再求特徵向量的均值與協方差矩陣進行比較。
於是,真實影象分佈與生成器生成分佈之間的差異,即FID分數,是這樣定義的:
\begin{equation} \begin{aligned} \text{FID}(x,g) = \left\|\mu_x - \mu_g\right\| + \text{Tr}\left(\Sigma_x+\Sigma_g-2\sqrt{\Sigma_x\Sigma_g}\right) \end{aligned} \end{equation}
其中$\mu_x,\Sigma_x$分別是真實影象集合在Inception Net-V3輸出的2048維特徵向量集合的均值和協方差矩陣,$\mu_g,\Sigma_g$分別是生成影象集合在Inception Net-V3輸出的2048維特徵向量集合的均值和協方差矩陣,$\text{Tr}$表示矩陣的跡,開根號是按元素進行的運算。
較低的FID意味著生成分佈與真實圖片分佈之間更接近,如果用於測試的真實圖片清晰度高且種類多樣,也就意味著生成影象的質量高、多樣性