基于Movingmnist结构制作predrnn++的训练数据过程记录

5 篇文章 0 订阅
2 篇文章 0 订阅

Alpha pose数据准备部分可以看我之前的【文1】:
AlphaPose姿态估计 只输出骨架 源码修改 相关记录
关于PredRNN++的内容见【文2】:
predRNN++代码实战 tensorflow版本
本文代码详见我的GitHub库:Abalizzw/MovingMnist_DataMaker

1. Moving mnist数据集

因为用自己的数据训练PredRNN++需要制作自己的数据集,数据结构类似于Movingmnist,还不了解的同学可以看一下。
Moving_mnist data中的train.npz包含了三个部分。

它们的结构如下:

clips.npy
type = numpy.ndarray
shape = (2, 10000, 2)
[[0,10],[20,10]...[199980,10](1w)], [[10,10],[30,10]...[199990,10](1w)]]
dims.npy
type = numpy.ndarray
shape = (1, 3)
[1, 64, 64]
input_raw_data.npy
type = numpy.ndarray
shape = (200000, 1, 64, 64)
[ [ [ [pixel*64] *64] ]*200000 ]

解释一下

  • 第一个文件clips表示输入帧和gt帧所在的图片位置,1w个视频每个被分为10帧,图片总数就是20w。
  • clips[0]的[0,10]表示0开始数10张,20开始往后的10张一直到第199980和往后的10张代表输入帧。同理剩下的图片被分为gt label。
  • dims表示了输入data的size,很好理解。
  • input_raw_data包含了1w个视频每一帧的图片,存储类型为np.ndarray,可以直接用opencv或matplotlib等python库可视化,64*64是一张图片,一共20w张,也很好理解。下面放一个可视化的例子和代码。
查看第100张图片:
import cv2
import numpy as np

data = np.load('./input_raw_data.npy')
pixel = data[100][0]
cv2.imshow('1', pixel)
cv2.waitKey(0)

在这里插入图片描述

下面我们只要仿照他的格式制作我们的数据就行了。

2. 数据的准备

数据的准备先由AlphaPose输出黑底的检测框,见【文1】,得到一系列的视频数据,我们需要使用ffmpeg或者opencv将视频切割成图片。
我使用的是opencv,代码入下:

#将视频转换成每帧图片
def video2img(input_dir, out_dir):
    vc = cv2.VideoCapture(input_dir+'train_0004.mp4')  # 读入视频文件
    n = 1  # 计数

    if vc.isOpened():  # 判断是否正常打开
        rval, frame = vc.read()
    else:
        rval = False

    timeF = 1  # 视频帧计数间隔频率

    i = 0
    while rval:  # 循环读取视频帧
        rval, frame = vc.read()
        if (n % timeF == 0):  # 每隔timeF帧进行存储操作
            i += 1
            print(i)
            # frame = cv2.resize(frame, (64, 64)) # resize
            cv2.imwrite(out_dir+'{}.png'.format(i), frame)  # 存储为图像
        n = n + 1
        cv2.waitKey(1)
    vc.release()

然后我们得到每帧的图片在一个文件夹下:
在这里插入图片描述

3. 数据的处理

将处理好的数据进行如下操作:

  • 三通道转单通道
  • 将像素转换为numpy.float32。
  • 归一化

附上代码:

import cv2

img = cv2.imread(r'Your path\img.png')
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 三通道-->单通道

img = np.float32(img) # 像素格式化
dst = np.zeros(img.shape, dtype=np.float32)
img = cv2.normalize(img, dst, alpha=0, beta=1.0, norm_type=cv2.NORM_MINMAX) #图像归一化
print(img.shape)

cv2.imwrite(r'Your path\img_gray.png', img)
cv2.imshow('1', img)
cv2.waitKey(0)

输出如下:

(640, 640)

在这里插入图片描述

4. 数据的保存

我们需要将图片数据转换成numpy格式并封装保存在.npy文件中,然后打包成npz文件。这里建议将每个视频分成相同数量的单帧,并且保证总数可以被10整除。其中每个数据文件的结构,维度,参数量,参数格式等有明确的要求。
如果您没有丰富的处理numpy数据经验,或是不想动源代码的data读取部分,或者和我一样初次接触这类numpy数据的制作,请看下我的另一篇文章,这将节省您的时间。

关于详细的数据保存方法和代码请移步这篇文章:
模仿制作自己的MovingMnist数据集【封装篇】

最后更新20210504

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
引用:手写数字识别数据MNIST是一个包括原始数据集的所有样本以及抽取的2000个样本的子集的数据集。它是美国著名数据集NIST的子集,常用于模式识别的实验数据集。这个数据集主要用于训练机器学习算法来识别手写数字。它包含了一系列的手写数字图像,每个图像都是28x28像素大小的灰度图像。这些图像被预处理成了特定的格式,以便机器学习算法可以直接使用。 关于load_digits数据集,没有在提供的引用内容中找到相关信息。但是一般来说,load_digits是sklearn库中一个用于加载手写数字数据集的函数。这个函数可以直接加载MNIST数据集,并将其转换为NumPy数组的形式,以便进行机器学习的任务。这个数据集包含了一些手写数字的图像和对应的标签,可以用于训练和测试机器学习算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【深度域适配】二、利用DANN实现MNISTMNIST-M数据集迁移训练](https://blog.csdn.net/lgzlgz3102/article/details/106644233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [MNIST-handwritten-digits.zip_HANDWRITTEN_MNIST_MNIST mat_MNIST识别](https://download.csdn.net/download/weixin_42651887/86140204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【时空序列预测实战】详解时空序列常用数据集之MovingMnist数据集(demo代码)](https://blog.csdn.net/qq_33431368/article/details/109302166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值