手機(jī)跑SOTA模型快8倍 Facebook AI開源超強(qiáng)全棧視頻庫PyTorchVideo
視頻已逐漸超過文字和圖片,可以說成為了現(xiàn)在使用最廣的媒體形式,同時也占據(jù)了用戶更多的瀏覽時間,這就使得視頻理解變得尤為重要。
各大互聯(lián)網(wǎng)公司與頂尖高校紛紛絞盡腦汁,競相研究SOTA的視頻理解模型與算法。
在谷歌,臉書,Open-MM Lab等分別祭出各家殺器之后,臉書人工智能實(shí)驗(yàn)室(Facebook AI)在推出PySlowFast之后時隔一年,攜PyTorchVideo重回戰(zhàn)場。

官方網(wǎng)站: https://pytorchvideo.org/
今天我們就來扒一下,PyTorchVideo究竟是怎樣的一個代碼庫,又如何能在開源當(dāng)天就躋身于GitHub Trending榜單。

PyTorchVideo哪兒都能用
不同于在座的各位視頻代碼理解框架只醉心于自家框架,無法移步與其他代碼庫。
PyTorchVideo像是torchvision等基礎(chǔ)代碼庫一般,「哪兒都能用」!PyTorchVideo不但可以用在視頻理解任務(wù)中,甚至可以用在其他任務(wù)的代碼庫。
臉書人工智能實(shí)驗(yàn)室的大佬們不但在「自家人」的PySlowFast代碼庫上無縫使用上了PyTorchVideo,并且還在Classy Vision,PyTorch Lightening等等框架上無縫插入。
作為含著金鑰匙出生的PyTorchVideo,其直接成為了PyTorch Lightning-Flash的視頻理解擔(dān)當(dāng),作為基礎(chǔ)庫被默認(rèn)使用。
這不,在FiftyOne項目中,開源社區(qū)的吃瓜群眾就利用Lightning-Flash搞出了一個瀏覽視頻的工具箱,可以直接查看視頻的動作類別。
FiftyOne: https://medium.com/pytorch/ushering-in-the-new-age-of-video-understanding-with-pytorch-1d85078e8015
PyTorchVideo啥都能做
更厲害的是,PyTorchVideo似乎「啥都能做」!不但在視頻分類,動作檢測等任務(wù)中深耕SOTA。
甚至還「略懂」LeCun最愛的自監(jiān)督學(xué)習(xí),以及音頻事件檢測等等千奇百怪的任務(wù)也不在話下。
基于PyTorchVideo的SlowFast模型進(jìn)行動作監(jiān)測
PyTorchVideo手機(jī)也能玩
更喪心病狂的是,PyTorchVideo一并開源了移動端的加速優(yōu)化,不但提供了手把手的教程,將視頻模型一步步優(yōu)化核心Kernel,量化(quantilize)加速。
數(shù)倍加速后在移動端實(shí)時運(yùn)行,甚至官方直接暴力放出Android和iOS移動端開源代碼,將SOTA的視頻模型直接塞到手機(jī)里跑著玩玩。
在三星Galaxy S10手機(jī)上運(yùn)行的PyTorchVideo加速X3D模型,運(yùn)行速度快8倍,處理一秒視頻大約需要130毫秒
PyTorchVideo是個啥
PyTorchVideo的真身是一個視頻理解的機(jī)器學(xué)習(xí)庫,可以服務(wù)于各種代碼庫,以及各類SOTA視頻模型模型和開源視頻模型。
以及各種視頻基礎(chǔ)算法,視頻數(shù)據(jù)操作,各類流行視頻數(shù)據(jù)集,視頻增廣,視頻模型加速量化,等等一些列的全棧視頻相關(guān)內(nèi)容。
PyTorchVideo怎么玩
首先pip一下。
- pip install pytorchvideo
然后,在瀏覽官方的教程并上手實(shí)驗(yàn)了一下之后,發(fā)現(xiàn)通過PyTorchVideo只需要寥寥幾行就可以訓(xùn)練一個視頻模型:
- from pytorchvideo import data, models, accelerator
- # Create visual and acoustic models.
- visual_model = models.slowfast.create_slowfast(
- model_num_class=400,
- )
- acoustic_model = models.resnet.create_acoustic_resnet(
- model_num_class=400,
- )
- # Create Kinetics data loader.
- kinetics_loader = torch.utils.data.DataLoader(
- data.Kinetics(
- data_path=DATA_PATH,
- clip_sampler=data.make_clip_sampler(
- "uniform",
- CLIP_DURATION,
- ),
- )
- batch_size=BATCH_SIZE,
- )
- # Deploy model.
- visual_net_inst_deploy = accelerator.deployment.\
- convert_to_deployable_form(net_inst, input_tensor)
那么從開源的訓(xùn)練模型庫中直接使用模型效果如何?
- model = torch.hub.load("facebookresearch/pytorchvideo", model=model_name, pretrained=True)
官方的模型庫太豐富,簡直眼花繚亂。
Kinetics-400
arch |
depth |
frame length x sample rate |
top 1 |
Flops (G) x views |
Params (M) |
C2D |
R50 |
8x8 |
71.46 |
25.89 x 3 x 10 |
24.33 |
I3D |
R50 |
8x8 |
73.27 |
37.53 x 3 x 10 |
28.04 |
Slow |
R50 |
4x16 |
72.40 |
27.55 x 3 x 10 |
32.45 |
Slow |
R50 |
8x8 |
74.58 |
54.52 x 3 x 10 |
32.45 |
SlowFast |
R50 |
4x16 |
75.34 |
36.69 x 3 x 10 |
34.48 |
SlowFast |
R50 |
8x8 |
76.94 |
65.71 x 3 x 10 |
34.57 |
SlowFast |
R101 |
8x8 |
77.90 |
127.20 x 3 x 10 |
62.83 |
SlowFast |
R101 |
16x8 |
78.70 |
215.61 x 3 x 10 |
53.77 |
CSN |
R101 |
32x2 |
77.00 |
75.62 x 3 x 10 |
22.21 |
R(2+1)D |
R50 |
16x4 |
76.01 |
76.45 x 3 x 10 |
28.11 |
X3D |
XS |
4x12 |
69.12 |
0.91 x 3 x 10 |
3.79 |
X3D |
S |
13x6 |
73.33 |
2.96 x 3 x 10 |
3.79 |
X3D |
M |
16x5 |
75.94 |
6.72 x 3 x 10 |
3.79 |
X3D |
L |
16x5 |
77.44 |
26.64 x 3 x 10 |
6.15 |
Something-Something V2
arch |
depth |
pretrain |
frame length x sample rate |
top 1 |
Flops (G) x views |
Params (M) |
Slow |
R50 |
Kinetics 400 |
8x8 |
60.04 |
55.10 x 3 x 1 |
31.96 |
SlowFast |
R50 |
Kinetics 400 |
8x8 |
61.68 |
66.60 x 3 x 1 |
34.04 |
Charades
arch |
depth |
pretrain |
frame length x sample rate |
MAP |
Flops (G) x views |
Params (M) |
Slow |
R50 |
Kinetics 400 |
8x8 |
34.72 |
55.10 x 3 x 10 |
31.96 |
SlowFast |
R50 |
Kinetics 400 |
8x8 |
37.24 |
66.60 x 3 x 10 |
34.00 |
AVA (V2.2)
arch |
depth |
pretrain |
frame length x sample rate |
MAP |
Params (M) |
Slow |
R50 |
Kinetics 400 |
4x16 |
19.5 |
31.78 |
SlowFast |
R50 |
Kinetics 400 |
8x8 |
24.67 |
33.82 |
甚至通過PyTorchVideo加持的 Lightning Flash,分類視頻僅僅只需三行。
- from flash import VideoClassifier
- model = VideoClassifier.load_from_checkpoint("checkpoint_uri")
- model.predict("path_to_video_folder")
據(jù)官方博客透露,PyTorchVideo開源了一大票視頻模型,包括臉書人工智能實(shí)驗(yàn)室近期出現(xiàn)在ICCV,ICML等工作:
- Multiscale Vision Transformershttps://arxiv.org/abs/2104.11227
- A large-scale study on unsupervised spatiotemporal representation learninghttps://arxiv.org/abs/2104.14558
- Multiview pseudo-labeling for semi-supervised learning from videohttps://arxiv.org/abs/2104.00682
- Is space-time attention all you need for video understanding?https://arxiv.org/abs/2102.05095
- Keeping Your Eye on the Ball: Trajectory Attention in Video Transformershttps://arxiv.org/abs/2106.05392
- SlowFast networks for video recognitionhttps://arxiv.org/abs/1812.03982
- X3D: Expanding architectures for efficient video recognitionhttps://arxiv.org/abs/2004.04730
- Audiovisual SlowFast networks for video recognitionhttps://arxiv.org/abs/2001.08740
- Non-local neural networkshttps://arxiv.org/abs/1711.07971
- A closer look at spatiotemporal convolutions for action recognitionhttps://arxiv.org/abs/1711.11248
- Video classification with channel-separated convolutional networkshttps://arxiv.org/abs/1904.02811
似乎MultiScale Vision Transform也位列其中,有興趣的朋友可以去一探究竟。