Inception Score


轉載

https://zhuanlan.zhihu.com/p/109342043                                這篇文章講的特別好

 https://www.jiqizhixin.com/articles/2019-01-10-18                  全面解析Inception Score原理及其局限性

https://blog.csdn.net/qq_27261889/article/details/86483505   如何評價GAN網絡的好壞?IS(inception score)和FID(Fréchet Inception Distance)主要公式推導

https://blog.csdn.net/qq_35586657/article/details/98478508   GAN的多種評價指標

很多關於 GAN 生成圖片的論文中,作者評價其模型表現的一項重要指標是 Inception Score(下文簡稱 IS)。其名字中 Inception 來源於 Google 的 Inception Net,因為計算這個 score 需要用到 Inception Net-V3(第三個版本的 Inception Net)。 Inception Net 是圖片分類網絡,在 ImageNet 數據庫上訓練,ImageNet 數據庫共有 1.2M 個 RGB 圖片,分為 1000 類。Inception Score 只是把 Inception Net-V3 作為一個工具,理解 Inception Score 不需要知道 Inception Net-V3 的細節,各種深度學習框架中都已經包含了預訓練好的 Inception Net-V3 了,直接拿來用就好了。

基本原理

評價一個生成模型,我們需要考驗它兩方面性能:

    1. 生成的圖片是否清晰;

    2. 生成的圖片是否多樣。

生成的圖片不夠清晰,說明生成模型表現欠佳;生成的圖片夠清晰了,我們還要看是不是能生成足夠多樣的圖片,有些生成模型只能生成有限的幾種清晰圖片,陷入了所謂 mode collapse,也不是好的模型。

在GAN中,我們希望條件概率P(y∣x) 可以被高度預測(x 表示給定的圖片,y  表示這個圖片包含的主要物體,看到后面你會更加清楚這個概率是什么意思),也就是希望它的熵值較低。例如,給定一個圖片,我們很容易的知道其中包含什么物體。

因此,我們使用inception network(可以理解這是一個固定的分類網絡)來對生成的圖像進行分類。(這里都是針對ImageNet數據集而言)然后預測 P(y∣x) P(y∣x), 這里的 y  就是標簽。用這個概率來反應圖片的質量。

簡單來說,假如inception network能夠以較高的概率預測圖片中包含的物體,也就是有很高的把握對其進行正確分類,這就說明圖片質量較高。

 

Inception Score 是這樣考慮這兩個方面的: 

1. 清晰度:把生成的圖片 x 輸入 Inception V3 中,將輸出 1000 維的向量 y ,向量的每個維度的值對應圖片屬於某類的概率。對於一個清晰的圖片,它屬於某一類的概率應該非常大,而屬於其它類的概率應該很小(這個假設本身是有問題的,有可能有些圖片很清晰,但是具體屬於哪個類卻是模棱兩可的)。用專業術語說, p(y|x) 的熵應該很小(熵代表混亂度,均勻分布的混亂度最大,熵最大)。 

可以用條件概率p(y∣x) 來表示,它越大越好。而p(y∣x)熵應該是越小越好。

Inception Net-V3可將其以很高的概率分類成某個類,即標簽向量 [公式] 的數值比較集中,形如 [公式] 。我們可以使用熵來量化該指標,分布[公式]相對於類別的熵定義為:

其中, [公式] 表示 [公式] 屬於第[公式]類的概率,即 [公式] 值,為了避免歧義,計算方式展示如下圖所示:

 

2. 多樣性:如果一個模型能生成足夠多樣的圖片,那么它生成的圖片在各個類別中的分布應該是平均的,假設生成了 10000 張圖片,那么最理想的情況是,1000 類中每類生成了 10 張。轉換成術語,就是生成圖片在所有類別概率的邊緣分布 p(y) 熵很大(均勻分布)。

具體計算時,可以先用生成器生成 N 張圖片,然后用公式 (1) 的經驗分布來代替:

綜合上面兩方面,Inception Score 的公式為:

exp:僅僅是為了好看,沒有具體含義。

x~Pg :表示從生成器中生圖片。

p(y|x) :把生成的圖片 x 輸入到 Inception V3,得到一個 1000 維的向量 y ,也就是該圖片屬於各個類別的概率分布。IS 提出者的假設是,對於清晰的生成圖片,這個向量的某個維度值格外大,而其余的維度值格外小(也就是概率密度圖十分尖)。

p(y) :N 個生成的圖片(N 通常取 5000),每個生成圖片都輸入到 Inception V3 中,各自得到一個自己的概率分布向量,把這些向量求一個平均,得到生成器生成的圖片全體在所有類別上的邊緣分布,見公式 (1)。

 

:對 p(y|x) 和 p(y) 求 KL 散度。KL 散度離散形式的公式如下:

KL 散度用以衡量兩個概率分布的距離,它是非負的,值越大說明這兩個概率分布越不像。但這個距離不是對稱的,觀察公式, P(i) 很大 Q(i) 很小的地方對 KL 距離貢獻很大,而 P(i) 很小 Q(i) 很大的地方對 KL 距離的貢獻很小。

我們預期的某個維度值很大,而 p(y) 總體均勻,因此需要把放在公式 (2) 中雙豎線的前面。放到后面可能會造成的極端值被忽略,而正是這個極端值的存在告訴了我們這個生成的圖片是否清晰。 

綜合起來,只要 p(y|x) 和 p(y) 的距離足夠大,就能證明這個生成模型足夠好。因為前者是一個很尖銳的分布,后者是一個均勻分布,這倆距離本就應該很大。 

公式 (2) 很不直觀,在實際操作中可以改成如下形式:

實際操作中,先用生成的大量樣本代入公式 (1),求出,然后再對每個樣本求出,計算它和的 KL 散度,最后求平均,再算一下指數即可。 

Inception Score 的 pytorch 版本代碼可以參考下面的鏈接,十分清晰易懂:

https://github.com/sbarratt/inception-score-pytorch

 

局限性
雖然IS是GAN中使用最多的一種評價標准,但是這個計算方法本身就存在一些問題。

Inception Score 對神經網絡內部權重十分敏感。不同框架預訓練的網絡達到同樣的分類精度,但由於其內部權重微小的不同,導致了 Inception Score 很大的變化,在 ImageNet 上,Inception V3 Torch 和 Inception V3 Keras 算出的 IS 相差 3.5%;
通常計算 Inception Score 時,會生成 50000 個圖片,然后把它分成 10 份,每份 5000 個,分別代入公式 (2) 計算 10 次 Inception Score,再計算均值和方差,作為最終的衡量指標(均值±方差)。但是 5000 個樣本往往不足以得到准確的邊緣分布p(y),尤其是像 ImageNet 這種包含 1000 個類的數據集;
如果某一個物體的類別本身就比較模糊,在幾種類別會得到相近的分數,或者這個物體類別在ImageNet中不存在,那么p(y|x)的概率密度就不再是一個尖銳的分布;如果生成模型在每類上都生成了 50 個圖片,那么生成的圖片的類別邊緣分布是嚴格均勻分布的,按照 Inception Score 的假設,這種模型不存在 mode collapse,但是,如果各類中的50個圖片,都是一模一樣的,仍然是 mode collapse。Inception Score 無法檢測這種情況。
不能判別出網絡是否過擬合。如果神經網絡記住了所有的訓練集圖片,然后隨機輸出,那么它會得到一個很高的 Inception Score,但這明顯不是我們希望的。

原文鏈接:https://blog.csdn.net/qq_35586657/article/details/98478508

總結

Inception Score作為論文中最常出現的評價標准,在一定程度上可以反映出生成圖片的質量以及多樣性,但也存在一些問題:數值受樣本選取的干擾較大,不適合在內部差異較大的數據集上使用,分類模型和生成模型應該在同一個數據集上訓練,無法區分過擬合等等。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM