各种颜色调制的数据对难以采集, 所以现在大部分颜色调制还是用多光谱数据仿真得到.
多光谱数据集
| 数据集$\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多光谱相机 |
格式读取和注意事项
- 从网页抓数据
- 因为数据是分散在网页上的, 需要用python从网页上抓.exr图片
- 问题: 用
requests.get(absolute_url).content, 这么下载下来的文件可能会有不全- 我批量下载kaist数据时, 就有一张图片错误, 还好.exr可以预览, 发现不正常的图片再单独下载下来就好
- 在批量下载CMP_UEA网页上的.mat文件时, 也出错了, 但是.mat文件没法预览, 等到读数据才发现
- 问题: 用
- 因为数据是分散在网页上的, 需要用python从网页上抓.exr图片
- 读.exr数据
- 网上的读exr的python包都有些问题, 而尴尬的是OpenEXR的官方放出了要做官方python binding的消息, 截止目前还没发布. 需要我们自己按如下流程操作: 写调用OpenEXR的C++代码->用pybind11编成.so库->在python里面调用
- 参考OpenEXR的API文档 : 一定要把所有channel都在datawindow 里面排好一次性读
- 网上的读exr的python包都有些问题, 而尴尬的是OpenEXR的官方放出了要做官方python binding的消息, 截止目前还没发布. 需要我们自己按如下流程操作: 写调用OpenEXR的C++代码->用pybind11编成.so库->在python里面调用
- 读.mat数据
- .mat数据有两种: 老版的.mat和新的v7.3格式的.mat, 不实际读的话, 没法知道究竟是哪种. 我还没找到可以先提取.mat的metadata的方法
- 老版的.mat可以用
scipy.io.loadmat读 - v7.3其实就是H5DF格式, 和.h5文件一样, 可以用
h5py读. 看到一些地方是建议用 hdf5storage 这个包(不光可以读, 还可以存成v7.3格式). - .mat数据好像没法看数据类型..
- 怎么正确的在pytorch里加载
- 目前是存在dataset的一个list里面
- 一定不能把所有image存在一个大的
ndarray里面, 我们的数据都比较大, 很有可能会内存不够 - 存在list里面是不受内存的限制吗?在训练过程中可以及时的动态加载吗? 还没有研究
- 我们的图片大, 而训练需要的crop_size比较小, 一个想法是先把图片切分成多个小的patch, 这样是否就不用加载一整张图片了?
- 一定不能把所有image存在一个大的
- 在第一次读数据时存成.h5文件的cache, 之后从.h5文件读取
- 因为数据集中的波长和我们要的channel可能不一样, 我们的channel是用
interp1d插值得到的, 这个插值的过程比较浪费时间, 所以至少需要把插值后的结果存下来 - .h5文件读出来是
ndarray格式, 要转成tensor使用, 不过这个过程是很快的 - 为什么不存成.pkl
- .pkl读起来比.h5慢, 在我的mac M1上速度慢了一倍. .pkl 倒是可以直接存tensor的, 而且存数据更快.
- .pkl可以做的操作比较多, 如果在网上把.pkl发给别人, 对方可能不敢打开.. 所以一般不会用.pkl分发大文件
- .pkl适合自己开发时存一些中间结果
- 为什么不是一张图片一个文件而是把全部list存在一起? 没有测试, 可能速度是差不多的吧?
- 因为数据集中的波长和我们要的channel可能不一样, 我们的channel是用
- 目前是存在dataset的一个list里面
其他有用的资源
- BiSCI的repo 里提供了CAVE512, CAVE1024, KAIST, TSA的下载链接, 是已经转成28通道的, .mat格式
- 其中kaist的数据load超慢.. 可能是因为把原本的16bit的half长度存成了64bit的complex?
- 我想kaist里面存half格式的exr可能也是出于缩小空间的考虑.. OpenEXR本身读起来挺快的
- color-science : 里面包含各种光学方面的标准, 对各种色彩空间转换, 可视化很有用
代码
- exr: readexr.cpp
- 网页抓图片: download_kaist.py
- 读数据集: multisepc_load.py
- 多光谱图片转成RGB显示: multispec2rgb.py
- 用TSA的图片测试, 转出的RGB有偏色, 可能是因为只对应了channel的主波长的XYZ, 没有在光谱上积分吗?