opencv打开dataloader显示为nonetype
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
25条回答 默认 最新
关注 以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。
这个问题通常发生在使用OPENCV的
DATALOADER
加载数据时遇到错误,导致NON-ETYPE
异常。这可能是由于以下原因:- 导入错误:确保你正确地导入了所需的库和模块。如果导入过程中出现问题(例如,
CV2
或NUMPY
),可能会引发这个错误。 - 数据类型不匹配:确保你的数据集包含正确的数据类型,比如NUMPY数组或TENSOR。如果你的数据是NUMPY数组,你需要将其转换成TENSOR。
- 数据格式不一致:检查你的数据是否按照预期的格式存储在内存中,或者是否包含了特定的元组形状或通道数量。
解决方法:
- 确保导入正确。
- 检查数据类型和格式。
- 如果可能,尝试将数据转换为TENSOR。
代码示例:
IMPORT CV2 FROM PIL IMPORT IMAGE # 加载图像 IMG = IMAGE.OPEN('IMAGE.JPG') # 尝试转换图片为NUMPY数组 IMG_ARRAY = NP.ARRAY(IMG) # 重新处理数据以使其符合要求 IF IMG_ARRAY.SHAPE[2] == 4: # 对于RGB图像,这里可能需要进行一些调整,但基本思路不变 IMG_ARRAY = IMG_ARRAY[:, :, ::-1] ELSE: # 对于其他颜色模式,这里可能需要稍微修改 IMG_ARRAY = IMG_ARRAY[:, :, ::-1] # 使用新的数据格式和类型 IMG_TENSOR = TORCH.FROM_NUMPY(IMG_ARRAY)
注意:实际操作中,上述代码中的数据类型和格式应根据实际情况进行调整。
解决 无用评论 打赏 举报- 导入错误:确保你正确地导入了所需的库和模块。如果导入过程中出现问题(例如,
- 阿里嘎多学长 2024-11-22 11:57关注
阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
OpenCV和PyTorch数据加载器中TypeError的解决方案
你遇到的问题是Opencv打开Dataloader显示为nonetype,具体来说是TypeError:default_collate:batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>。
这个错误是因为在Dataloader中,某些批处理数据是None类型,而不是torch.tensor、numpy数组或其他期望的数据类型。
以下是一些可能的解决方案:
- 检查数据加载器的数据 preparation
确保数据加载器正确地从数据集中加载数据,并将数据转换为期望的数据类型。
例如,如果使用custom的数据加载器,可以检查以下代码:
class CustomDataset(Dataset): def __init__(self, root): self.root = root self.data = ... def __getitem__(self, index): data = self.data[index] # 将数据转换为期望的数据类型 data = {'image': self.transform(data['image']), 'label': data['label']} return data def __len__(self): return len(self.data)
- 检查批处理数据
检查批处理数据是否包含None值。如果是,可能需要将None值去除或替换为默认值。
例如,如果使用 Pandas 数据框,可以使用
dropna()
函数去除None值:import pandas as pd df = pd.DataFrame({'image': [...], 'label': [...]}) batch_data = df.dropna().values.tolist()
- 检查 OpenCV 和 PyTorch 版本
在最新的OpenCV和PyTorch版本中可能存在一些bug或 변경,导致错误。尝试升级OpenCV和PyTorch版本,以解决问题。
- 检查代码中的其他问题
检查代码中的其他问题,例如数据类型的转换、数据的 normalize 和 augmentatio 等问题。
总之,解决错误的关键在于检查数据加载器、批处理数据和 OpenCV 和 PyTorch 版本,确保数据正确地从数据集中加载,并将数据转换为期望的数据类型。
解决 无用评论 打赏 举报 - 恐怖如斯恐怖如斯啊 2024-11-22 11:57关注解决 无用评论 打赏 举报
- 专家-皆知 2024-11-22 11:57关注
参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。
这个问题出现在尝试使用OpenCV处理PyTorch的Dataloader时,如果Dataloader返回了None类型的对象,那么在默认的collate函数中就会抛出上述错误。这通常意味着你的数据加载过程有问题,比如数据路径错误、文件不存在或者数据预处理阶段有逻辑错误导致没有正确返回数据。
解决步骤:
-
检查Dataloader定义: 确保你的Dataloader正确读取了数据集。检查
__getitem__
方法是否在所有情况下都返回了有效数据(图像和标签),并且在__len__
方法中正确返回了数据集的大小。 -
调试Dataloader: 你可以直接运行Dataloader的一个批次来检查问题:
import torch from torch.utils.data import DataLoader # 假设dataset是你的数据集实例 dataloader = DataLoader(dataset, batch_size=1, shuffle=False) for data in dataloader: img, label = data print(type(img), type(label)) # 确认它们不是NoneType break # 只检查一个批次
-
修改collate_fn: 如果问题在于数据结构复杂或者需要特殊处理(例如,图像尺寸不一),你需要自定义
collate_fn
来处理这些特殊情况。例如,如果你的数据集中某些样本处理失败返回了None,你可以这样处理:
def custom_collate(batch): images, labels = zip(*[(img, label) for img, label in batch if img is not None and label is not None]) return torch.stack(images), torch.tensor(labels) dataloader = DataLoader(dataset, batch_size=your_batch_size, shuffle=True, collate_fn=custom_collate)
这个函数会跳过batch中的None项,但请注意这样做可能会导致batch内的样本数量不一致。
-
OpenCV使用: 确保在使用OpenCV读取图像时没有错误。例如,使用
cv2.imread
时,文件路径必须是正确的,并且图像应该能够被成功读取。import cv2 img_path = 'path_to_your_image.jpg' img = cv2.imread(img_path) assert img is not None, "图像未能正确读取"
-
检查数据预处理: 数据预处理步骤(如归一化、裁剪等)也可能导致返回None,确保这些操作不会意外地返回None值。
通过上述步骤,你应该能定位并解决“TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>"的问题。如果问题仍然存在,建议详细审查数据集的每个部分,包括数据的生成、存储以及加载过程,寻找可能的逻辑错误。
解决 无用评论 打赏 举报 -
- 就是这样,喵~ 2024-11-22 11:57关注
在使用 OpenCV 和 PyTorch 的 DataLoader 时,如果遇到
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
错误,通常是因为 DataLoader 中的某些数据项为None
。这可能是因为数据加载过程中出现了问题,导致某些图像未能正确加载或处理。以下是一些可能的解决方案和调试步骤:
1. 检查数据加载函数
确保你的数据加载函数(例如自定义的
Dataset
类中的__getitem__
方法)没有返回None
。class CustomDataset(torch.utils.data.Dataset): def __init__(self, data_list, transform=None): self.data_list = data_list self.transform = transform def __len__(self): return len(self.data_list) def __getitem__(self, idx): image_path = self.data_list[idx] image = cv2.imread(image_path) if image is None: raise ValueError(f"Image at path {image_path} could not be loaded.") if self.transform: image = self.transform(image) return image
2. 检查文件路径
确保所有图像文件路径都是正确的,并且文件确实存在。
import os for image_path in data_list: if not os.path.exists(image_path): print(f"File not found: {image_path}")
3. 使用 try-except 捕获异常
在数据加载过程中添加异常处理,以便更好地了解哪些文件导致了问题。
class CustomDataset(torch.utils.data.Dataset): def __init__(self, data_list, transform=None): self.data_list = data_list self.transform = transform def __len__(self): return len(self.data_list) def __getitem__(self, idx): image_path = self.data_list[idx] try: image = cv2.imread(image_path) if image is None: raise ValueError(f"Image at path {image_path} could not be loaded.") if self.transform: image = self.transform(image) return image except Exception as e: print(f"Error loading image {image_path}: {e}") return None
4. 过滤掉无效数据
在创建 DataLoader 之前,过滤掉那些无法加载的数据。
valid_data_list = [] for image_path in data_list: try: image = cv2.imread(image_path) if image is not None: valid_data_list.append(image_path) except Exception as e: print(f"Error loading image {image_path}: {e}") dataset = CustomDataset(valid_data_list, transform=your_transform) dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True)
5. 检查 DataLoader 参数
确保 DataLoader 的参数设置正确,特别是
collate_fn
参数。如果你有自定义的collate_fn
,确保它能够处理None
值。def custom_collate_fn(batch): batch = [item for item in batch if item is not None] return torch.utils.data.dataloader.default_collate(batch) dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, collate_fn=custom_collate_fn)
通过以上步骤,你应该能够找到并解决导致
NoneType
错误的原因,从而顺利地使用 OpenCV 和 DataLoader 进行图像处理。解决 无用评论 打赏 举报 - 小熊佩琪滴 2024-11-22 11:57关注解决 无用评论 打赏 举报
关注 🕗晚上好,题主!目前:🟢[在线]
📢参考通义千问、由郭老师整理提供!
📣今日诗号:无我不能之事,无我不解之谜。无我不为之利,无我不胜之争。这个错误提示表明在使用OpenCV与PyTorch的数据加载器(DataLoader)时,数据集中某些元素是
None
类型,这导致了default_collate
函数无法正确处理这些数据。default_collate
函数用于将一批样本组合成一个batch,它期望输入的是张量、numpy数组、数字、字典或列表等类型的数据。要解决这个问题,我们需要检查数据集中的数据是否确实包含了
None
值,并且需要确保数据集的定义和数据预处理步骤中没有产生None
值。下面是一个基本的解决思路:
- 检查数据集:首先,确认数据集中是否存在
None
值。可以通过打印前几批数据来实现。 - 数据预处理:确保数据预处理过程中不会生成
None
值。 - 数据增强:如果使用了数据增强,检查是否有任何操作可能导致数据变为
None
。 - 数据清洗:对数据集进行清洗,移除或修正包含
None
值的数据点。
下面是一个简单的示例代码,展示了如何检查数据集并处理可能存在的
None
值问题:import torch from torch.utils.data import DataLoader import cv2 # 假设你有一个自定义的数据集类 class CustomDataset(torch.utils.data.Dataset): def __init__(self, image_paths, labels): self.image_paths = image_paths self.labels = labels def __getitem__(self, index): # 加载图像和标签 image_path = self.image_paths[index] label = self.labels[index] # 使用OpenCV加载图像 image = cv2.imread(image_path) if image is None: # 如果图像加载失败,返回一个默认值或其他处理方式 return None # 预处理图像,例如转换为张量 image_tensor = torch.tensor(image, dtype=torch.float32) # 这里假设你的图像已经是浮点数格式 return image_tensor, label def __len__(self): return len(self.image_paths) # 数据路径和标签 image_paths = ["path/to/image1.jpg", "path/to/image2.jpg"] # 实际路径替换 labels = [0, 1] # 实际标签替换 # 创建数据集实例 dataset = CustomDataset(image_paths, labels) # 创建DataLoader实例 dataloader = DataLoader(dataset, batch_size=2, shuffle=True) # 检查数据加载器 for i, (images, labels) in enumerate(dataloader): if images is None or labels is None: print(f"Batch {i} contains None values.") else: print(f"Batch {i}: Images shape: {images.shape}, Labels: {labels}")
注意:上述代码中的图像加载和转换部分可能需要根据实际情况调整。特别是图像预处理部分,这里简化处理以说明主要逻辑。实际应用中,你可能需要对图像进行归一化、标准化等操作。
通过这种方式,你可以定位到具体的问题所在,并采取适当的措施来避免或处理
None
值。解决 无用评论 打赏 举报- 检查数据集:首先,确认数据集中是否存在
- 问答-莫得感情 2024-11-22 11:58关注
️题主您好️,目前由我为您解答👇🏼
🧡参考谷歌智能助手,由吾为汝整理提供🧡OpenCV打不开 DataLoader 返回的 NoneType 数据,并抛出
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
错误,通常是因为你的 DataLoader 在某个地方返回了None
值。这可能是由于以下几个原因:-
图像读取失败: DataLoader 尝试读取图像文件时,可能由于文件路径错误、文件损坏或其他IO错误导致读取失败,返回
None
。 -
图像变换错误: 你可能在 DataLoader 中使用了图像变换操作(例如,
torchvision.transforms
),某些变换在特定情况下可能返回None
。例如,裁剪操作如果裁剪区域超出图像边界,可能会返回None
。 -
自定义Dataset错误: 如果你使用了自定义的
Dataset
类,其中__getitem__
方法可能在某些情况下返回None
。 这通常发生在数据过滤或预处理步骤中。 -
多线程/多进程问题: 如果你的 DataLoader 使用了多线程或多进程加载数据,某个进程或线程可能出现错误并返回
None
,而主进程无法处理这种情况。
以下是针对这些问题的解决方案和调试建议:
1. 检查图像路径和文件:
- 确认图像文件路径的正确性。可以使用绝对路径进行测试。
- 检查图像文件是否损坏。尝试使用其他图像查看器打开图像。
2. 检查图像变换:
- 逐个注释掉 DataLoader 中的图像变换,找出导致问题的变换。
- 对于裁剪操作,确保裁剪区域在图像边界内。
- 可以使用
try-except
块捕获变换过程中的异常。
3. 检查自定义 Dataset:
- 在
__getitem__
方法中添加打印语句或断点,查看哪些索引或数据导致返回None
。 - 仔细检查
__getitem__
方法中的所有逻辑,确保不会有任何分支返回None
。 - 确保
__len__
方法返回正确的 dataset 长度。
4. 处理多线程/多进程问题:
- 使用
num_workers=0
禁用多线程/多进程,查看问题是否仍然存在。如果问题消失,则说明问题与多线程/多进程相关。 - 在 DataLoader 的
worker_init_fn
中设置随机数种子,以避免不同进程产生相同的随机数,这有时会导致问题。
示例代码 (调试自定义Dataset):
import torch from torch.utils.data import DataLoader, Dataset import cv2 class MyDataset(Dataset): def __init__(self, image_paths): self.image_paths = image_paths def __len__(self): return len(self.image_paths) def __getitem__(self, idx): try: image_path = self.image_paths[idx] print(f"Loading image: {image_path}") # 调试打印 image = cv2.imread(image_path) if image is None: # 检查图像是否读取成功 print(f"Error loading image: {image_path}") return None # 这里最好返回一些默认值,例如一个空张量,而不是 None # ...你的图像变换操作... image = torch.from_numpy(image).permute(2, 0, 1).float() # 示例变换 return image except Exception as e: print(f"Error in __getitem__: {e}") return None # 同样,最好返回一个默认值 # 示例用法 image_paths = ["path/to/image1.jpg", "path/to/image2.jpg", ...] # 替换为你的图像路径 dataset = MyDataset(image_paths) dataloader = DataLoader(dataset, batch_size=4, num_workers=0) # 先禁用多进程调试 for batch in dataloader: print(batch.shape) # 如果还有问题,这里会报错
通过以上步骤,你应该能够找到 DataLoader 返回
None
的原因并解决问题。 关键在于仔细检查代码的每个部分,并使用打印语句和断点进行调试。 记住,最好让__getitem__
返回一个默认值(例如一个空张量或一个固定的错误图像),而不是None
,这样可以避免default_collate
抛出错误,并更容易定位问题。解决 无用评论 打赏 举报 -
关注 参考自AICG
在使用 PyTorch 的
DataLoader
时遇到TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
错误,通常是因为数据加载器(DataLoader
)尝试处理的数据集中存在None
值。这个问题可能出现在多个地方,比如数据集的某个样本或标签是None
,或者数据加载过程中出现了错误导致返回了None
。解决这个问题可以按照以下步骤进行:
1. 检查数据集
首先检查你的数据集,确保每个样本和对应的标签都不是
None
。你可以遍历整个数据集,打印出所有样本和标签,以确保没有None
值。例如:for i in range(len(your_dataset)): sample, label = your_dataset[i] if sample is None or label is None: print(f"Found None at index {i}")
2. 修改数据集类
如果你的数据集是从一个自定义的类中读取的,确保这个类的
__getitem__
方法不会返回None
。这通常涉及到对数据的预处理,如图像文件的读取失败等,需要添加适当的错误处理代码。例如:class YourDataset(Dataset): def __getitem__(self, index): try: # 尝试读取图像和标签 img_path = self.image_paths[index] image = cv2.imread(img_path) label = self.labels[index] # 进行必要的预处理 # ... return image, label except Exception as e: print(f"Error reading {img_path}: {e}") # 如果读取失败,可以选择跳过该样本,或者返回一个默认值 # 注意,如果返回默认值,确保不会影响模型训练 return None, None # 或者选择一个合适的处理方式
在这个例子中,当读取图像失败时,我们打印了一个错误消息,并返回了
None
。但是,返回None
可能会导致DataLoader
抛出错误,因此更好的做法可能是跳过这些样本或用其他方式处理它们。3. 自定义 collate_fn
如果上述方法不能解决问题,或者你想更灵活地处理
None
值,可以自定义一个collate_fn
函数来过滤掉None
值的样本。例如:def custom_collate(batch): batch = list(filter(lambda x: x is not None, batch)) # 过滤掉 None return torch.utils.data.dataloader.default_collate(batch) data_loader = DataLoader(your_dataset, batch_size=32, shuffle=True, collate_fn=custom_collate)
通过这种方式,即使数据集中有
None
值,DataLoader
也能正确处理并生成有效的批次。希望以上建议能够帮助你解决遇到的问题!如果有更多具体的情况或者其他问题,请随时提问。
解决 无用评论 打赏 举报- 杨同学* 2024-11-22 13:05关注
该回答引用ChatGPT4o, 并由本人整理回复, 如有帮助,还请采纳。
遇到这个错误TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
通常是由于你的DataLoader
或Dataset
中有某个返回None
的情况,导致批量加载时,default_collate
无法处理NoneType
。可能的原因和解决方法
检查
Dataset
返回值:
在自定义Dataset
类的__getitem__
方法中,检查是否有任何条件下会返回None
。例如,如果在读取图像文件时文件不存在或格式错误,应该确保抛出异常或返回一个有效的默认值,而不是返回None
。def __getitem__(self, index): image = cv2.imread(self.image_paths[index]) # 假设这是读取图像 if image is None: # 这里可以抛出异常,或返回一个空图像、空的Tensor等 raise ValueError(f"Image at index {index} could not be read") return image
检查
DataLoader
配置:
如果DataLoader
使用了某些复杂的批量处理(例如多线程或数据增强),请确保所有的批量数据都正确返回,并且没有在某些情况下返回None
。你可以调试查看每个批次数据,找出是哪个数据项为None
。for i, batch in enumerate(dataloader): if batch is None: print(f"Found None at batch {i}")
返回
None
的数据处理:
如果某些图像或数据样本确实无法加载(例如图像丢失或损坏),你应该在__getitem__
中处理这些情况,例如通过跳过无效项或用默认图像填充:def __getitem__(self, index): image = cv2.imread(self.image_paths[index]) if image is None: # 跳过无效数据 return None # 或者返回一个默认图像(例如全零矩阵) return image
**确保
collate_fn
适配None
**:
如果你已经在Dataset
返回None
时跳过了该项或用默认值替代,在使用DataLoader
时,确保collate_fn
能处理None
或empty
数据:def collate_fn(batch): batch = [item for item in batch if item is not None] # 去除 None 数据 return default_collate(batch) # 使用默认的批处理函数处理有效数据
然后在
DataLoader
中传递此collate_fn
:dataloader = DataLoader(dataset, batch_size=32, collate_fn=collate_fn)
确保图像路径有效:
如果数据集是基于图像路径加载的,确保所有图像路径是有效的,路径中的任何无效或错误路径都会导致None
被返回。你可以使用一些检查代码来验证路径是否有效:import os def __getitem__(self, index): image_path = self.image_paths[index] if not os.path.exists(image_path): raise FileNotFoundError(f"Image not found at {image_path}") image = cv2.imread(image_path) if image is None: raise ValueError(f"Failed to read image at {image_path}") return image
总结
- 确保
Dataset
中每个样本返回有效的数据,避免返回None
。 - 在
DataLoader
中使用collate_fn
来处理异常或空数据。 - 在读取图像或其他资源时进行有效性检查,避免因路径错误或读取失败而返回
None
。
希望这些建议能帮助你解决问题!如果问题仍然存在,请提供更多的代码和上下文信息。
解决 无用评论 打赏 举报 - Kwan的解忧杂货铺@新空间代码工作室 2024-11-22 13:41关注
晚上好🌙🌙🌙
本答案参考通义千问这个问题看起来是由于你的数据加载器(Dataloader)返回了一个
None
值,而不是期望的张量、numpy数组或其他可处理的数据类型。这通常发生在尝试将一个空的或不符合预期格式的批次传递给数据加载器时。以下是解决这个问题的一些步骤:
-
检查数据集:
- 确保你的数据集中没有空值或者缺失的部分。
- 检查数据集的读取和预处理过程是否正确,确保每一项都能被正确地转化为可以被模型接受的格式。
-
检查Dataloader的定义:
- 重新审视你的Dataloader的定义,确保其使用的
__getitem__
方法能够正确返回预期的数据格式。
- 重新审视你的Dataloader的定义,确保其使用的
class MyDataset(torch.utils.data.Dataset): def __init__(self, data, transform=None): self.data = data self.transform = transform def __len__(self): return len(self.data) def __getitem__(self, idx): # 确保这里返回的是正确的数据格式,例如一个张量或numpy数组 sample = self.data[idx] if self.transform: sample = self.transform(sample) return sample
-
检查batch_size:
- 如果你的数据集中样本数量较少,而设定的
batch_size
较大,可能会导致某些批次为空。在这种情况下,你需要调整batch_size
以匹配数据集大小。
- 如果你的数据集中样本数量较少,而设定的
-
错误处理:
- 在数据加载过程中添加异常处理,以便在遇到问题时能捕获到具体的错误信息,这样有助于定位问题所在。
def __getitem__(self, idx): try: sample = self.data[idx] if self.transform: sample = self.transform(sample) return sample except Exception as e: print(f"Error occurred while loading item {idx}: {str(e)}") raise e
-
调试:
- 使用Python的
pdb
模块或者IDE中的断点来逐步执行代码,查看在哪个环节出现了问题。
- 使用Python的
-
更新库:
- 最后,确认你的PyTorch和相关的依赖库都是最新版本的,有时候可能是由于旧版本的bug导致的问题。
如果以上步骤不能解决问题,那么可能需要更详细的代码片段来进行进一步的分析。
解决 无用评论 打赏 举报 -
- *拯 2024-11-22 14:23关注解决 无用评论 打赏 举报
- 迂 幵 2024-11-22 14:23关注解决 无用评论 打赏 举报
- threenewbee 2024-11-22 15:18关注解决 无用评论 打赏 举报
关注 解决 无用评论 打赏 举报- 颠覆。 2024-11-22 16:23关注
在使用 OpenCV 和 PyTorch 的 DataLoader 时,如果遇到
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
错误,通常是因为数据加载过程中出现了None
值。这可能由多种原因引起,例如文件路径错误、图像读取失败等。以下是一些常见的排查步骤和解决方案:
1. 检查文件路径
确保所有图像文件的路径都是正确的,并且文件确实存在。可以在加载图像之前打印文件路径进行验证。
import os from torchvision import datasets, transforms from torch.utils.data import DataLoader # 假设你有一个包含图像路径的列表 image_paths = ["path/to/image1.jpg", "path/to/image2.jpg", ...] for path in image_paths: if not os.path.exists(path): print(f"File not found: {path}")
2. 自定义数据集类
创建一个自定义的数据集类,并在其中添加错误处理逻辑,以便在图像读取失败时返回一个默认值或抛出异常。
import cv2 import torch from torch.utils.data import Dataset class CustomDataset(Dataset): def __init__(self, image_paths, transform=None): self.image_paths = image_paths self.transform = transform def __len__(self): return len(self.image_paths) def __getitem__(self, idx): image_path = self.image_paths[idx] try: image = cv2.imread(image_path) if image is None: raise ValueError(f"Image at path {image_path} could not be read") image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 转换为RGB格式 if self.transform: image = self.transform(image) return image except Exception as e: print(e) return None # 或者返回一个默认值,如torch.zeros((3, 224, 224)) # 使用自定义数据集类 dataset = CustomDataset(image_paths, transform=transforms.ToTensor()) dataloader = DataLoader(dataset, batch_size=32, collate_fn=lambda x: [i for i in x if i is not None])
3. 检查DataLoader的collate_fn
如果使用了自定义的
collate_fn
,确保它能够正确处理None
值。def custom_collate_fn(batch): batch = [item for item in batch if item is not None] return torch.utils.data.dataloader.default_collate(batch) dataloader = DataLoader(dataset, batch_size=32, collate_fn=custom_collate_fn)
4. 调试信息
在数据加载过程中添加调试信息,以帮助定位问题。
for batch in dataloader: print(batch)
通过以上步骤,你应该能够找到并解决导致
NoneType
错误的原因。如果问题依然存在,请提供更多的代码细节和错误信息,以便进一步诊断。解决 无用评论 打赏 举报 - 葱老师呀 2024-11-22 16:24关注
在使用 OpenCV 和 PyTorch 的 DataLoader 时,如果遇到
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
错误,通常是因为 DataLoader 中的某些数据项为None
。这可能是因为数据加载过程中出现了问题,导致某些图像未能正确加载或处理。以下是一些可能的解决方案和调试步骤:
1. 检查数据加载函数
确保你的数据加载函数(例如自定义的
Dataset
类中的__getitem__
方法)没有返回None
。class CustomDataset(torch.utils.data.Dataset): def __init__(self, data_list, transform=None): self.data_list = data_list self.transform = transform def __len__(self): return len(self.data_list) def __getitem__(self, idx): image_path = self.data_list[idx] image = cv2.imread(image_path) if image is None: raise ValueError(f"Image at path {image_path} could not be loaded.") if self.transform: image = self.transform(image) return image
2. 检查文件路径
确保所有图像文件路径都是正确的,并且文件确实存在。
import os for image_path in data_list: if not os.path.exists(image_path): print(f"File not found: {image_path}")
3. 使用 try-except 捕获异常
在数据加载过程中添加异常处理,以便更好地了解哪些文件导致了问题。
class CustomDataset(torch.utils.data.Dataset): def __init__(self, data_list, transform=None): self.data_list = data_list self.transform = transform def __len__(self): return len(self.data_list) def __getitem__(self, idx): image_path = self.data_list[idx] try: image = cv2.imread(image_path) if image is None: raise ValueError(f"Image at path {image_path} could not be loaded.") if self.transform: image = self.transform(image) return image except Exception as e: print(f"Error loading image {image_path}: {e}") return None
4. 过滤掉无效数据
在创建 DataLoader 之前,可以过滤掉那些无法加载的数据。
valid_data_list = [image_path for image_path in data_list if os.path.exists(image_path)] dataset = CustomDataset(valid_data_list, transform=your_transform) dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True)
5. 检查 DataLoader 参数
确保 DataLoader 的参数设置正确,特别是
collate_fn
参数。如果你有自定义的collate_fn
,确保它能够处理None
值。def custom_collate_fn(batch): batch = [item for item in batch if item is not None] return torch.utils.data.dataloader.default_collate(batch) dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, collate_fn=custom_collate_fn)
通过以上步骤,你应该能够找到并解决 DataLoader 中出现
NoneType
的问题。解决 无用评论 打赏 举报 关注 该错误通常是因为DataLoader尝试加载数据时,某些样本返回了
NoneType
,导致default_collate
无法处理。
解决方案
1. 检查数据加载流程
确保数据加载函数在所有情况下都能返回有效数据。
自定义Dataset示例
以下是一个处理数据加载的示例:
import cv2 import torch from torch.utils.data import Dataset, DataLoader class CustomDataset(Dataset): def __init__(self, data_paths): self.data_paths = data_paths def __getitem__(self, index): # 尝试加载图像 img = cv2.imread(self.data_paths[index], cv2.IMREAD_COLOR) if img is None: raise ValueError(f"Image at path {self.data_paths[index]} could not be loaded.") # 返回张量 return torch.tensor(img, dtype=torch.float32) def __len__(self): return len(self.data_paths) # 示例图像路径列表 data_paths = ["path/to/image1.jpg", "path/to/image2.jpg", ...] # 创建数据集实例 dataset = CustomDataset(data_paths) dataloader = DataLoader(dataset, batch_size=4)
2. 使用自定义
collate_fn
过滤无效数据当部分数据可能为
None
时,可以使用自定义collate_fn
跳过这些数据。自定义collate_fn示例
def custom_collate_fn(batch): # 过滤掉None值 batch = [item for item in batch if item is not None] if not batch: return torch.tensor([]) # 返回一个空张量以避免崩溃 return torch.utils.data.dataloader.default_collate(batch) dataloader = DataLoader(dataset, batch_size=4, collate_fn=custom_collate_fn) # 测试DataLoader for batch in dataloader: print(batch)
3. 调试建议
- 打印错误样本:在
__getitem__
方法中添加日志,定位返回None
的样本。 - 路径验证:检查图像路径是否正确,使用
os.path.exists()
确认文件存在。 - 异常处理:捕获加载图像时的异常,并提供默认值替代。
验证图像路径示例
import os for path in data_paths: if not os.path.exists(path): print(f"File not found: {path}")
4. 检查库版本
确保安装了最新版本的OpenCV和PyTorch,避免旧版本中的潜在问题:
pip install --upgrade opencv-python torch
总结
- 检查数据加载逻辑,确保
__getitem__
总能返回有效数据。 - 使用自定义
collate_fn
处理可能存在的无效数据。 - 验证路径和文件完整性,避免读取失败。
解决 无用评论 打赏 举报- 打印错误样本:在
关注 ♥ 该回答参考ChatGPT,由吾为汝整理提供,如若有用,还请题主采纳!♥
在使用 OpenCV 和 PyTorch 的 DataLoader 时,如果出现
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
的错误,通常意味着你的数据集中有一些数据项返回了None
。以下是一些可能的原因和解决方案:检查数据集中的数据:
- 确保你的数据集中的每个样本都有效。可以在
__getitem__
方法中添加调试信息,检查是否有返回None
的情况。例如:def __getitem__(self, index): data = self.load_data(index) # 假设这是加载数据的函数 if data is None: print(f"Warning: Data at index {index} is None.") return data
- 确保你的数据集中的每个样本都有效。可以在
检查数据加载逻辑:
- 确保在数据加载过程中没有错误导致返回
None
。例如,文件路径错误、文件损坏等都可能导致加载失败。
- 确保在数据加载过程中没有错误导致返回
检查数据预处理:
- 如果你在数据加载时进行了预处理,确保预处理函数不会返回
None
。例如,图像读取失败时可能会返回None
。
- 如果你在数据加载时进行了预处理,确保预处理函数不会返回
**使用
collate_fn
**:如果你的数据集返回的样本格式不一致,可以自定义
collate_fn
来处理这些样本。例如:def custom_collate_fn(batch): # 过滤掉 NoneType 的样本 batch = [item for item in batch if item is not None] return default_collate(batch) data_loader = DataLoader(dataset, batch_size=32, collate_fn=custom_collate_fn)
检查 DataLoader 的参数:
- 确保
DataLoader
的参数设置正确,特别是batch_size
和shuffle
。如果batch_size
设置得过大,可能会导致某些批次中没有有效数据。
- 确保
调试输出:
- 在 DataLoader 的循环中添加调试输出,查看每个批次的数据内容,帮助定位问题:
for batch in data_loader: print(batch)
- 在 DataLoader 的循环中添加调试输出,查看每个批次的数据内容,帮助定位问题:
通过以上步骤,你应该能够找到导致
NoneType
的原因并解决问题。如果问题仍然存在,请提供更多代码细节,我们可以进一步分析。解决 无用评论 打赏 举报- GISer Liu 2024-11-23 08:19关注
该回答引用自GPT-4o, 由博主 GISer Liu 编写:
问题分析
用户在使用OpenCV处理数据时,遇到了
dataloader
返回NoneType
的问题,并伴随着TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
的错误。这个错误通常意味着dataloader
在某个环节返回了None
,而不是预期的数据类型(如张量、NumPy数组等)。关键点
- OpenCV:用户使用OpenCV处理图像数据。
- Dataloader:用户使用
dataloader
加载数据,但返回了NoneType
。 - TypeError:错误提示表明
dataloader
返回的批次数据中包含了None
。
解决方案
1. 检查数据加载过程
首先,需要检查数据加载的每个环节,确保没有环节返回
None
。import cv2 import numpy as np from torch.utils.data import DataLoader, Dataset class CustomDataset(Dataset): def __init__(self, image_paths): self.image_paths = image_paths def __len__(self): return len(self.image_paths) def __getitem__(self, idx): image_path = self.image_paths[idx] image = cv2.imread(image_path) # 检查图像是否成功加载 if image is None: print(f"Failed to load image: {image_path}") return None # 这里返回None会导致dataloader报错 # 预处理图像 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = image.astype(np.float32) / 255.0 return image # 示例数据集路径 image_paths = ["path/to/image1.jpg", "path/to/image2.jpg"] dataset = CustomDataset(image_paths) dataloader = DataLoader(dataset, batch_size=2, shuffle=True) for batch in dataloader: print(batch)
2. 修改
__getitem__
方法在
__getitem__
方法中,如果图像加载失败(即image
为None
),应该跳过该图像,而不是返回None
。def __getitem__(self, idx): image_path = self.image_paths[idx] image = cv2.imread(image_path) # 检查图像是否成功加载 if image is None: print(f"Failed to load image: {image_path}") return self.__getitem__((idx + 1) % len(self)) # 跳过该图像,加载下一个图像 # 预处理图像 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = image.astype(np.float32) / 255.0 return image
3. 使用
collate_fn
处理None
值如果仍然有
None
值出现,可以使用collate_fn
自定义数据加载的方式,过滤掉None
值。def custom_collate(batch): batch = [item for item in batch if item is not None] return torch.utils.data.dataloader.default_collate(batch) dataloader = DataLoader(dataset, batch_size=2, shuffle=True, collate_fn=custom_collate)
总结
- 检查图像加载:确保所有图像都能成功加载,避免返回
None
。 - 跳过无效图像:在
__getitem__
方法中,如果图像加载失败,跳过该图像。 - **自定义
collate_fn
**:使用collate_fn
过滤掉None
值,确保dataloader
返回的数据是有效的。
通过以上步骤,可以有效解决
dataloader
返回NoneType
的问题。如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑
解决 无用评论 打赏 举报 - guicai_guojia 2024-11-23 11:44关注
chatgpt回答如下
这个错误通常发生在使用 PyTorch DataLoader 时,它期望返回的是一个有效的数据批次(例如张量、NumPy 数组等),但是返回的是 `None`,这会导致 `default_collate` 函数无法处理。 ### 错误分析: 1. **错误信息:** `TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>` 表示 DataLoader 中的数据批次为 `None`,而不是有效的类型(如张量、数组等)。 2. **问题的根源:** - 您的 `Dataset` 类中的 `__getitem__` 方法可能在某些情况下返回了 `None`。例如,如果文件读取失败、路径错误、或图像格式不正确时,`None` 可能会被返回。 ### 解决方案: #### 1. **检查 `Dataset` 中的 `__getitem__` 方法** - 确保在加载每个样本时,您返回的是一个有效的图像、张量或数组,而不是 `None`。如果遇到读取错误(比如文件损坏或者路径错误),您可以采取适当的处理措施,比如跳过当前样本或者返回一个默认值。 例如: python def __getitem__(self, index): image = cv2.imread(self.img_paths[index]) if image is None: # 处理错误情况 return None # 或者一个默认值,比如一个全零的图像 # 进行其他处理 return image #### 2. **在 `DataLoader` 中增加容错机制** - 通过修改 `DataLoader` 的 `collate_fn` 参数来处理无效样本。例如,您可以编写一个自定义的 `collate_fn`,过滤掉那些返回 `None` 的样本。 python def collate_fn(batch): batch = [item for item in batch if item is not None] return torch.utils.data.dataloader.default_collate(batch) data_loader = DataLoader(dataset, batch_size=32, collate_fn=collate_fn) #### 3. **检查路径和数据完整性** - 确保图像路径正确,并且所有图像文件都可以正确读取。如果路径中有错误或者文件丢失,可能会导致读取失败并返回 `None`。 #### 4. **调试代码** - 在 `Dataset` 类的 `__getitem__` 方法中添加调试信息,打印每个样本的加载情况,查看哪些样本返回了 `None`。 例如: python def __getitem__(self, index): image = cv2.imread(self.img_paths[index]) if image is None: print(f"Failed to load image at index {index}") return image 通过这些步骤,您可以定位并解决 `NoneType` 错误。关键是确保 `Dataset` 返回的每个样本都是有效的,而不是 `None`。
解决 无用评论 打赏 举报 - yy64ll826 2024-11-24 07:36关注解决 无用评论 打赏 举报
- giser@2011 2024-11-24 14:29关注
参考GPT
出现这个错误通常意味着你在尝试使用OpenCV加载一个数据集时,某个环节返回了
None
类型,而这一类型不是default_collate
函数所期望的数据类型。这通常发生在数据加载或者预处理的过程中。以下是一些解决这个问题的步骤:
检查数据加载器:确保你的数据加载器(dataloader)正确地从数据集中加载数据。你应该在创建dataloader之前检查数据集本身。
检查数据集:检查数据集中每个样本是否都是有效的,没有
None
类型的样本。调试数据加载过程:可以在数据集的
__getitem__
方法中添加打印语句,来检查是否某个特定的项目返回了None
。
下面是一些基本的调试代码示例:
from torch.utils.data import DataLoader # 假设你的数据集类叫做 CustomDataset dataset = CustomDataset() # 在数据集类中重写__getitem__方法来调试 def __getitem__(self, index): # 你的数据加载逻辑 data = super().__getitem__(index) # 打印数据来检查是否为None if data is None: print(f"Index {index} returned None.") return data # 创建dataloader dataloader = DataLoader(dataset, batch_size=1, shuffle=False) # 遍历dataloader来检查数据 for batch in dataloader: # 这里的batch应该是非None的 if batch is None: print("Batch is None!") else: # 在这里进行你的数据处理 pass
确保使用的是正确的数据类型:确保你的数据集返回的是期望的数据类型,如tensor、numpy数组、数字、字典或者列表。
更新你的库:如果你使用的库(如PyTorch、OpenCV等)有更新,确保你已经更新到最新版本,因为有时候这些错误可能是由库中的bug引起的。
检查数据集的路径和文件:如果你的数据集来自图像文件,确保所有的文件路径都是有效的,没有损坏的文件。
如果上述步骤仍然不能解决问题,你可能需要提供更详细的代码,这样我才能更好地帮助你定位问题。
解决 无用评论 打赏 举报 - 拾光师 2024-11-25 02:21关注
遇到
TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <class 'NoneType'>
错误,通常是因为数据加载器(DataLoader
)中的某个数据项是None
。这可能是由于以下几个原因导致的:- 数据集中的某些样本有问题:某些图像文件可能损坏或不存在。
- 数据预处理过程中出现问题:在读取或处理图像时可能返回了
None
。 - 数据集类的实现有误:在
__getitem__
方法中可能没有正确返回数据。
解决步骤
1. 检查数据集
确保数据集中没有损坏或缺失的图像文件。可以遍历数据集并检查每个样本:
import os data_dir = 'path/to/your/dataset' for filename in os.listdir(data_dir): file_path = os.path.join(data_dir, filename) if not os.path.isfile(file_path): print(f"File does not exist: {file_path}") try: # 尝试读取图像 image = cv2.imread(file_path) if image is None: print(f"Failed to read image: {file_path}") except Exception as e: print(f"Error reading image {file_path}: {e}")
2. 检查数据集类的实现
确保
__getitem__
方法正确返回数据。以下是一个示例数据集类的实现:import os import cv2 from torch.utils.data import Dataset class CustomDataset(Dataset): def __init__(self, data_dir, transform=None): self.data_dir = data_dir self.transform = transform self.image_files = [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith('.jpg') or f.endswith('.png')] def __len__(self): return len(self.image_files) def __getitem__(self, idx): img_path = self.image_files[idx] image = cv2.imread(img_path) if image is None: raise ValueError(f"Failed to read image: {img_path}") if self.transform: image = self.transform(image) return image
3. 检查数据加载器
确保
DataLoader
的配置正确。以下是一个示例:import torch from torch.utils.data import DataLoader from torchvision import transforms # 定义数据预处理 transform = transforms.Compose([ transforms.ToPILImage(), transforms.Resize((224, 224)), transforms.ToTensor() ]) # 创建数据集实例 dataset = CustomDataset(data_dir='path/to/your/dataset', transform=transform) # 创建数据加载器 dataloader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2) # 遍历数据加载器 for batch in dataloader: print(batch.shape) # 打印批次的形状
4. 捕获和处理
None
值如果在某些情况下
__getitem__
方法可能会返回None
,可以在DataLoader
中捕获并处理这些情况。例如,可以使用collate_fn
来过滤掉None
值:def custom_collate_fn(batch): batch = list(filter(lambda x: x is not None, batch)) return torch.utils.data.dataloader.default_collate(batch) # 创建数据加载器 dataloader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2, collate_fn=custom_collate_fn)
5. 调试
如果问题仍然存在,可以在
__getitem__
方法中添加调试信息,打印出每个样本的信息,以确定问题所在:def __getitem__(self, idx): img_path = self.image_files[idx] print(f"Reading image: {img_path}") image = cv2.imread(img_path) if image is None: print(f"Failed to read image: {img_path}") return None if self.transform: image = self.transform(image) return image
通过以上步骤,你应该能够找到并解决
NoneType
错误的原因。如果还有其他问题,请提供更多详细信息以便进一步诊断。解决 无用评论 打赏 举报 关注 该回答引用ChatGPT-4o并结合自身经验回答,望对题主有所帮助/启发;若有帮助,还望采纳🤝🤝🤝
你的问题是 **OpenCV 打开数据时显示为
NoneType
**,并且在使用 DataLoader 时出现了TypeError
,提示数据类型不匹配。这种情况通常与以下问题有关:
1. 问题根源分析
OpenCV 未正确读取图像:
cv2.imread
如果提供的路径错误,或者文件不存在,返回值会是None
。- 如果图像路径中有非英文字符,OpenCV 可能无法识别。
数据预处理问题:
- DataLoader 中的数据可能含有
NoneType
,导致collate_fn
无法处理。 - 数据加载时没有正确检查图像读取结果。
- DataLoader 中的数据可能含有
缺少有效数据类型:
- DataLoader 期望 batch 中的每个元素是 Tensor、NumPy 数组或其他可支持的类型,但你传入了
NoneType
。
- DataLoader 期望 batch 中的每个元素是 Tensor、NumPy 数组或其他可支持的类型,但你传入了
2. 解决步骤
(1) 检查图像路径
确保所有图像路径正确且文件存在:
在数据加载代码中添加路径检查:
import os # 检查图像路径是否有效 def is_valid_image(image_path): return os.path.exists(image_path) and os.path.isfile(image_path)
(2) 检查 OpenCV 图像读取
在使用
cv2.imread
时,验证返回值是否为None
:import cv2 def read_image(image_path): image = cv2.imread(image_path) if image is None: raise ValueError(f"Failed to read image: {image_path}") return image
注意:
- 如果路径中有中文字符,可以用以下方式处理:
image = cv2.imdecode(np.fromfile(image_path, dtype=np.uint8), cv2.IMREAD_COLOR)
(3) 修改自定义 Dataset 类
在 PyTorch 的 Dataset 类中,加入错误处理逻辑,过滤掉无法读取的图像。
示例:
import torch from torch.utils.data import Dataset import cv2 import os class CustomDataset(Dataset): def __init__(self, image_paths, labels): self.image_paths = image_paths self.labels = labels def __len__(self): return len(self.image_paths) def __getitem__(self, idx): image_path = self.image_paths[idx] label = self.labels[idx] # 读取图像并检查 image = cv2.imread(image_path) if image is None: raise ValueError(f"Error reading image at {image_path}") # 转换为 RGB 格式(如果需要) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 转换为 PyTorch Tensor image = torch.tensor(image).permute(2, 0, 1).float() # 转换为 [C, H, W] return image, label
(4) 修改 DataLoader 中的
collate_fn
如果仍有
NoneType
数据进入 batch,可以在collate_fn
中进行过滤。例如:from torch.utils.data.dataloader import default_collate def custom_collate_fn(batch): batch = [b for b in batch if b is not None] # 过滤 None return default_collate(batch)
然后在 DataLoader 中指定
collate_fn
:from torch.utils.data import DataLoader dataset = CustomDataset(image_paths, labels) dataloader = DataLoader(dataset, batch_size=32, shuffle=True, collate_fn=custom_collate_fn)
(5) 打印调试
在 Dataset 的
__getitem__
方法中打印调试信息,找到问题数据:def __getitem__(self, idx): image_path = self.image_paths[idx] print(f"Loading image: {image_path}") ...
3. 综合代码示例
以下是完整的 Dataset 和 DataLoader 代码示例:
import torch from torch.utils.data import Dataset, DataLoader import cv2 import os # 自定义 Dataset class CustomDataset(Dataset): def __init__(self, image_paths, labels): self.image_paths = image_paths self.labels = labels def __len__(self): return len(self.image_paths) def __getitem__(self, idx): image_path = self.image_paths[idx] label = self.labels[idx] # 检查路径是否有效 if not os.path.exists(image_path): print(f"Invalid path: {image_path}") return None # 读取图像 image = cv2.imread(image_path) if image is None: print(f"Failed to load image: {image_path}") return None # 转换为 RGB 和 Tensor image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = torch.tensor(image).permute(2, 0, 1).float() # [C, H, W] return image, label # 自定义 collate_fn def custom_collate_fn(batch): # 过滤 NoneType 数据 batch = [b for b in batch if b is not None] return torch.utils.data.dataloader.default_collate(batch) # 示例数据 image_paths = ["image1.jpg", "image2.jpg", "invalid_path.jpg"] labels = [0, 1, 0] # 创建 DataLoader dataset = CustomDataset(image_paths, labels) dataloader = DataLoader(dataset, batch_size=2, shuffle=True, collate_fn=custom_collate_fn) # 测试 for batch in dataloader: images, labels = batch print(f"Batch size: {len(images)}")
4. 总结
- 检查图像路径和文件有效性,避免路径错误或文件损坏。
- **验证
cv2.imread
返回值是否为None
**,并过滤掉无效数据。 - **自定义
collate_fn
**,确保 DataLoader 处理过程中跳过错误样本。 - 如果路径中包含非英文字符,使用
cv2.imdecode
。
通过上述步骤,你可以解决
cv2.imread
返回NoneType
和 DataLoader 的TypeError
问题。解决 无用评论 打赏 举报
悬赏问题
- ¥15 关于#单片机#的问题:大学生的项目,欧姆龙plc要求用CP-X编出梯形图
- ¥15 方波信号时频特征分析/信号调制与解调过程分析/利用DFT分析信号频谱
- ¥20 两台硬件相同的琴设备一个是高阶版,怎么扒到初阶版
- ¥30 matlab求解周期与坐标
- ¥15 MATLAB图片转灰度格式问题
- ¥15 把h5作品链接复制到自己的账号里
- ¥15 ensp抓包实验配置
- ¥15 强化学习算法、MRO
- ¥15 想要学习一门技术来保证以后能够吃上碗饭,该学什么好
- ¥100 对这段代码用Astro进行layout,用redhawk进行ir drop 的测试和分析,以及降低ir drop 的方法和实现