各种颜色调制的数据对难以采集, 所以现在大部分颜色调制还是用多光谱数据仿真得到.

多光谱数据集

数据集$\downarrow$ size bands 格式 数量 拍摄场景 发布时间 大小 条件 拍摄条件
CAVE 512x512 400-700nm
10nm steps
31bands
.png
每个通道
分别存
32 实验室:
真假人脸
真假水果
2008 419.9MB    
CAVE1024 1024x1024     205     13.06GB    
KAIST 2704x3376 420-720nm
10nm steps
31bands
.exr
每个图片
单独下载
30 实验室 2017 8.67GB    
TSA 660x660 28通道
特殊
.mat 10(simu)
5(real)
实验室 2020   simu是从
KAIST的数据
中截取的
 
harvard 1040x1392 420-720nm
10nm steps
31bands
.mat 50(自然光)
27(人工光)
场景丰富 2011 约7GB research-only 商业相机:
Nuance FX, CRI Inc
liquid crystal tunable filter
ARAD 1K 512x482 400-700nm
10nm steps
31bands
.mat-v7.3 900(train)
50(val)
50(test)
场景丰富 2022 约21GB
压缩包
需要注册  
TokyoTech
31-band
不固定
500~2k
左右
420-720nm
10nm steps
31bands
.mat 30 色卡(齐全)
布料,
蝴蝶
局部特写
2015 2.97GB research-only
redistribute-
prevent
 
TokyoTech
59-band
512x512 420-1000nm
10nm steps
59bands
.mat-v7.3 16 类似
2019 1.7GB research-only
redistribute-
prevent
 
CMP_UEA 不固定
200~400
左右
400-700nm
10nm steps
31bands
.mat
每个图片
单独下载
23 色卡,
广告包装
2004 566.6MB    
KAUST 512x512 400-730nm
10nm steps
34bands
.h5 409 实验室
户外
场景里有
白色反光板
2021 11.49GB
压缩包
BY-NC 3.0:
attribution
non-
commercial
Specim IQ多光谱相机

格式读取和注意事项

  1. 从网页抓数据
    • 因为数据是分散在网页上的, 需要用python从网页上抓.exr图片
      • 问题: 用requests.get(absolute_url).content , 这么下载下来的文件可能会有不全
        • 我批量下载kaist数据时, 就有一张图片错误, 还好.exr可以预览, 发现不正常的图片再单独下载下来就好
        • 在批量下载CMP_UEA网页上的.mat文件时, 也出错了, 但是.mat文件没法预览, 等到读数据才发现
  2. 读.exr数据
    • 网上的读exr的python包都有些问题, 而尴尬的是OpenEXR的官方放出了要做官方python binding的消息, 截止目前还没发布. 需要我们自己按如下流程操作: 写调用OpenEXR的C++代码->用pybind11编成.so库->在python里面调用
      • 参考OpenEXR的API文档 : 一定要把所有channel都在datawindow 里面排好一次性读
  3. 读.mat数据
    • .mat数据有两种: 老版的.mat和新的v7.3格式的.mat, 不实际读的话, 没法知道究竟是哪种. 我还没找到可以先提取.mat的metadata的方法
    • 老版的.mat可以用scipy.io.loadmat
    • v7.3其实就是H5DF格式, 和.h5文件一样, 可以用h5py 读. 看到一些地方是建议用 hdf5storage 这个包(不光可以读, 还可以存成v7.3格式).
    • .mat数据好像没法看数据类型..
  4. 怎么正确的在pytorch里加载
    • 目前是存在dataset的一个list里面
      • 一定不能把所有image存在一个大的ndarray里面, 我们的数据都比较大, 很有可能会内存不够
      • 存在list里面是不受内存的限制吗?在训练过程中可以及时的动态加载吗? 还没有研究
      • 我们的图片大, 而训练需要的crop_size比较小, 一个想法是先把图片切分成多个小的patch, 这样是否就不用加载一整张图片了?
    • 在第一次读数据时存成.h5文件的cache, 之后从.h5文件读取
      • 因为数据集中的波长和我们要的channel可能不一样, 我们的channel是用interp1d 插值得到的, 这个插值的过程比较浪费时间, 所以至少需要把插值后的结果存下来
      • .h5文件读出来是ndarray 格式, 要转成tensor使用, 不过这个过程是很快的
      • 为什么不存成.pkl
        • .pkl读起来比.h5慢, 在我的mac M1上速度慢了一倍. .pkl 倒是可以直接存tensor的, 而且存数据更快.
        • .pkl可以做的操作比较多, 如果在网上把.pkl发给别人, 对方可能不敢打开.. 所以一般不会用.pkl分发大文件
        • .pkl适合自己开发时存一些中间结果
      • 为什么不是一张图片一个文件而是把全部list存在一起? 没有测试, 可能速度是差不多的吧?

其他有用的资源

  • BiSCI的repo 里提供了CAVE512, CAVE1024, KAIST, TSA的下载链接, 是已经转成28通道的, .mat格式
    • 其中kaist的数据load超慢.. 可能是因为把原本的16bit的half长度存成了64bit的complex?
    • 我想kaist里面存half格式的exr可能也是出于缩小空间的考虑.. OpenEXR本身读起来挺快的
  • color-science : 里面包含各种光学方面的标准, 对各种色彩空间转换, 可视化很有用

代码