前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「深度学习一遍过」必修28:基于C3D预训练模型训练自己的视频分类数据集的设计与实现

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

作者头像
荣仔_最靓的仔
发布2022-01-10 14:04:29
1.1K0
发布2022-01-10 14:04:29
举报

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

目录

1 DownLoad or Clone

2 数据集准备

3 代码调试

3.1 下载预训练模型

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

3.3 修改 label.txt 文件

3.4 运行 train.py

3.5 运行 inference.py


Github
Github

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

1 DownLoad or Clone

Linux:

代码语言:javascript
复制
git clone https://github.com/jfzhang95/pytorch-video-recognition.git
cd pytorch-video-recognition

Windows:

2 数据集准备

数据集目录树如下所示:

代码语言:javascript
复制
数据集文件夹名
├── 类别1
│   ├── 类别1_1.mp4
│   └── ...
├── 类别2
│   ├── 类别2_1.mp4
│   └── ...
└── 类别3
│   ├── 类别2_1.mp4
│   └── ...

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

代码语言:javascript
复制
数据集文件夹名
├── 类别1
│   ├── 类别1_1
│   │   ├── 类别1_1_1.jpg
│   │   └── ...
│   └── ...
├── 类别2
│   ├── 类别2_1
│   │   ├── 类别2_1_1.jpg
│   │   └── ...
│   └── ...
└── 类别3
│   ├── 类别3_1
│   │   ├── 类别3_1_1.jpg
│   │   └── ...
│   └── ...

补充:预处理代码

代码语言:javascript
复制
#!/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
mypath.py

​ 中配置数据集和预训练模型路径 。

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

3.3 修改 label.txt 文件

源码中

UCF
UCF

​ 数据集包括

101
101

​ 类视频,分别是:

根据自己数据集改写

label.txt
label.txt

​ 文件(如上图修改

dataloaders/ucf_{-}labels.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
resize

​ 输入数据集图像大小为

128
128

​×

171
171

方法二:修改

dataloaders/dataset.py
dataloaders/dataset.py

​ 中约

31
31

​~

33
33

​ 行变量参数为

720
720

​×

1280
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
Long

train.py
train.py

文件中约第

137
137

行代码改写为

labels.long()
labels.long()

修改前:

修改后:

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

方法:

shuffle
shuffle

参数设置为

False
False

train.py
train.py

​ 文件中约

97
97

行位置的

shuffle=True
shuffle=True

修改为

shuffle=False
shuffle=False

修改前:

修改后:

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

3.5 运行 inference.py

修改

31
31

行模型运行路径

修改

37
37

行测试视频路径

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 DownLoad or Clone
  • 2 数据集准备
  • 3 代码调试
    • 3.1 下载预训练模型
      • 3.2 配置数据集和预训练模型路径
        • 3.3 修改 label.txt 文件
          • 3.4 运行 train.py
            • 解决报错一:ValueError: could not broadcast input array from shape (720,1280,3) into shape (128,171,3)
            • 解决报错二:RuntimeError: Expected object of scalar type Long but got scalar type Int for argument #2 'target' in call to _thnn_nll_loss_forward
            • 解决报错三:ValueError: num_samples should be a positive integer value, but got num_samp=0
          • 3.5 运行 inference.py
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档