「深度学习一遍过」必修28:基于C3D预训练模型训练自己的视频分类数据集的设计与实现

本专栏用于记录关于深度学习的笔记,不光方便自己复习与查阅,同时也希望能给您解决一些关于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。
专栏地址:「深度学习一遍过」必修篇 

目录

1 DownLoad or Clone 

2 数据集准备

3 代码调试

3.1 下载预训练模型

3.2 配置数据集和预训练模型路径

3.3 修改 label.txt 文件

3.4 运行 train.py

3.5 运行 inference.py


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

1 DownLoad or Clone 

Linux: 

git clone https://github.com/jfzhang95/pytorch-video-recognition.git
cd pytorch-video-recognition

Windows:

2 数据集准备

数据集目录树如下所示:

数据集文件夹名
├── 类别1
│   ├── 类别1_1.mp4
│   └── ...
├── 类别2
│   ├── 类别2_1.mp4
│   └── ...
└── 类别3
│   ├── 类别2_1.mp4
│   └── ...

经过预处理后,输出目录的结构如下:

数据集文件夹名
├── 类别1
│   ├── 类别1_1
│   │   ├── 类别1_1_1.jpg
│   │   └── ...
│   └── ...
├── 类别2
│   ├── 类别2_1
│   │   ├── 类别2_1_1.jpg
│   │   └── ...
│   └── ...
└── 类别3
│   ├── 类别3_1
│   │   ├── 类别3_1_1.jpg
│   │   └── ...
│   └── ...

 补充:预处理代码

#!/usr/bin/python
# -*- coding:utf-8 -*-
import cv2

VideoCap = cv2.VideoCapture('此处填写mp4/avi文件地址')
# eg:VideoCap = cv2.VideoCapture('E:/DATA/one/1.mp4')
i = 1

while True:
    _, img = VideoCap.read()
    save_path = '此处填写保存的每一帧图像的文件路径'
    # eg:save_path = 'E:/data/one/1/' + str(i) + '.jpg'
    cv2.imwrite(save_path, img)
    print(save_path)
    i = i + 1
    if _ == False:
        break

3 代码调试

3.1 下载预训练模型

百度云或 GoogleDrive下载预训练模型。目前仅支持 C3D 的预训练模型。

3.2 配置数据集和预训练模型路径

 在 mypath.py 中配置数据集和预训练模型路径 。 

  

这一步仅修改上图红框内的路径内容即可。

3.3 修改 label.txt 文件

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

  

根据自己数据集改写 label.txt 文件(如上图修改 dataloaders/ucf_{-}labels.txt 文件)

比如修改成:

  

3.4 运行 train.py

解决报错一:ValueError: could not broadcast input array from shape (720,1280,3) into shape (128,171,3)

方法一:resize 输入数据集图像大小为 128×171

方法二:修改 dataloaders/dataset.py 中约 31~33 行变量参数为 720×1280

修改前:

  

修改后:

 

解决报错二:RuntimeError: Expected object of scalar type Long but got scalar type Int for argument #2 'target' in call to _thnn_nll_loss_forward

方法:将变量强制转换为 Long 型

将 train.py 文件中约第 137 行代码改写为 labels.long()

修改前:

修改后: 

解决报错三:ValueError: num_samples should be a positive integer value, but got num_samp=0 

方法:shuffle 参数设置为 False

将 train.py 文件中约 97 行位置的 shuffle=True 修改为 shuffle=False

修改前:

修改后:

一般而言,解决完这三个问题即可训练自己的数据集。

3.5 运行 inference.py

修改 31 行模型运行路径

修改 37 行测试视频路径


欢迎大家交流评论,一起学习

希望本文能帮助您解决您在这方面遇到的问题

感谢阅读
END

  • 5
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
要进行行为识别C3D训练自己的数据集,首先需要进行以下步骤: 1. 准备数据集:根据您的需求,收集并准备合适的训练数据集。可以使用视频数据来进行训练,常见的视频行为识别数据库包括UCF101、HMDB-51、Something-Something V2、AVA v2.2、Kinetic-700等[2]。UCF101是分类任务,而AVA v2.2是检测任务。您可以选择合适的数据库或根据您的需求自行收集视频数据。 2. 数据预处理:对于C3D训练,需要对数据进行预处理。根据引用中提供的信息,UCF101数据集的视频文件已经按照类别存放于不同的文件夹下。您可以按照自己的数据集的组织方式进行调整。此外,还可以对视频进行剪辑、采样和调整分辨率等操作,以适应模型的输入要求。 3. 划分训练集和测试集:根据您的需要,将数据集划分为训练集和测试集。可以使用已有的数据集划分方式,例如UCF101数据集的trainlist和testlist文件,或者根据您的需求自行划分。 4. 准备标签文件:为训练数据集准备标签文件,标明每个视频的类别或动作。可以参考已有的标签文件,例如UCF101数据集的classInd.txt文件。 5. 配置环境:确保您已经正确配置了C3D行为识别模型的训练环境。这包括安装必要的依赖库和框架,并配置好GPU加速等。 6. 训练模型:使用C3D模型对准备好的数据集进行训练。可以根据已有的代码或框架进行训练,例如使用C3D模型在PyTorch框架下进行训练。您可以参考引用中提供的相关项目下载和复现的信息。 总结起来,要进行行为识别C3D训练自己的数据集,您需要准备合适的数据集,进行数据预处理,划分训练集和测试集,准备标签文件,配置环境,然后使用C3D模型对数据集进行训练。以上是一个基本的步骤,具体的实施细节还需根据您的具体需求和环境进行调整。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣仔!最靓的仔!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值