3D resnet根据UCF101数据集制作自己的数据集实现动作识别

3D resnet根据UCF101数据集制作自己的数据集实现动作识别

配置要求

作者代码 3D resnet

  • pytorch>0.4
  • FFmpeg, FFprobe
  • Python 3
    我这里使用的是torch1.8.1+cu102+torchvision0.9.1

数据集

为了测试作者代码的准确性,我先下载原作者所使用的数据集,作者所使用的4个数据集分别是ActivityNet,Kinetics,UCF-101,HMDB-51,其实最开始是想使用Kinetics700数据集,但在网上查阅资料发现,该数据集是来自youtube,下载不仅慢,而且有可能视频资源已经不存在,因此我最终选择UCF-101数据集,需要下载该数据集的童鞋记住!血泪教训!一定要用迅雷下载!
数据集下载链接在此:UCF101
数据集划分链接:https://www.crcv.ucf.edu/wp-content/uploads/2019/03/UCF101TrainTestSplits-RecognitionTask.zip

数据集结构

data
	UCF101_videos
	  	ApplyEyeMakeup
	  	...
	  	YoYo
 
  	UCF101_jpg
	  	ApplyEyeMakeup
	  	...
	  	YoYo
  	
  	UCF101_json
  		ucf101_01.json
 
  	UCF101_txt
	  	classInd.txt
	  	testlist01.txt
	  	testlist02.txt
	  	testlist03.txt
	  	trainlist01.txt
	  	trainlist02.txt
	  	trainlist03.txt
 
  	models
  		resnet-50-kinetics.pth #需要去下载
 
    results

将解压好的视频数据集全部放入UCF101_videos文件夹中,将数据集划分文件txt放入UCF101_txt文件夹中

构建数据集

在代码中作者其实已经给出划分数据集的代码,将数据集按7:3的比例划分训练集与测试集,如下:

python -m util_scripts.generate_video_jpgs data/UCF101_videos data/UCF101_jpg ucf101

data/UCF/UCF101_videos为数据集路径,data/UCF101_jpg为保存图片路径,它会自动将每个视频拆分的图片保存成一个文件夹存在data/UCF101_jpg里,ucf101为数据集名称

接着生成标注文件,如下:

python -m util_scripts.ucf101_json data/UCF101_txt data/UCF101_jpg data/UCF101_json

data/UCF101_txt为下载好的切分数据集的txt文件,data/UCF101_json为保存数据集标注文件夹。
再生成json文件时,我们可能遇到这种问题:

Error tokenizing data. C error: Expected 6 fields in line 3, saw 9

我的做法是将txt文件转换为csv文件在将util_scripts.ucf101_json中部分代码所用的文件后缀修改就可以生成json文件。(方法不唯一)

生成的json文件打开之后,可能会遇到这种情况:

"labels": [NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN,NAN]

这个时候只需要手动的将这个label改为classInd.txt里面的标签就可以,记住,一定要加双引号,不可以用单引号,如下:

"labels": ["Basketball","BasketballDunk","Biking","CliffDiving","CricketBowling","Diving","Fencing","FloorGymnastics","GolfSwing","HorseRiding","IceDancing","LongJump","PoleVault","RopeClimbing","SalsaSpin","SkateBoarding","Skijet","SoccerJuggling","Surfing","TennisSwing","TrampolineJumping","VolleyballSpiking","WalkingWithDog"]

训练

接下来就可以训练UCF101数据集,如下:

python main.py --root_path ./data --video_path UCF101_jpg/ --annotation_path  UCF101_json/ucf101_01.json \
--result_path results --dataset ucf101 --n_classes 101 --model resnet --model_depth 50 --batch_size 32 \
--n_threads 1 --checkpoint 10

–root_path为根目录,–video_path为数据集图片所在的位置,–annotation_path为标注文件速所在位置,–result_path为保存权重以及日志文件所在位置,–dataset为该数据集名称,–n_classes为该数据集的类别,–model与–model_depth为resnet 50,–batch_size设为32,–n_threads为只用1个GPU,–checkpoint为10个epoch保存一次。

测试

python main.py --root_path ./data --video_path UCF101_jpg/ --annotation_path  UCF101_json/ucf101_01.json \
--result_path results --dataset ucf101 --resume_path results/save_200.pth \
--model_depth 50 --n_classes 2 --n_threads 1 --no_train --no_val --inference --output_topk 5 --inference_batch_size 1

我们可以从results文件夹里的val.log查看每个测试集的类别和置信度。最后,我们就可以根据UCF101数据集的组成构建出自己的数据集与类别。最后,感谢各位大佬的分享,才能将该网络配置成功!

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
制作一个ResNet图像分类数据集,你需要遵循以下步骤: 1. 确定你的图像分类任务:决定你要训练模型来识别哪些类别的图像。例如,你可以选择动物、食物、车辆等类别。 2. 收集图像数据:收集大量属于各个类别的图像。你可以从互联网上搜索并下载图像,或者使用开放的图像数据库(如ImageNet、COCO等)。 3. 数据预处理:对收集到的图像进行预处理,以便与ResNet模型的输入要求相匹配。常见的预处理步骤包括:调整图像大小、归一化图像像素值、剪裁或填充图像等。 4. 数据标注:为每个图像分配正确的类别标签。标签应该与你在第一步中确定的类别一致。 5. 数据集划分:将数据集划分为训练集、验证集和测试集。通常,大部分数据用于训练,一小部分用于验证和测试。划分比例取决于你的数据集规模和任务要求。 6. 数据增强(可选):为了增加数据样本的多样性和模型鲁棒性,你可以应用一些数据增强技术,如旋转、翻转、裁剪、缩放等。 7. 数据加载:使用适当的库(如PyTorch、TensorFlow等)来加载和处理数据集。这些库可以帮助你以批处理的方式高效地加载数据。 8. 模型训练:使用ResNet模型或其变种,将数据集用于训练。你可以使用已有的预训练模型作为起点,或者从头开始训练一个新模型。 9. 模型评估:使用验证集对训练的模型进行评估,并根据性能指标(如准确率、精确率、召回率等)选择最佳模型。 10. 模型测试:使用测试集对最佳模型进行最后的性能评估。可以计算模型在测试集上的准确率或其他指标,以衡量其在真实环境中的表现。 11. 模型部署:将经过训练和测试的模型部署到实际应用中,如移动应用、网站或其他系统,以进行实时图像分类任务。 总之,制作一个ResNet图像分类数据集需要收集、处理、标注和划分数据,并在训练和测试过程中使用适当的技术和工具。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值