首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CNN与不同卷间深度不同的数据集

使用CNN与不同卷间深度不同的数据集
EN

Stack Overflow用户
提问于 2020-01-13 17:09:57
回答 2查看 293关注 0票数 0

我在医学影像公司工作,其中我有130个病人卷,每卷由N数量的DICOM图像/切片组成。

问题是在卷之间,片N的数量是不同的。

大部分,50%的卷有20片,其余的有3或4片,有些甚至超过10片(如此之多以至于无法在卷之间进行插值以使切片数相等)

我可以将Conv3d用于卷之间深度N (片数)相同的卷,但我必须为分类任务使用整个数据集。那么,如何整合整个数据集并将其提供给我的网络模型呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-14 19:16:06

如果我理解你的问题,你有130个三维图像,你需要输入一个三维ConvNet。我假设您的批次,如果N对所有数据是相同的,将是形状张量(batch_size,channels,N,H,W),而您的问题是N在不同的数据样本之间是不同的。

所以有两个问题。首先,您的模型需要处理N值不同的数据的问题,其次,还有一个与实现相关的不同长度的数据批处理问题。

这两个问题都出现在视频分类模型中。首先,我不认为有什么方法可以绕过在模型中的某个地方插值(除非您愿意填充/剪切/取样) --如果您正在执行任何类型的分类任务,那么您非常需要在分类头上设置一个固定大小的层。然而,插值并不是在一开始就发生的。例如,如果对于一个大小的输入张量(批处理,3,20,256,256),您的网络conv池下降到(批处理,1024,4,1,1),那么您可以在输出之前执行一个自适应池(例如https://pytorch.org/docs/stable/nn.html#torch.nn.AdaptiveAvgPool3d),以便在预测之前将更大的数据降到该大小。

另一个选项是填充和/或截断和/或重采样图像,以便所有数据都是相同的长度。对于视频,有时人们通过循环帧来填充,或者你可以用0来填充。什么是有效的取决于你的长度轴是代表时间,还是其他东西。

对于第二个问题,批处理:如果您熟悉pytorch的dataloader/dataset管道,您将需要编写一个自定义collate_fn,它接受dataset对象的输出列表,并将它们放在一个批处理张量中。在这个函数中,您可以决定是填充还是截断,或者其他什么,这样就可以得到一个正确形状的张量。不同的批可以有不同的值N。实现这条管道的一个简单例子是:https://github.com/yunjey/pytorch-tutorial/blob/master/tutorials/03-advanced/image_captioning/data_loader.py

其他可能有助于批处理的方法是根据数据的N维将数据放入存储桶中。这样,你就可以避免大量不必要的填充。

票数 0
EN

Stack Overflow用户

发布于 2020-01-13 17:54:13

你需要把数据集压平。你可以把每个单独的切片作为CNN的输入。您可以将每个变量设置为布尔标志Yes / No,如果是绝对的,或者如果是数字的,则可以将输入设置为none的等效值(通常为0)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59721052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档