文本生成视频相关指标整理
視頻生成相關指標整理
- FID ↓\downarrow↓
- FVD ↓\downarrow↓
- CLIPSIM ↑\uparrow↑
- Acc ↑\uparrow↑
- GFLOPs
- Params
- Runtime
FID ↓\downarrow↓
Fréchet Inception Distance
基本思想:直接考慮生成數據和真實數據在feature層次的距離。
預訓練好的神經網絡可以在在高層提取圖片的抽象特征。FID通常使用Inception Net-V3全連接前的2048維向量作為圖片的feature。
直觀感受,FID是反應生成圖片和真實圖片的距離,數據越小越好。
具體而言,FID是衡量兩個多元正態分布的距離,其公式如下
FID=∣∣μr?μg∣∣2+Tr(∑r+∑g?2∑r∑g1/2)FID = ||\mu_r-\mu_g||^2+Tr(\begin{matrix} \sum_r \end{matrix}+\begin{matrix} \sum_g\end{matrix}-2\begin{matrix} \sum_r\sum_g\end{matrix}^{1/2}) FID=∣∣μr??μg?∣∣2+Tr(∑r??+∑g???2∑r?∑g??1/2)
特點:
- 刷分不會導致生成圖片質量變差
- 生成模型的訓練集可以和Inception Net-V3不同
- FID是衡量多元正態分布直接按的距離,但提取的圖片特征不一定是符合多元正態分布的
- 無法解決過擬合問題,如果生成模型只能生成和訓練集一模一樣的數據無法檢測
代碼:
計算FID的代碼上傳到這里了–>pytorch_fid
FVD ↓\downarrow↓
基本思想: 相當于把FID的圖像特征提取網絡換成視頻特征提取網絡,其他都差不多。
幾種叫法:
來源論文:video-to-video synthesis
特征提取器:I3D, ResNeXt
特征提取器:3D Resnet-50 model
Cited from TFGAN:
(3) Video-level FID: Features of the penultimate layer are extracted from 3D Resnet-50 model trained on the entire Kinetics dataset [Kay et al., 2017], and the FID score is computed between the real and generated videos. Note that lower the FID scores, better are the models.
Kay et al., 2017. The kinetics human action video dataset.
特征提取器:3D Resnet-50 model
來源論文:Latent Video Transformer
3D特征提取器分析:
- 參考FID,已知生成模型的訓練集可以和特征提取器不同。但是根據《video-to-video synthesis》論文里的結果,使用不同特征提取器的結果會不一樣,目前github和谷歌上都搜不到FVD比較官方的實現,不能確定用哪個特征提取器;
- BoGAN中沒有明確指出用的哪個3D特征提取器,其他幾篇指出用的kinetic-400中訓練的3D ConvNet(C3D)。
- 但是目前同樣沒有找到kinetics提供的這個預訓練3D ConvNet,不過《video-to-video synthesis》中用到的I3D可以找到kinetics-400上預訓練的checkpoint,故我的工作里目前使用I3D。
代碼: 把特征提取器換掉參考FID的小修改就可以了。
CLIPSIM ↑\uparrow↑
來源論文:GODIVA
使用論文:GODIVA、NVWA、make-a-video
基本思想:
利用具有zero-shot能力的多模態模型CLIP輸出文本和圖像相似度,在視頻任務中使用時采取每一幀相似度的平均值。
使用:
參考這個工具和CLIP代碼自己改編一下就好,我代碼寫太爛就不放了
CLIP-as-sevice
CLIP代碼參考1
CLIP代碼參考2
大致思路是用這個工具獲得valid set的幀編碼&文本編碼,然后可以獲得對應文本圖像對的相似度,對每一幀都算,然后取均值。
(用這個思路寫的代碼測試過make-a-video結果,跑出來的數差不多,但不知道對不對,也沒找到官方代碼,如果有不對歡迎交流)
Acc ↑\uparrow↑
來源論文:T2V&TFGAN,用于Kinetic數據集
使用論文:T2V、TFGAN、NVWA
基本思想:相當于IS指標的變種
GFLOPs
參考鏈接:輕量級神經網絡
區分:
- FLOPS (全部大寫)是floating-point operations per second的縮寫,意指每秒浮點運算次數。用來衡量硬件的性能。
常用當然還有GFLOPs和TFLOPs
GFLOPS 就是 Giga Floating-point Operations Per Second,即每秒10億次的浮點運算數,常作為GPU性能參數但不一定代表GPU的實際表現,因為還要考慮具體如何拆分多邊形和像素、以及紋理填充,理論上該數值越高越好。1GFlops = 1,000MFlops。 - FLOPs 是floating point of operations的縮寫,是浮點運算次數,可以用來衡量算法/模型復雜度。
如何計算FLOPs
對于卷積層而言,FLOPs的計算公式如下:
FLOPs=2HW(CinK2+1)CoutFLOPs = 2HW( C_{in}K^2+ 1 )CoutFLOPs=2HW(Cin?K2+1)Cout
其中的Cin是指卷積層輸入tensor的通道數,Cout指的是卷積層輸出tensor的通道數。K指的是卷積核大小。
而后把常數項去掉,簡化小操作:
FLOPs=HW(CinK2)CoutFLOPs = HW( C_{in}K^2 )CoutFLOPs=HW(Cin?K2)Cout
而在實際中,我們不可能自己計算FLOPs,所以,本著能找庫就找庫的聰明才能,查了一下,還真有相關計算FLOPs的庫,現查到的有兩個庫,一個是torchstat以及thop。經過測試,基本上兩個可以對齊的,所以說,任意選擇一個就好。具體用法寫兩個小demo吧。
而在實際中,我們不可能自己計算FLOPs,所以,本著能找庫就找庫的聰明才能,查了一下,還真有相關計算FLOPs的庫,現查到的有兩個庫,一個是torchstat以及thop。經過測試,基本上兩個可以對齊的,所以說,任意選擇一個就好。具體用法寫兩個小demo吧。
對于torchstat:
from torchstat import stat import torchvision.models as modelsmodel = model.densenet121() stat(model, (3, 224, 224))對于thop:
from torchvision.models import densenet121 from thop import profile model = densenet121() input = torch.randn(1, 3, 224, 224) macs, params = profile(model, inputs=(input, ))例2
pip install thop # 安裝thop庫 import torch from thop import profile net = model() # 定義好的網絡模型 img1 = torch.randn(1, 3, 512, 512) img2 = torch.randn(1, 3, 512, 512) img3 = torch.randn(1, 3, 512, 512) macs, params = profile(net, (img1,img2,img3)) print('flops: ', 2*macs, 'params: ', params)為什么不能只用FLOPs作為指標呢?
作者認為有如下幾個原因:
1)FLOPs沒有考慮幾個對速度有相當大影響的重要因素。
2)計算平臺的不同。
3) FLOPs沒有考慮幾個對速度有相當大影響的重要因素:MAC和并行度
Params
參考鏈接
獲取該值:
例1
這是網上很常見的直接用自帶方法計算params,基本不會出錯。勝在簡潔。
例2
#model = 你自己的模型,eg:CNN() ResNet() SegNet()....params = list(model.parameters())k = 0for i in params:l = 1print("該層的結構:" + str(list(i.size())))for j in i.size():l *= jprint("該層參數和:" + str(l))k = k + lprint("總參數數量和:" + str(k))Runtime
對比inference speeds
這個值怎么獲取沒弄懂
相關論文里也沒有講解,待更新…
總結
以上是生活随笔為你收集整理的文本生成视频相关指标整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10软件卸载残留删除的一种方法
- 下一篇: 2018年江苏大学885编程题