文本生成视频相关指标整理
視頻生成相關(guān)指標(biāo)整理
- FID ↓\downarrow↓
- FVD ↓\downarrow↓
- CLIPSIM ↑\uparrow↑
- Acc ↑\uparrow↑
- GFLOPs
- Params
- Runtime
FID ↓\downarrow↓
Fréchet Inception Distance
基本思想:直接考慮生成數(shù)據(jù)和真實(shí)數(shù)據(jù)在feature層次的距離。
預(yù)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)可以在在高層提取圖片的抽象特征。FID通常使用Inception Net-V3全連接前的2048維向量作為圖片的feature。
直觀感受,FID是反應(yīng)生成圖片和真實(shí)圖片的距離,數(shù)據(jù)越小越好。
具體而言,FID是衡量?jī)蓚€(gè)多元正態(tài)分布的距離,其公式如下
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)
特點(diǎn):
- 刷分不會(huì)導(dǎo)致生成圖片質(zhì)量變差
- 生成模型的訓(xùn)練集可以和Inception Net-V3不同
- FID是衡量多元正態(tài)分布直接按的距離,但提取的圖片特征不一定是符合多元正態(tài)分布的
- 無(wú)法解決過(guò)擬合問(wèn)題,如果生成模型只能生成和訓(xùn)練集一模一樣的數(shù)據(jù)無(wú)法檢測(cè)
代碼:
計(jì)算FID的代碼上傳到這里了–>pytorch_fid
FVD ↓\downarrow↓
基本思想: 相當(dāng)于把FID的圖像特征提取網(wǎng)絡(luò)換成視頻特征提取網(wǎng)絡(luò),其他都差不多。
幾種叫法:
來(lái)源論文: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
來(lái)源論文:Latent Video Transformer
3D特征提取器分析:
- 參考FID,已知生成模型的訓(xùn)練集可以和特征提取器不同。但是根據(jù)《video-to-video synthesis》論文里的結(jié)果,使用不同特征提取器的結(jié)果會(huì)不一樣,目前github和谷歌上都搜不到FVD比較官方的實(shí)現(xiàn),不能確定用哪個(gè)特征提取器;
- BoGAN中沒(méi)有明確指出用的哪個(gè)3D特征提取器,其他幾篇指出用的kinetic-400中訓(xùn)練的3D ConvNet(C3D)。
- 但是目前同樣沒(méi)有找到kinetics提供的這個(gè)預(yù)訓(xùn)練3D ConvNet,不過(guò)《video-to-video synthesis》中用到的I3D可以找到kinetics-400上預(yù)訓(xùn)練的checkpoint,故我的工作里目前使用I3D。
代碼: 把特征提取器換掉參考FID的小修改就可以了。
CLIPSIM ↑\uparrow↑
來(lái)源論文:GODIVA
使用論文:GODIVA、NVWA、make-a-video
基本思想:
利用具有zero-shot能力的多模態(tài)模型CLIP輸出文本和圖像相似度,在視頻任務(wù)中使用時(shí)采取每一幀相似度的平均值。
使用:
參考這個(gè)工具和CLIP代碼自己改編一下就好,我代碼寫太爛就不放了
CLIP-as-sevice
CLIP代碼參考1
CLIP代碼參考2
大致思路是用這個(gè)工具獲得valid set的幀編碼&文本編碼,然后可以獲得對(duì)應(yīng)文本圖像對(duì)的相似度,對(duì)每一幀都算,然后取均值。
(用這個(gè)思路寫的代碼測(cè)試過(guò)make-a-video結(jié)果,跑出來(lái)的數(shù)差不多,但不知道對(duì)不對(duì),也沒(méi)找到官方代碼,如果有不對(duì)歡迎交流)
Acc ↑\uparrow↑
來(lái)源論文:T2V&TFGAN,用于Kinetic數(shù)據(jù)集
使用論文:T2V、TFGAN、NVWA
基本思想:相當(dāng)于IS指標(biāo)的變種
GFLOPs
參考鏈接:輕量級(jí)神經(jīng)網(wǎng)絡(luò)
區(qū)分:
- FLOPS (全部大寫)是floating-point operations per second的縮寫,意指每秒浮點(diǎn)運(yùn)算次數(shù)。用來(lái)衡量硬件的性能。
常用當(dāng)然還有GFLOPs和TFLOPs
GFLOPS 就是 Giga Floating-point Operations Per Second,即每秒10億次的浮點(diǎn)運(yùn)算數(shù),常作為GPU性能參數(shù)但不一定代表GPU的實(shí)際表現(xiàn),因?yàn)檫€要考慮具體如何拆分多邊形和像素、以及紋理填充,理論上該數(shù)值越高越好。1GFlops = 1,000MFlops。 - FLOPs 是floating point of operations的縮寫,是浮點(diǎn)運(yùn)算次數(shù),可以用來(lái)衡量算法/模型復(fù)雜度。
如何計(jì)算FLOPs
對(duì)于卷積層而言,FLOPs的計(jì)算公式如下:
FLOPs=2HW(CinK2+1)CoutFLOPs = 2HW( C_{in}K^2+ 1 )CoutFLOPs=2HW(Cin?K2+1)Cout
其中的Cin是指卷積層輸入tensor的通道數(shù),Cout指的是卷積層輸出tensor的通道數(shù)。K指的是卷積核大小。
而后把常數(shù)項(xiàng)去掉,簡(jiǎn)化小操作:
FLOPs=HW(CinK2)CoutFLOPs = HW( C_{in}K^2 )CoutFLOPs=HW(Cin?K2)Cout
而在實(shí)際中,我們不可能自己計(jì)算FLOPs,所以,本著能找?guī)炀驼規(guī)斓穆斆鞑拍?#xff0c;查了一下,還真有相關(guān)計(jì)算FLOPs的庫(kù),現(xiàn)查到的有兩個(gè)庫(kù),一個(gè)是torchstat以及thop。經(jīng)過(guò)測(cè)試,基本上兩個(gè)可以對(duì)齊的,所以說(shuō),任意選擇一個(gè)就好。具體用法寫兩個(gè)小demo吧。
而在實(shí)際中,我們不可能自己計(jì)算FLOPs,所以,本著能找?guī)炀驼規(guī)斓穆斆鞑拍?#xff0c;查了一下,還真有相關(guān)計(jì)算FLOPs的庫(kù),現(xiàn)查到的有兩個(gè)庫(kù),一個(gè)是torchstat以及thop。經(jīng)過(guò)測(cè)試,基本上兩個(gè)可以對(duì)齊的,所以說(shuō),任意選擇一個(gè)就好。具體用法寫兩個(gè)小demo吧。
對(duì)于torchstat:
from torchstat import stat import torchvision.models as modelsmodel = model.densenet121() stat(model, (3, 224, 224))對(duì)于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庫(kù) import torch from thop import profile net = model() # 定義好的網(wǎng)絡(luò)模型 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作為指標(biāo)呢?
作者認(rèn)為有如下幾個(gè)原因:
1)FLOPs沒(méi)有考慮幾個(gè)對(duì)速度有相當(dāng)大影響的重要因素。
2)計(jì)算平臺(tái)的不同。
3) FLOPs沒(méi)有考慮幾個(gè)對(duì)速度有相當(dāng)大影響的重要因素:MAC和并行度
Params
參考鏈接
獲取該值:
例1
這是網(wǎng)上很常見的直接用自帶方法計(jì)算params,基本不會(huì)出錯(cuò)。勝在簡(jiǎn)潔。
例2
#model = 你自己的模型,eg:CNN() ResNet() SegNet()....params = list(model.parameters())k = 0for i in params:l = 1print("該層的結(jié)構(gòu):" + str(list(i.size())))for j in i.size():l *= jprint("該層參數(shù)和:" + str(l))k = k + lprint("總參數(shù)數(shù)量和:" + str(k))Runtime
對(duì)比inference speeds
這個(gè)值怎么獲取沒(méi)弄懂
相關(guān)論文里也沒(méi)有講解,待更新…
總結(jié)
以上是生活随笔為你收集整理的文本生成视频相关指标整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win10软件卸载残留删除的一种方法
- 下一篇: 2018年江苏大学885编程题