Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing Pytorch/torchvision-修改数据集对象的图像和标签_Image Processing_Dataset_Label_Pytorch_Torchvision - Fatal编程技术网

Image processing Pytorch/torchvision-修改数据集对象的图像和标签

Image processing Pytorch/torchvision-修改数据集对象的图像和标签,image-processing,dataset,label,pytorch,torchvision,Image Processing,Dataset,Label,Pytorch,Torchvision,为了简单起见,我使用这行代码从两个名为“0”和“1”的类加载图像数据集: train\u data=torchvision.dataset.ImageFolder(os.path.join(train\u data\u DIR)、train\u transform) 然后我准备好装载机,以便与我的模型一起使用,方法如下: train\u loader=torch.utils.data.DataLoader(train\u数据,train\u批量大小,shuffle=True) 现在,每个图像

为了简单起见,我使用这行代码从两个名为“0”和“1”的类加载图像数据集:

train\u data=torchvision.dataset.ImageFolder(os.path.join(train\u data\u DIR)、train\u transform)
然后我准备好装载机,以便与我的模型一起使用,方法如下:

train\u loader=torch.utils.data.DataLoader(train\u数据,train\u批量大小,shuffle=True)
现在,每个图像都与一个类相关联,我想做的是获取每个图像,并在这两行代码之间对其应用一个变换,假设旋转四度之一:0,90,180,270,然后将该信息添加为四个类的附加标签:0,1,2,3。最后,我希望数据集包含旋转的图像,并作为它们的标签列出两个值:图像的类和应用的旋转

我尝试了此操作,没有出现错误,但如果我尝试打印标签,数据集将保持不变:

对于idx,在enumerate(序列数据.目标)中添加标签:
列车数据目标[idx]=[标签,1]
有没有一种很好的方法可以直接修改
train\u数据
,而不需要定制数据集

有没有一种很好的方法可以直接修改train_数据而不需要定制数据集

不,没有。如果你想使用
,你必须接受它有限的灵活性。事实上,
ImageFolder
只是
DatasetFolder
的一个子类,这与自定义数据集非常相似。您可以在其中看到
\uuu getItem\uuu
的以下部分:

如果self.transform不是None:
示例=自转换(示例)
如果self.target_transform不是无:
目标=自我。目标\转换(目标)
这使得您想要的变得不可能,因为您期望的变换应该同时修改图像和目标,这在这里是独立完成的

因此,首先让您的
Dataset
子类类似于
DatasetFolder
,然后简单地实现您自己的转换,它同时接收图像和目标,并返回它们的转换值。这只是您可能拥有的转换类的一个示例,然后需要将其组合成单个函数调用:

类旋转变换(对象):
定义呼叫(自我、图像、目标):
#随机旋转图像并相应调整目标
#...
返回图像、目标


如果这对您的案例来说太麻烦了,那么您最好的选择就是@jchaykow提到的,即在运行代码之前简单地修改您的文件。

您需要一个自定义数据集类,甚至可能需要一个自定义转换类,因为您需要能够看到每个图像中使用了哪个转换。由于转换是随机的,数据加载器在每个小批量中执行的操作实际上是从光盘读取文件并返回批,因此您无法事先知道是否应用了转换。一种方法是预先进行所有转换,保存文件,添加标签,然后像平常一样加载新的数据集