怎么删除,不知道具体哪些图片is None\
时间: 2024-03-26 20:34:09 浏览: 86
删除数据库中不存在的图片名称的图片
3星 · 编辑精心推荐
可以在 `__init__` 方法中先将所有图片的路径和标签存储到 `self.samples` 中,然后在 `__getitem__` 方法中根据索引读取对应的图片和标签。如果图片加载失败,可以将该样本的索引保存到一个列表中,最后再从 `self.samples` 中删除这些索引对应的样本。具体的实现代码如下:
```python
class FlowerDataset(Dataset):
def __init__(self, filenames, labels, transform):
self.filenames = filenames
self.labels = labels
self.transform = transform
self.samples = [(filename, label) for filename, label in zip(filenames, labels)]
def __len__(self):
return len(self.samples)
def __getitem__(self, idx):
filename, label = self.samples[idx]
image = None
if os.path.exists(filename):
image = Image.open(filename).convert('RGB')
if image is None:
print(f"图片 {filename} 加载失败")
return None
image = self.transform(image)
return image, label
def clean_samples(self):
failed_indices = []
for idx, (filename, label) in enumerate(self.samples):
if not os.path.exists(filename):
print(f"图片 {filename} 不存在")
failed_indices.append(idx)
else:
try:
Image.open(filename)
except:
print(f"图片 {filename} 加载失败")
failed_indices.append(idx)
self.samples = [sample for idx, sample in enumerate(self.samples) if idx not in failed_indices]
```
在这个实现中,我们新增了一个 `clean_samples` 方法,用于从数据集中删除加载失败的样本。在 `clean_samples` 方法中,我们遍历了所有样本,如果某个样本的图片不存在或者加载失败,就将该样本的索引保存到 `failed_indices` 中。最后,我们通过列表推导式从 `self.samples` 中删除这些索引对应的样本。执行 `clean_samples` 方法后,所有加载失败的样本都会被从数据集中删除。
阅读全文