five

AIO

收藏
魔搭社区2025-10-10 更新2025-10-11 收录
下载链接:
https://modelscope.cn/datasets/lsylalala/AIO
下载链接
链接失效反馈
官方服务:
资源简介:
数据集文件元信息以及数据文件,请浏览“数据集文件”页面获取。 当前数据集卡片使用的是默认模版,数据集的贡献者未提供更加详细的数据集介绍,但是您可以通过如下GIT Clone命令,或者ModelScope SDK来下载数据集 ## Dataset Introduction 数据集的索引文件为 `train.csv`,其格式如下: | `input_path` | `gt_path` | `label` | `text` | | ----------------------------- | ----------------------- | ------- | ----------------------- | | `train/noise/input/img_01.png` | `train/noise/gt/img_01.png` | 0 | `AutoDIR代码中使用的text` | | `train/blur/input/img_02.png` | `train/blur/gt/img_02.png` | 1 | | * **`input_path`**: 低质量(LQ)图片的相对路径。 * **`gt_path`**: 高质量(GT)图片的相对路径。 * **`label`**: 整数标签,代表该图片对所属的退化类别。 ``` 该数据集中的 label 列为一个整数,它代表了 class names 列表中的一个零基索引(zero-indexed)。 具体来说,一个样本的类别名称可以通过 class_names[label] 的方式进行查找和映射,class_names= [ 'noise', 'blur', 'rain', 'underexposure', 'haze', 'reflection','raindrop', 'snow', 'overexposure', 'moire','no' ] ``` ## Dataset Statistics 数据集的类别分布如下,总计包含 **32,311** 个图像对。 | Label (ID) | Degradation Type | Number of Samples | | :--------: | :--------------: | :---------------: | | 0 | `noise` | 3450 | | 1 | `blur` | 3500 | | 2 | `rain` | 3500 | | 3 | `underexposure` | 3500 | | 4 | `haze` | 3500 | | 5 | `reflection` | 3500 | | 6 | `raindrop` | 861 | | 7 | `snow` | 3500 | | 8 | `overexposure` | 3500 | | 9 | `moire` | 3500 | **注意**: 该数据集在类别 `6 (raindrop)` 上存在明显的样本不均衡问题 ## how to use 首先 用下面的命令将数据分块合并为tar.gz(此过程需要一些时间) ``` cat part* >train.tar.gz ``` 而后解压缩,读取csv文件构造数据集,可参考下面的代码(下面的代码没有考虑csv中的text这一列) ``` @dataclass class PairedRecord: lq_path: str hq_path: str label: int class PairedImageDataset(Dataset[Tuple[torch.Tensor, torch.Tensor, torch.Tensor]]): """ CSV format (no header required): lq_path,hq_path,label - lq_path, hq_path: absolute or path relative to CSV directory - label: either an integer class index or a class name present in class_names """ def __init__( self, csv_path: str, class_names: List[str], image_size: int = 224, transform: Optional[Callable[[Image.Image], torch.Tensor]] = None, augment: bool = False, ) -> None: super().__init__() self.csv_path = csv_path self.root_dir = os.path.dirname(os.path.abspath(csv_path)) self.class_names = class_names self.class_to_idx = {name: idx for idx, name in enumerate(class_names)} base_transform = _default_image_transform(image_size) if transform is None else transform if augment: self.transform = T.Compose([ T.RandomResizedCrop(image_size, scale=(0.9, 1.0), ratio=(0.9, 1.1)), T.RandomHorizontalFlip(p=0.5), T.ToTensor(), T.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]), ]) else: self.transform = base_transform self.records: List[PairedRecord] = self._read_csv() def _read_csv(self) -> List[PairedRecord]: records: List[PairedRecord] = [] with open(self.csv_path, newline='', encoding='utf-8') as f: reader = csv.reader(f) next(reader) for row in reader: if not row or row[0].strip().startswith('#'): continue if len(row) < 3: raise ValueError("Each CSV row must have 3 columns: lq_path,hq_path,label") lq_rel, hq_rel, label_raw = row[0].strip(), row[1].strip(), row[2].strip() lq_path = lq_rel if os.path.isabs(lq_rel) else os.path.normpath(os.path.join(self.root_dir, lq_rel)) hq_path = hq_rel if os.path.isabs(hq_rel) else os.path.normpath(os.path.join(self.root_dir, hq_rel)) #print(label_raw) if label_raw.isdigit() or (label_raw.startswith('-') and label_raw[1:].isdigit()): label_idx = int(label_raw) else: if label_raw not in self.class_to_idx: raise ValueError(f"Unknown label '{label_raw}'. Expected one of: {self.class_names}") label_idx = self.class_to_idx[label_raw] records.append(PairedRecord(lq_path=lq_path, hq_path=hq_path, label=label_idx)) if not records: raise ValueError("No records loaded from CSV. Check the file paths and format.") return records def __len__(self) -> int: return len(self.records) def _load_image(self, path: str) -> Image.Image: with Image.open(path) as img: img = img.convert('RGB') return img.copy() def __getitem__(self, index: int) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: rec = self.records[index] lq_img = self._load_image(rec.lq_path) hq_img = self._load_image(rec.hq_path) lq_tensor = self.transform(lq_img) hq_tensor = self.transform(hq_img) label_tensor = torch.tensor(rec.label, dtype=torch.long) return hq_tensor, lq_tensor, label_tensor ```

可通过「数据集文件」页面获取本数据集的文件元信息与数据文件。当前数据集卡片采用默认模板,数据集贡献者未提供更详细的介绍,但您可通过下述Git Clone命令或ModelScope SDK下载该数据集。 ## 数据集介绍 本数据集的索引文件为 `train.csv`,其格式如下: | `input_path` | `gt_path` | `label` | `text` | | --- | --- | --- | --- | | `train/noise/input/img_01.png` | `train/noise/gt/img_01.png` | 0 | `AutoDIR代码中使用的text` | | `train/blur/input/img_02.png` | `train/blur/gt/img_02.png` | 1 | | * **`input_path`**:低质量(LQ, Low Quality)图像的相对路径。 * **`gt_path`**:高质量(GT, Ground Truth)图像的相对路径。 * **`label`**:整数标签,用于标识该图像对所属的退化类别。 本数据集中的`label`列为一个整数,其对应类别名称列表`class_names`的零基索引(zero-indexed)。具体而言,可通过`class_names[label]`的方式查询并映射样本的类别名称,其中`class_names`为: [ 'noise', 'blur', 'rain', 'underexposure', 'haze', 'reflection','raindrop', 'snow', 'overexposure', 'moire','no' ] ## 数据集统计 本数据集的类别分布如下,总计包含 **32311** 组图像对。 | 标签ID | 退化类型 | 样本数量 | | :---: | :---: | :---: | | 0 | 噪声(noise) | 3450 | | 1 | 模糊(blur) | 3500 | | 2 | 降雨(rain) | 3500 | | 3 | 曝光不足(underexposure) | 3500 | | 4 | 雾霾(haze) | 3500 | | 5 | 反射(reflection) | 3500 | | 6 | 雨滴(raindrop) | 861 | | 7 | 降雪(snow) | 3500 | | 8 | 过曝光(overexposure) | 3500 | | 9 | 摩尔纹(moire) | 3500 | **注意**:本数据集在类别`6(raindrop,雨滴)`上存在显著的样本不均衡问题。 ## 使用方法 首先执行下述命令将分块文件合并为`train.tar.gz`(此过程需耗费一定时间): cat part* >train.tar.gz 随后解压缩该文件,读取CSV文件以构建数据集,可参考下述代码(下述代码未考虑CSV中的`text`列): python @dataclass class PairedRecord: lq_path: str hq_path: str label: int class PairedImageDataset(Dataset[Tuple[torch.Tensor, torch.Tensor, torch.Tensor]]): """ CSV格式(无需表头): lq_path,hq_path,label - lq_path、hq_path:可相对于CSV文件目录的绝对路径或相对路径 - label:可为整数类别索引,或`class_names`中存在的类别名称 """ def __init__( self, csv_path: str, class_names: List[str], image_size: int = 224, transform: Optional[Callable[[Image.Image], torch.Tensor]] = None, augment: bool = False, ) -> None: super().__init__() self.csv_path = csv_path self.root_dir = os.path.dirname(os.path.abspath(csv_path)) self.class_names = class_names self.class_to_idx = {name: idx for idx, name in enumerate(class_names)} base_transform = _default_image_transform(image_size) if transform is None else transform if augment: self.transform = T.Compose([ T.RandomResizedCrop(image_size, scale=(0.9, 1.0), ratio=(0.9, 1.1)), T.RandomHorizontalFlip(p=0.5), T.ToTensor(), T.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]), ]) else: self.transform = base_transform self.records: List[PairedRecord] = self._read_csv() def _read_csv(self) -> List[PairedRecord]: records: List[PairedRecord] = [] with open(self.csv_path, newline='', encoding='utf-8') as f: reader = csv.reader(f) next(reader) for row in reader: if not row or row[0].strip().startswith('#'): continue if len(row) < 3: raise ValueError("CSV每行必须包含3列:lq_path、hq_path、label") lq_rel, hq_rel, label_raw = row[0].strip(), row[1].strip(), row[2].strip() lq_path = lq_rel if os.path.isabs(lq_rel) else os.path.normpath(os.path.join(self.root_dir, lq_rel)) hq_path = hq_rel if os.path.isabs(hq_rel) else os.path.normpath(os.path.join(self.root_dir, hq_rel)) # 打印(label_raw) if label_raw.isdigit() or (label_raw.startswith('-') and label_raw[1:].isdigit()): label_idx = int(label_raw) else: if label_raw not in self.class_to_idx: raise ValueError(f"未知标签 '{label_raw}'。请使用以下类别之一:{self.class_names}") label_idx = self.class_to_idx[label_raw] records.append(PairedRecord(lq_path=lq_path, hq_path=hq_path, label=label_idx)) if not records: raise ValueError("未从CSV文件加载任何记录。请检查文件路径与格式。") return records def __len__(self) -> int: return len(self.records) def _load_image(self, path: str) -> Image.Image: with Image.open(path) as img: img = img.convert('RGB') return img.copy() def __getitem__(self, index: int) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: rec = self.records[index] lq_img = self._load_image(rec.lq_path) hq_img = self._load_image(rec.hq_path) lq_tensor = self.transform(lq_img) hq_tensor = self.transform(hq_img) label_tensor = torch.tensor(rec.label, dtype=torch.long) return hq_tensor, lq_tensor, label_tensor
提供机构:
maas
创建时间:
2025-10-09
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作