【发布时间】:2020-03-15 09:12:24
【问题描述】:
我目前正在尝试使用堆栈一组图像作为每个标签的单个实体来训练 CNN 使用交叉验证。给定一个 224x224x1 灰度图像的数据集,按以下方式排序:
Root/
Class0/image0_view0.png
Class0/image0_view1.png
Class0/image0_view2.png
...
Class1/image0_view0.png
Class1/image0_view1.png
Class1/image0_view2.png
如何将 3 张图像(视图 0、1 和 2)作为尺寸为 224x224x3(3 张灰度图像)的单个张量流动?换句话说,我将如何使用 ImageFolder/DatasetFolder 和 DataLoader 在 pytorch 中创建图像堆栈数据集?我是否必须重新组织我的文件夹和类,还是在为交叉验证进行拆分时更容易制作堆栈?
感谢您的宝贵时间和帮助!如果我能提供更多信息,请告诉我。
【问题讨论】:
-
为什么要这样做?您希望图像的通道是其他图像吗?如果我知道原因,我可能会更好地指导你。看起来你想要的可能根本不需要 pytorch。您只需要读取图像并将它们堆叠,然后将它们保存为具有 3 个通道的新图像。
-
这对我来说很有意义。我想这样做是因为每个标签并不总是单独出现在一张图像上,而且当我尝试将所有 3 张图像蒙合成一张图像时,CNN 的表现也不是很好。
-
好的,所以在我看来,您遇到了一个分类问题,即只能从同一对象的 3 个“视图”中的 1 个中看到该类。与其将图像合并在一起并尝试分类,我可能建议只为所有 3 个图像单独生成分类,然后将预测合并为一个。因此,如果 view0 预测了 1 类,而 view1 没有预测,而 view2 预测了 2 类,则总体预测将是 1 类和 2 类。
-
这些标签是为图像集生成的,因此虽然您的建议绝对可行,但它会更耗时且计算成本更高。您对图像堆叠有什么顾虑?
标签: deep-learning conv-neural-network pytorch