使用Pytorch实现UCF101视频分类

article/2025/3/19 9:38:42

开源代码:https://github.com/jfzhang95/pytorch-video-recognition

系统:Ubuntu16.04 显卡1070

编译器:pycharm

UCF数据集包括101类视频,分别是:

1 ApplyEyeMakeup
2 ApplyLipstick
3 Archery
4 BabyCrawling
5 BalanceBeam
6 BandMarching
7 BaseballPitch
8 Basketball
9 BasketballDunk
10 BenchPress
11 Biking
12 Billiards
13 BlowDryHair
14 BlowingCandles
15 BodyWeightSquats
16 Bowling
17 BoxingPunchingBag
18 BoxingSpeedBag
19 BreastStroke
20 BrushingTeeth
21 CleanAndJerk
22 CliffDiving
23 CricketBowling
24 CricketShot
25 CuttingInKitchen
26 Diving
27 Drumming
28 Fencing
29 FieldHockeyPenalty
30 FloorGymnastics
31 FrisbeeCatch
32 FrontCrawl
33 GolfSwing
34 Haircut
35 HammerThrow
36 Hammering
37 HandstandPushups
38 HandstandWalking
39 HeadMassage
40 HighJump
41 HorseRace
42 HorseRiding
43 HulaHoop
44 IceDancing
45 JavelinThrow
46 JugglingBalls
47 JumpRope
48 JumpingJack
49 Kayaking
50 Knitting
51 LongJump
52 Lunges
53 MilitaryParade
54 Mixing
55 MoppingFloor
56 Nunchucks
57 ParallelBars
58 PizzaTossing
59 PlayingCello
60 PlayingDaf
61 PlayingDhol
62 PlayingFlute
63 PlayingGuitar
64 PlayingPiano
65 PlayingSitar
66 PlayingTabla
67 PlayingViolin
68 PoleVault
69 PommelHorse
70 PullUps
71 Punch
72 PushUps
73 Rafting
74 RockClimbingIndoor
75 RopeClimbing
76 Rowing
77 SalsaSpin
78 ShavingBeard
79 Shotput
80 SkateBoarding
81 Skiing
82 Skijet
83 SkyDiving
84 SoccerJuggling
85 SoccerPenalty
86 StillRings
87 SumoWrestling
88 Surfing
89 Swing
90 TableTennisShot
91 TaiChi
92 TennisSwing
93 ThrowDiscus
94 TrampolineJumping
95 Typing
96 UnevenBars
97 VolleyballSpiking
98 WalkingWithDog
99 WallPushups
100 WritingOnBoard
101 YoYo

本文实验使用的所有python包版本为:

joblib        0.14.1      
numpy         1.18.5      
opencv-python 3.4.1.15    
pip           19.0.3      
protobuf      3.14.0      
scikit-learn  0.22.2.post1
scipy         1.4.1       
setuptools    40.8.0      
six           1.15.0      
tensorboardX  2.1         
torch         0.4.0       
tqdm          4.53.0

训练视频分类模型的方法可以参考开源代码的Readme。本文实验nEpochs改为50,snapshot改为5。train和val在训练完成后的准确率分别为99.7%和96%。训练完成后会在工程路径下产生一个run文件,如下:

模型下载:https://pan.baidu.com/s/1ykXuyZdth0cSZBMuTsYJ_Q 
提取码:ajij 

--------------------

测试一个视频。我们选择MSVD数据集里面的DlOhXqKcLXk_7_14.avi,如图:

在训练工程中新建一个文件test.py,代码如下:

import torch
from torch import nn
import cv2 as cv
import numpy as np
from network import C3D_modelif __name__=='__main__':model = C3D_model.C3D(num_classes=101, pretrained=False)model = model.cuda()checkpoint = torch.load('/home/dl/PycharmProjects/video_classify/run/run_0/models/C3D-ucf101_epoch-49.pth.tar', map_location=lambda storage, loc: storage)model.load_state_dict(checkpoint['state_dict'])model.eval()capture = cv.VideoCapture('/home/dl/PycharmProjects/video_classify/DlOhXqKcLXk_7_14.avi')frame_count = int(capture.get(cv.CAP_PROP_FRAME_COUNT))frame_width = int(capture.get(cv.CAP_PROP_FRAME_WIDTH))frame_height = int(capture.get(cv.CAP_PROP_FRAME_HEIGHT))EXTRACT_FREQUENCY = 4clip_len = 16resize_height = 128resize_width = 171crop_size = 112count = 0retaining = True#get frame frome video skip 4frames = []while (count < frame_count and retaining):retaining, frame = capture.read()if frame is None:continueif count % EXTRACT_FREQUENCY == 0:frame = cv.resize(frame, (resize_width, resize_height))frames.append(frame)count += 1#rgb int to buf float32buffer = np.empty((frame_count, resize_height, resize_width, 3), np.dtype('float32'))for i, frame in enumerate(frames):frame = np.array(frame).astype(np.float64)buffer[i] = frame#c3d model need [112,112] and 16 frames#time_index = np.random.randint(buffer.shape[0] - clip_len)height_index = np.random.randint(buffer.shape[1] - crop_size)width_index = np.random.randint(buffer.shape[2] - crop_size)buffer = buffer[0:0 + clip_len,height_index:height_index + crop_size,width_index:width_index + crop_size, :]#normalizefor i, frame in enumerate(buffer):frame -= np.array([[[90.0, 98.0, 102.0]]])buffer[i] = frame#trans shape to [1,3,16,112,112]crop_buffer = buffer.transpose(3, 0, 1, 2)crop_buffer = np.expand_dims(crop_buffer, axis=0)input = torch.from_numpy(crop_buffer)input = input.cuda()#with torch.no_grad():output = model(input)probs = nn.Softmax(dim=1)(output)preds = torch.max(probs, 1)[1]print(preds)

输出为62(ID范围为[0~100]共101类),对应上面的 63 PlayingGuitar。


http://chatgpt.dhexx.cn/article/UiEp92wX.shtml

相关文章

动作识别0-02:mmaction2(SlowFast)-官方数据训练测试-ucf101

以下链接是个人关于mmaction2(SlowFast-动作识别) 所有见解&#xff0c;如有错误欢迎大家指出&#xff0c;我会第一时间纠正。有兴趣的朋友可以加微信&#xff1a;17575010159 相互讨论技术。若是帮助到了你什么&#xff0c;一定要记得点赞&#xff01;因为这是对我最大的鼓励。…

01【C3D 行为识别】项目下载 环境配置 数据集转化视频帧 UCF101数据集处理

目录 一&#xff0c;创建实例二&#xff0c;环境的快速搭建三&#xff0c;UCF101数据集处理3.1 准备视频文件3.2 下载标注文件3.3 抽取视频帧3.4 生成文件列表最后结构 四&#xff0c;参考 【C3D 行为识别】总目录 实战 复现代码解析自定义数据集 B站视频&#xff1a; https:/…

我的AI之路(52)--如何制作自己的UCF101数据集

前面说过如何用自己的UCF101数据集训练3D识别模型video-caffe&#xff0c;那么怎么制作自己的UCF101数据集呢&#xff1f;这个稍微有点复杂。 UCF101数据集其实是按101个动作类别分类了的短视频的集合&#xff0c;每类动作对应一个目录&#xff0c;每个目录下有很多avi格式的视…

时空行为检测数据集 JHMDB UCF101_24 详解

文章目录 0. 前言1. JHMDB1.1. 基本情况1.2. 数据准备以及标签详解 2. UDF101_242.1. 基本情况2.2. 数据准备与标签详解 3. 数据集可视化代码 0. 前言 现在常用的时空行为检测数据集只有AVA/JHMDB/UCF101_24。 AVA数据集是每一秒标一帧&#xff0c;更多信息可以参考我的笔记。…

行为识别TSM训练ucf101数据集

序言 最近有个行为检测的需求&#xff0c;打算用行为识别做&#xff0c;纯小白入这个方向&#xff0c;啃了两周的TSM原理和源码&#xff0c;训练好自己的数据集后&#xff0c;发现好像没法应用到自己的需求场景&#xff1f;&#xff1f;玛德&#xff01;算了&#xff0c;还是要…

UCF101数据集处理

UCF101数据集处理 在复现动作识别类的算法时&#xff0c;常需要用到数据集。ucf101就是其中一个。 之前复现代码时所用的ucf101数据集是直接将原数据集中的视频处理成图片。数据集目录如下&#xff1a; UCF101/ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01/img_00001.jpg (此时通过…

深度学习视频数据集(动作识别):UCF-101

UCF-101 官网&#xff1a;https://www.crcv.ucf.edu/research/data-sets/ucf101/ 网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1RsJuykWyUlQ4_c1TwqxR_Q 提取码&#xff1a;909g 官方解释 UCF101是一个现实动作视频的动作识别数据集&#xff0c;收集自YouTub…

UCF101数据集提取帧+TDN部署(Anaconda+Python3.7+Pytorch)

UCF101数据集提取帧TDN部署&#xff08;AnacondaPython3.7Pytorch&#xff09; 前言一、安装MMAction21.引入库2.环境搭建3.安装4.准备原始数据集5.制作视频提取帧数据集 二、部署TDN1.引入库2.读入数据3.训练模型4.查看结果 本人实测结果 前言 将TDN部署在个人电脑上&#xf…

UCF101动作识别数据集简介绍及数据预处理

文章目录 一、数据集简介&#xff1a;二、数据集获取及解压缩&#xff1a;1. 数据下载2. 数据集解压缩&#xff1a; 三、数据集划分四、数据集预处理1. 生成pkl文件2. 直接对视频文件处理 一、数据集简介&#xff1a; UCF101是一个现实动作视频的动作识别数据集&#xff0c;收…

【Java】内部类的定义

目录 一、前言 二、内部类 语法格式&#xff1a; static修饰内部类 内部类未被static修饰时&#xff1a; 内部类被static修饰后 演示操作&#xff1a; 一、前言 前面我们学习了一个小的项目&#xff0c;现在我们来学习新的知识点&#xff0c;关于内部类的描述&#xff0…

Java类的定义、声明及使用

1、 class 类名称{属性方法} 2、声明一个类需要通过一个关键字class 3、类与对象的关系 1&#xff09;类是对某一类事物的描述&#xff0c;是抽象的、概念上的意义&#xff0c;对象是实际存在的该类事物的每一个个体&#xff0c;也被称为实例。 package classdemo; class …

C#类的定义

在C#语言中创建的任何项目都有类的存在&#xff0c;通过类能很好地体现面向对象语言中封装、继承、多态的特性。 类的访问修饰符&#xff1a;用于设定对类的访问限制&#xff0c;包括 public、internal 或者不写&#xff0c;用 internal 或者不写时代表只能在当前项目中访问类…

C#类的定义和声明及使用

类的定义 类的成员 } 例如&#xff0c;以水果为例来声明一个类&#xff0c;代码如下&#xff1a;在 C# 语言中创建的任何项目都有类的存在&#xff0c;通过类能很好地体现面向对象语言中封装、继承、多态的特性。 简单的来说&#xff0c;在C#编程里&#xff0c;类是一种数据结…

(27)python类的定义和使用

面向对象初步 面向对象&#xff08;Object oriented Programming&#xff0c;OOP&#xff09;编程的思想主要是针对大型软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好&#xff0c;使的编程可以像搭积木一样简单。 面向对象编程将数据和操作数据相关的方法封装…

类的认识和定义

前言 C为啥要引入类这个概念呢&#xff0c;以C实现栈为例说明。 typedef int STDataType; typedef struct Stack { . . . .int top; . . . .STDataType* data; . . . .int capacity; }Stack; void StackInit(Stack* ps); //栈的初始化 void StackDestory(Stack* ps); //栈的销…

Python类的定义

类的定义&#xff1a;我们把对象比作一个“饼干”&#xff0c;类就是制造这个饼干的模具。通过类定义数据类型的属性和方法&#xff0c;也就是说&#xff0c;“类将行为和状态打包在一起”。 类的结构 方法&#xff08;函数&#xff09;..............行为 属性&#xff08;…

java类的定义

目录 一、概念二、使用1.成员变量2.成员方法3.权限修饰符4.静态方法 三、重写toString方法 一、概念 我们不能将一个事物称之为一类事物&#xff0c;例如一只鸟我们不能称为鸟类&#xff0c;但是我们需要给一类事物统称&#xff0c;例如大雁&#xff0c;麻雀&#xff0c;燕子&…

C++ 类的定义与使用

十二、类与对象 对象&#xff1a;就是我们生活中的具体事物&#xff0c;看得见摸得到&#xff0c;有一定的属性和行为或操作方式 面向对象&#xff1a;是一种软件的开发方法&#xff0c;对象所指的是计算机系统中的某一个成分。在面向对象程序设计中&#xff0c;对象包含两个…

4.类的定义,变量类型,方法类型

文章目录 1.类的概念1.1 如何创建一个类1.2 如何定义一个类1.2.1变量1.2.2 方法 2.对象3.类定义使用实例4.理解类和对象的关系4.1.一个java程序和类之间的关系 5.细节知识分析5.1.类与类的关系5.2.变量和变量区别5.3.方法的区别5.4.类方法和类变量的特点 1.类的概念 类java是基…

关于类的定义

类的定义 类的概念如何定义类修饰符 类的概念 1、类是把事物的数据与相关功能封装到一起&#xff0c;形成一种特殊的数据结构&#xff0c;用以表达真是事物的一种抽象&#xff1b;而对象则是实际存在的属该类事物的具体个体&#xff0c;因而也称为实例&#xff08;instance&am…