SVHN数据问题

时间:2019-04-13 22:33:18

标签: tensorflow scipy hdf5 h5py

我一直在阅读和研究与街景房门号码(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阅读。

  • 斯坦福大学和kaggle的文件是否相同?
  • 如果没有,有什么区别?
  • 我是否可以使用digitStruct.mat打开斯坦福大学的h5py文件?
  • 如果是,应该使用什么方法下载和提取Standford tar.gz文件? (仅供参考,我使用的是Win-7,并且一直在使用HTTP下载和WinZip进行提取。)

我正在添加其他信息,以记录使用不同的.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文件)。

1 个答案:

答案 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()

访问