Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于MPII人体姿势数据集的Keras分类器训练_Python_Machine Learning_Keras_Computer Vision - Fatal编程技术网

Python 基于MPII人体姿势数据集的Keras分类器训练

Python 基于MPII人体姿势数据集的Keras分类器训练,python,machine-learning,keras,computer-vision,Python,Machine Learning,Keras,Computer Vision,我正在尝试使用MPII人类姿势数据集(found)来训练Keras中的神经网络。默认情况下,数据集是MATLAB格式的,但我使用scipy.io.loadmat将其加载到Numpy数组中。但是,我无法理解它生成的对象-它似乎包含一个名为'RELEASE'的键,并将数据集的注释作为值。我的问题是,我不知道如何访问数据集并将其拆分为注释 我非常感谢您对此问题的帮助。MPII data annotations.mat文件来自matlab,它是matlab中的一种结构类型,因此如果您想使用scipy.i

我正在尝试使用MPII人类姿势数据集(found)来训练Keras中的神经网络。默认情况下,数据集是MATLAB格式的,但我使用
scipy.io.loadmat
将其加载到Numpy数组中。但是,我无法理解它生成的对象-它似乎包含一个名为
'RELEASE'
的键,并将数据集的注释作为值。我的问题是,我不知道如何访问数据集并将其拆分为注释


我非常感谢您对此问题的帮助。

MPII data annotations.mat文件来自matlab,它是matlab中的一种结构类型,因此如果您想使用scipy.io.loadmat处理它,您应该添加如下参数:

matph = './mpii_human_pose_v1_u12_1.mat'
mat = sio.loadmat(matph, struct_as_record=False) # add here
object1 = release[0,0]
print(object1._fieldnames)
['annolist', 'img_train', 'version', 'single_person', 'act', 'video_list']
annolist = object1.__dict__['annolist']
print(annolist, type(annolist), annolist.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1810>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1850>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1910>,
        ...,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd3db7f1710>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd3db7f1c50>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd3db794490>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 24987))
让我们来打印:

{'RELEASE': array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7f7b0ba51790>]],
  dtype=object), '__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Tue Sep 23 22:09:02 2014', '__globals__': []}
让我们打印发行版的一些属性:

print(release, type(release), release.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1790>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 1))
我们得到了一个包含24987个元素的数组,其中还包含scipy.io.matlab.mio5_params.mat_struct对象。 然后我们可以继续研究:

anno1 = annolist[0,0]
print(anno1._fieldnames)
['image', 'annorect', 'frame_sec', 'vididx']
annorect = anno1.__dict__['annorect']
print(annorect, type(annorect), annorect.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de19d0>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1710>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 2))
anno2 = annorect[0,0]
print(anno2._fieldnames)
['scale', 'objpos']
objpos = anno2.__dict__['objpos']
print(objpos, type(objpos), objpos.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd398204b90>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 1))
objpos1 = objpos[0,0]
print(objpos1._fieldnames)
['x', 'y']
y = objpos1.__dict__['y']
print(y, type(y), y.shape)
(array([[210]], dtype=uint8), <type 'numpy.ndarray'>, (1, 1))
anno1=annolist[0,0]
打印(anno1.\u字段名)
['image','annorect','frame_sec','vididx']
annorect=anno1.\u dict
打印(注释、类型(注释)、注释、形状)
(数组([,,
]],
数据类型=对象,(1,2))
anno2=annorect[0,0]
打印(anno2.\u字段名)
['scale','objpos']
objpos=anno2._dict___['objpos']
打印(objpos,类型(objpos),objpos.shape)
(数组([]],
数据类型=对象,(1,1))
objpos1=objpos[0,0]
打印(objpos1.\u字段名)
['x','y']
y=objpos1._dict__['y']
打印(y,类型(y),y形状)
(数组([[210]],dtype=uint8),(1,1))

MPII data annotations.mat文件来自matlab,它是matlab中的一种结构类型,因此如果要使用scipy.io.loadmat处理它,应添加如下参数:

matph = './mpii_human_pose_v1_u12_1.mat'
mat = sio.loadmat(matph, struct_as_record=False) # add here
object1 = release[0,0]
print(object1._fieldnames)
['annolist', 'img_train', 'version', 'single_person', 'act', 'video_list']
annolist = object1.__dict__['annolist']
print(annolist, type(annolist), annolist.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1810>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1850>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1910>,
        ...,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd3db7f1710>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd3db7f1c50>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd3db794490>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 24987))
让我们来打印:

{'RELEASE': array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7f7b0ba51790>]],
  dtype=object), '__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Tue Sep 23 22:09:02 2014', '__globals__': []}
让我们打印发行版的一些属性:

print(release, type(release), release.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1790>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 1))
我们得到了一个包含24987个元素的数组,其中还包含scipy.io.matlab.mio5_params.mat_struct对象。 然后我们可以继续研究:

anno1 = annolist[0,0]
print(anno1._fieldnames)
['image', 'annorect', 'frame_sec', 'vididx']
annorect = anno1.__dict__['annorect']
print(annorect, type(annorect), annorect.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de19d0>,
        <scipy.io.matlab.mio5_params.mat_struct object at 0x7fd407de1710>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 2))
anno2 = annorect[0,0]
print(anno2._fieldnames)
['scale', 'objpos']
objpos = anno2.__dict__['objpos']
print(objpos, type(objpos), objpos.shape)
(array([[<scipy.io.matlab.mio5_params.mat_struct object at 0x7fd398204b90>]],
      dtype=object), <type 'numpy.ndarray'>, (1, 1))
objpos1 = objpos[0,0]
print(objpos1._fieldnames)
['x', 'y']
y = objpos1.__dict__['y']
print(y, type(y), y.shape)
(array([[210]], dtype=uint8), <type 'numpy.ndarray'>, (1, 1))
anno1=annolist[0,0]
打印(anno1.\u字段名)
['image','annorect','frame_sec','vididx']
annorect=anno1.\u dict
打印(注释、类型(注释)、注释、形状)
(数组([,,
]],
数据类型=对象,(1,2))
anno2=annorect[0,0]
打印(anno2.\u字段名)
['scale','objpos']
objpos=anno2._dict___['objpos']
打印(objpos,类型(objpos),objpos.shape)
(数组([]],
数据类型=对象,(1,1))
objpos1=objpos[0,0]
打印(objpos1.\u字段名)
['x','y']
y=objpos1._dict__['y']
打印(y,类型(y),y形状)
(数组([[210]],dtype=uint8),(1,1))

受bobxxxl答案的启发,我编写了一个简单的函数将对象转换为dict格式,还编写了一个print\u dataset\u obj方法将其可视化。希望能有帮助


decoded1=scipy.io.loadmat(mat_path,struct_as_record=False)[“RELEASE”]
必须是列表字段=[“annolist”、“annorect”、“point”、“img\u train”、“单人”、“act”、“video\u list”]
def生成数据集obj(obj):
如果类型(obj)=np.ndarray:
尺寸=对象形状[0]
如果dim==1:
ret=生成数据集对象(对象[0])
其他:
ret=[]
对于范围内的i(昏暗):
ret.append(生成数据集对象(对象[i]))
elif类型(obj)=scipy.io.matlab.mio5_参数.mat_结构:
ret={}
对于对象中的字段名称,字段名称:
field=生成数据集对象(对象.\uuuuuu dict\uuuuuu[字段名称])
如果字段\中的名称必须\列表\字段和类型(字段)!=名单:
字段=[字段]
ret[field_name]=字段
其他:
ret=obj
回程网
def打印数据集对象(对象,深度=0,最大数组=20):
前缀=“深度”
如果类型(obj)=dict:
对于obj.keys()中的键:
打印(“{}{}”。格式(前缀、键))
打印数据集对象(对象[key],深度+1)
elif类型(obj)=列表:
对于i,枚举中的值(obj):
如果i>=最大阵列:
打破
打印(“{}{}”。格式(前缀,i))
打印数据集对象(值,深度+1)
其他:
打印(“{}{}”。格式(前缀,obj))
#转换成dict
dataset_obj=生成_dataset_obj(解码D1)
#打印出来
打印数据集对象(数据集对象)

受bobxxxl答案的启发,我编写了一个简单的函数将对象转换为dict格式,还编写了一个print\u dataset\u obj方法将其可视化。希望能有帮助


decoded1=scipy.io.loadmat(mat_path,struct_as_record=False)[“RELEASE”]
必须是列表字段=[“annolist”、“annorect”、“point”、“img\u train”、“单人”、“act”、“video\u list”]
def生成数据集obj(obj):
如果类型(obj)=np.ndarray:
尺寸=对象形状[0]
如果dim==1:
ret=生成数据集对象(对象[0])
其他:
ret=[]
对于范围内的i(昏暗):
ret.append(生成数据集对象(对象[i]))
elif类型(obj)=scipy.io.matlab.mio5_参数.mat_结构:
ret={}
对于对象中的字段名称,字段名称:
field=生成数据集对象(对象.\uuuuuu dict\uuuuuu[字段名称])
如果字段\中的名称必须\列表\字段和类型(字段)!=名单:
字段=[字段]
ret[field_name]=字段
其他:
ret=obj
回程网
def打印数据集对象(对象,深度=0,最大数组=20):
前缀=“深度”
如果类型(obj)=dict:
对于obj.keys()中的键:
打印(“{}{}”。格式(前缀、键))
打印数据集对象(对象[key],深度+1)
elif类型(obj)=列表:
对于i,枚举中的值(obj):
如果i>=最大阵列:
打破
打印(“{}{}”。格式(前缀,i))
打印数据集对象(值,深度+1)
其他:
打印(“{}{}”。格式(前缀,obj))
#转换成dict
dataset_obj=生成_dataset_obj(解码D1)
#打印出来
打印数据集对象(数据集对象)