我一直在阅读和研究与街景房门号码(SVHN)数据集有关的SO问题。这些文件可在2个不同的位置使用:
斯坦福:
The Street View House Numbers (SVHN) Dataset
kaggle:
Street View House Numbers (SVHN) | Kaggle
我的问题与每个图像集(训练,测试和其他)的digitStruct.mat
文件的格式有关。这些定义每个图像的名称,标签和边框尺寸。据我了解,mat文件以HDF5格式(可通过h5py
读取)作为Matlab结构编写。
我已经能够使用digitStruct.mat
从kaggle访问和读取h5py
文件。我无法使用h5py
(或HDFView)从Stanford网站打开相同的文件。我读过的一些SO帖子表明Stanford文件是较旧的Matlab格式,应使用scipy.io.loadmat
阅读。
digitStruct.mat
打开斯坦福大学的h5py
文件?我正在添加其他信息,以记录使用不同的.mat文件观察到的不同行为。这可能有助于诊断。
我可以通过以下调用从kaggle打开.mat文件并对其进行操作:
h5f = h5py.File('digitStruct.mat','r')
对于斯坦福的文件,根据打开文件和功能,我会得到不同的错误。
下面的命令执行没有错误信息。那使我相信不是可以用h5py打开的Matlab v7.3文件。
mat = scipy.io.loadmat('./Stanford/test_32x32.mat')
这两个调用都不起作用(提供了简短的错误消息):
mat = scipy.io.loadmat('./test/digitStruct.mat')
Traceback...
NotImplementedError: Please use HDF reader for matlab v7.3 files
h5f = h5py.File('./test/digitStruct.mat','r')
Traceback...
OSError: Unable to open file (file signature not found)
此外,我无法使用HDFView打开test/digitStruct.mat
。我对Stanford digitStruct.mat文件的结论:它们可能是Matlab v7.3文件,但在我下载时已损坏。但是,我不确定自己做错了什么(因为我可以毫无问题地下载和读取kaggle文件)。
答案 0 :(得分:1)
通过一些Linux侦探工作,我发现了问题所在。
正如我所怀疑的那样,从斯坦福站点上的digitStruct.mat
文件中提取的*.tar.gz
文件是HDF5(Matlab v7.3)文件,在我下载时已损坏。
为进行确认,我在Linux系统上使用浏览器下载了3个tar.gz文件,然后使用tar
命令将其解压缩,并在Linux上成功使用h5py
打开了文件。然后,我将它们转移到我的Windows系统中,并且每个都可以与h5py
一起正常工作。
这有点令人惊讶,因为我过去使用WinZip提取tarball文件。显然,这些东西引起了腐败。
希望这可以在将来为别人节省同样的头痛。
注意:3个xxxx_32x32.mat
文件是较旧的Matlab格式,必须使用scipy.io.loadmat()