在 CAFFE 中使用 HDF5 进行视频分类?
Posted
技术标签:
【中文标题】在 CAFFE 中使用 HDF5 进行视频分类?【英文标题】:Video classification using HDF5 in CAFFE? 【发布时间】:2018-02-27 01:53:21 【问题描述】:我正在使用 hdf5 层进行视频分类 (C3D)。这是我生成 hdf5 文件的代码
import h5py
import numpy as np
import skvideo.datasets
import skvideo.io
videodata = skvideo.io.vread('./v_ApplyEyeMakeup_g01_c01.avi')
videodata=videodata.transpose(3,0,1,2) # To chanelxdepthxhxw
videodata=videodata[None,:,:,:]
with h5py.File('./data.h5','w') as f:
f['data'] = videodata
f['label'] = 1
现在,data.h5
保存在文件 video.list
中。我根据prototxt进行分类
layer
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
include
phase: TRAIN
hdf5_data_param
source: "./video.list"
batch_size: 1
shuffle: true
layer
name: "conv1a"
type: "Convolution"
bottom: "data"
top: "conv1a"
param
lr_mult: 1
decay_mult: 1
param
lr_mult: 2
decay_mult: 0
convolution_param
num_output: 32
pad: 1
kernel_size: 3
stride: 1
weight_filler
type: "msra"
bias_filler
type: "constant"
value: -0.1
axis: 1
layer
name: "fc8"
type: "InnerProduct"
bottom: "conv1a"
top: "fc8"
param
lr_mult: 1
decay_mult: 1
param
lr_mult: 2
decay_mult: 0
inner_product_param
num_output: 101
weight_filler
type: "gaussian"
std: 0.01
bias_filler
type: "constant"
value: 0
layer
name: "loss"
type: "SoftmaxWithLoss"
bottom: "fc8"
bottom: "label"
top: "loss"
但是,我得到了错误
I0918 22:29:37.163431 32197 hdf5.cpp:35] Datatype class: H5T_INTEGER
F0918 22:29:37.164500 32197 blob.hpp:122] Check failed: axis_index < num_axes() (1 vs. 1) axis 1 out of range for 1-D Blob with shape 6 (6)
更新:当我将代码更改为f['label'] = 1
时,我也收到错误F0918 23:04:39.884270 2138 hdf5.cpp:21] Check failed: ndims >= min_dim (0 vs. 1)
我应该如何解决它?我猜 hdf5 生成部分在标签字段中有一些错误。谢谢大家
【问题讨论】:
【参考方案1】:请仔细阅读你的答案linked:
您的 label
应该是一个整数,并且不是一个 1-hot 向量。
您的data
似乎是整数类型。我想你想把它转换成np.float32
。当你在做的时候,考虑减去平均值。
由于您的 HDF5 文件只有一个样本,因此您不能将 label
作为标量(“0 dim array”)。您需要将label
设为np.ones((1,1), dtype=np.float32)
。
使用h5ls ./data.h5
验证label
确实是一个数组而不是一个标量。
【讨论】:
谢谢,谢。当然,我之前检查标签为label=1
,我得到了错误Check failed: ndims >= min_dim (0 vs. 1)
。让我们看看我的更新问题
你是对的。它现在起作用了。非常感谢。如果我有 6 个标签会发生什么。比如视频1->标签1、视频2->标签2等等以上是关于在 CAFFE 中使用 HDF5 进行视频分类?的主要内容,如果未能解决你的问题,请参考以下文章