1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xinntao-BasicSR

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
DatasetPreparation.md 24 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 11.03.2025 09:08 d8428c6

Формат хранения данных

На данный момент поддерживаются три типа форматов хранения данных:

  1. Хранение в виде изображений / кадров видео непосредственно на жёстком диске.
  2. Создание LMDB, что может увеличить скорость ввода-вывода и декомпрессии во время обучения.
  3. Поддерживается также использование memcached, если он установлен (обычно на кластерах).

Как использовать

На данный момент мы можем модифицировать конфигурационный файл YAML для поддержки различных форматов хранения данных. В качестве примера возьмём PairedImageDataset, который можно модифицировать в соответствии с различными требованиями.

  1. Прямое чтение данных с диска.

    type: PairedImageDataset
    dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub
    dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic/X4_sub
    io_backend:
      type: disk
  2. Использование LMDB. Перед использованием LMDB его следует создать. Для получения информации обратитесь к разделу Описание LMDB. Обратите внимание, что мы добавляем метаданные к исходному LMDB, а конкретные двоичные содержимости также отличаются. Поэтому LMDB из других источников нельзя использовать напрямую.

    type: PairedImageDataset
    dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub.lmdb
    dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub.lmdb
    io_backend:
      type: lmdb
    ```1. Использование Memcached

Для использования Memcached ваш компьютер/кластеры должны его поддерживать. Конфигурационный файл следует модифицировать соответственно.```yaml type: ОбъединенныйДатасетИзображений dataroot_gt: datasets/DIV2K_train_HR_sub dataroot_lq: datasets/DIV2K_train_LR_bicubicX4_sub io_backend: type: memcached server_list_cfg: /mnt/lustre/share/memcached_client/server_list.conf client_cfg: /mnt/lustre/share/memcached_client/client.conf sys_path: /mnt/lustre/share/pymc/py3


Реализация осуществляется путём вызова элегантной системы управления файлами в [mmcv](https://github.com/open-mmlab/mmcv). Для обеспечения совместимости с BasicSR были внесены некоторые изменения в интерфейсы (в основном для адаптации к LMDB). Подробнее см. [file_client.py](../basicsr/utils/file_client.py).

При создании нашего собственного даталоадера мы можем легко использовать эти интерфейсы для поддержки различных форм хранения данных. Подробнее см. [PairedImageDataset](../basicsr/data/paired_image_dataset.py).

### Описание LMDB

Во время обучения мы используем LMDB для ускорения операций ввода-вывода и декомпрессии ЦПУ. Во время тестирования обычно данные ограничены, поэтому использование LMDB не всегда необходимо. Ускорение зависит от конфигураций машины, а следующие факторы могут повлиять на скорость:

1. Некоторые машины регулярно очищают кэш, что может негативно влиять на работу LMDB, так как она зависит от механизма кэширования. Поэтому если данные не кэшируются, следует проверить это. После выполнения команды `free -h` размер кэша LMDB будет записан в поле `buff/cache`.
2. Достаточность памяти машины для помещения всего LMDB-датасета. Если нет, то постоянное обновление кэша может замедлить процесс.
3. При первичном кэшировании LMDB-датасета перед обучением он может замедлить процесс обучения. Поэтому перед началом обучения можно войти в директорию LMDB-датасета и кэшировать данные командой: `cat data.mdb > /dev/null`.Кроме стандартного файла LMDB (data.mdb и lock.mdb), мы также добавляем `meta_info.txt` для записи дополнительной информации.
Пример структуры каталога:

**Структура каталога**

```txt
DIV2K_train_HR_sub.lmdb
├── data.mdb
├── lock.mdb
├── meta_info.txt

Метаданные

Файл meta_info.txt используется для удобства чтения. Его содержание:

0001_s001.png (480,480,3) 1
0001_s002.png (480,480,3) 1
0001_s003.png (480,480,3) 1
0001_s004.png (480,480,3) 1
...

Каждая строка представляет изображение с тремя полями, которые указывают:

  • Название изображения (с суффиксом): 0001_s001.png
  • Размер изображения: (480, 480, 3) представляет собой изображение размером 480x480x3 пикселей
  • Другие параметры (BasicSR использует уровень сжатия cv2 для формата PNG): В задачах восстановления обычно используется формат PNG, поэтому 1 представляет уровень сжатия PNG CV_IMWRITE_PNG_COMPRESSION равен 1. Это может быть целое число в диапазоне от [0, 9]. Больший уровень сжатия указывает на более сильное сжатие, то есть меньшее место хранения и большую длительность процесса сжатия.

Двоичный контент

Для удобства двоичный контент, хранящийся в наборе данных LMDB, закодирован с помощью cv2: cv2.imencode('.png', img, [cv2.IMWRITE_PNG_COMPRESSION, compress_level]). Вы можете контролировать уровень сжатия через compress_level, балансируя место хранения и скорость чтения (включая декомпрессию).Как создать LMDB Мы предоставляем скрипт для создания LMDB. Перед запуском скрипта нам нужно будет скорректировать соответствующие параметры. На данный момент мы поддерживаем наборы данных DIV2K, REDS и Vimeo90K; другие наборы данных также могут быть созданы аналогичным образом.

python scripts/data_preparation/create_lmdb.py
```#### Предварительная загрузка данных

Помимо использования LMDB для повышения производительности, можно использовать предварительную загрузку данных. Для реализации обратитесь к [prefetch_dataloader](../basicsr/data/prefetch_dataloader.py).
Это можно сделать путём установки `prefetch_mode` в конфигурационном файле. В настоящее время предоставляются три режима:

1. `None`. По умолчанию не используется предварительная загрузка данных. Если вы уже используете LMDB или операция ввода-вывода работает хорошо, вы можете установить его как `None`.

    ```yaml
    prefetch_mode: ~
    ```

1. `prefetch_mode: cuda`. Используется предварительная загрузка данных с использованием CUDA. Подробнее см. [NVIDIA/apex](https://github.com/NVIDIA/apex/issues/304#issuecomment-494944875). Это займет больше места на видеопамяти. Обратите внимание, что в этом режиме вам также следует установить `pin_memory=True`.

    ```yaml
    prefetch_mode: cuda
    pin_memory: true
    ```

1. `prefetch_mode: cpu`. Используется предварительная загрузка данных с использованием CPU. Подробнее см. [IgorSusmelj/pytorch-styleguide](https://github.com/IgorSusmelj/pytorch-styleguide/issues/5#issuecomment-298425549). (По моим тестам этот режим не увеличивает производительность)

    ```yaml
    prefetch_mode: cpu
    num_prefetch_queue: 1  # 1 по умолчанию
    ```

## Увеличение разрешения изображений

Рекомендуется создать символьную ссылку на корневой каталог набора данных до `datasets` командой `ln -s xxx yyy`. Если ваша структура папок отличается, возможно, вам потребуется изменить соответствующие пути в конфигурационных файлах.### DIV2K[DIV2K](https://data.vision.ee.ethz.ch/cvl/DIV2K/) — это широко используемый набор данных в области суперразрешения изображений. В многочисленных научных работах предполагается использование бикубического ядра понижения разрешения в MATLAB. Однако это может быть непрактичным, так как бикубическое ядро понижения разрешения в MATLAB не является хорошей аппроксимацией для неявных ядер деградации в реальных условиях. Также существует тема под названием *слепое восстановление*, которая занимается заполнением этого пробела.

**Предварительные шаги**

1. Скачайте набор данных с официального сайта [DIV2K](https://data.vision.ee.ethz.ch/cvl/DIV2K/).
1. Вырежите подизображения: набор данных DIV2K содержит изображения с разрешением 2К (например, 2048 × 1080), но тренировочные патчи обычно имеют меньшее разрешение (например, 128x128 или 192x192). Поэтому если читать полное изображение и использовать лишь малую часть его, то возникают потери. Чтобы ускорить скорость чтения во время обучения, вырезаем изображения с разрешением 2К на подизображения (в данном случае, вырезаем на подизображения размером 480x480). 
Заметьте, что размер подизображений отличается от размера тренировочных патчей (`gt_size`), указанного в конфигурационном файле. Конкретнее, вырезанные подизображения размером 480x480 хранятся. Даталоадер случайным образом вырезает подизображения до размера `GT_size x GT_size` для обучения.    Запустите скрипт [extract_subimages.py](../scripts/data_preparation/extract_subimages.py):

    ```python
    python scripts/data_preparation/extract_subimages.py
    ```

    Убедитесь, что модифицировали пути и конфигурации, если у вас есть другие настройки.

1. [Необязательно] Создайте файлы LMDB. Обратитесь к [описанию LMDB](#LMDB-Description). `python scripts/data_preparation/create_lmdb.py`. Используйте функцию `create_lmdb_for_div2k` и убедитесь, что модифицировали пути и конфигурации соответственно.
1. Проверьте даталоадер с помощью скрипта `tests/test_paired_image_dataset.py`.
Убедитесь, что модифицировали пути и конфигурации соответственно.
1. [Необязательно] Если вы хотите использовать метаинформацию файла, вам может потребоваться запустить `python scripts/data_preparation/generate_meta_info.py`, чтобы сгенерировать метаинформацию файла.

### Основные наборы данных для суперразмытия изображенийМы предоставляем список основных наборов данных для суперразрешения изображений. 
<table>
   <tr>
     <th>Название</th>
     <th>Датасеты</th>
     <th>Краткое описание</th>
     <th>Загрузка</th>
   </tr>
   <tr>
     <td rowspan="3">Обучение с использованием классического метода SR</td>
     <td>T91</td>
     <td><sub>91 изображения для обучения</sub></td>
     <td rowspan="9"><a href="https://drive.google.com/drive/folders/1gt5eT293esqY0yr1Anbm36EdnxWW_5oH?usp=sharing">Google Drive</a> / <a href="https://pan.baidu.com/s/1q_1ERCMqALH0xFwjLM0pTg">Baidu Drive</a></td>
   </tr>
   <tr>
     <td><a href="https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/">BSDS200</a></td>
     <td><sub>Подмножество (обучающая выборка) BSD500 для обучения</sub></td>
   </tr>
   <tr>
     <td><a href="http://mmlab.ie.cuhk.edu.hk/projects/FSRCNN.html">General100</a></td>
     <td><sub>100 изображений для обучения</sub></td>
   </tr>
   <tr>
     <td rowspan="6">Тестирование с использованием классического метода SR</td>
     <td>Set5</td>
     <td><sub>Тестовый набор данных Set5</sub></td>
   </tr>
   <tr>
     <td>Set14</td>
     <td><sub>Тестовый набор данных Set14</sub></td>
   </tr>
   <tr>
     <td><a href="https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/">BSDS100</a></td>
     <td><sub>Подмножество (тестовая выборка) BSD500 для тестирования</sub></td>
   </tr>
   <tr>
     <td><a href="https://sites.google.com/site/jbhuang0604/publications/struct_sr">Urban100</a></td>
     <td><sub>100 изображений зданий для тестирования (регулярные структуры)</sub></td>
   </tr>
   <tr>
     <td><a href="http://www.manga109.org/en/">Manga109</a></td>
     <td><sub>109 изображений японских манга для тестирования</sub></td>
   </tr>
   <tr>
     <td>Исторический</td>
     <td><sub>10 серых низкочастотных изображений без истинной метки</sub></td>
   </tr>
 </table><table>
   <tr>
     <td rowspan="3">Разрешение 2К</td>
   </tr>
</table>    <td><a href="https://data.vision.ee.ethz.ch/cvl/DIV2K/">DIV2K</a></td>
     <td><sub>представлен в <a href="http://www.vision.ee.ethz.ch/ntire17/">NTIRE17</a> (800 для обучения и 100 для тестирования)</sub></td>
     <td><a href="https://data.vision.ee.ethz.ch/cvl/DIV2K/">официальный сайт</a></td>
   </tr>
  <tr>
     <td><a href="https://github.com/LimBee/NTIRE2017">Flickr2K</a></td>
     <td><sub>2650 изображений разрешением 2К с Flickr для обучения</sub></td>
     <td><a href="https://cv.snu.ac.kr/research/EDSR/Flickr2K.tar">официальный сайт</a></td>
   </tr>
  <tr>
     <td>DF2K</td>
     <td><sub>Объединенный набор данных для обучения DIV2K и Flickr2K</sub></td>
     <td>-</td>
   </tr>  <tr>
    <td rowspan="2">OST (Находящиеся на открытом воздухе сцены)</td>
    <td>Обучение OST</td>
    <td><sub>7 категорий изображений с богатыми текстурами</sub></td>
    <td rowspan="2"><a href="https://drive.google.com/drive/u/1/folders/1iZfzAxAwOpeutz27HC56_y5RNqnsPPKr">Google Drive</a> / <a href="https://pan.baidu.com/s/1neUq5tZ4yTnOEAntZpK_rQ#list/path=%2Fpublic%2FSFTGAN&parentPath=%2Fpublic">Baidu Drive</a></td>
  </tr>
 <tr>
    <td>OST300</td>
    <td><sub>300 тестовых изображений открытых сцен</sub></td>
  </tr>

  <tr>
    <td >PIRM</td>
    <td>PIRM</td>
    <td><sub>Наборы PIRM self-val, val, test</sub></td>
    <td rowspan="2"><a href="https://drive.google.com/drive/folders/17FmdXu5t8wlKwt8extb_nQAdjxUOrb1O?usp=sharing">Google Drive</a> / <a href="https://pan.baidu.com/s/1gYv4tSJk_RVCbCq4B6UxNQ">Baidu Drive</a></td>
  </tr>
</table>

## Усиление разрешения видео

Рекомендуется создать символьную ссылку на корневую директорию набора данных в `datasets` командой `ln -s xxx yyy`. Если структура ваших папок отличается, вам может потребоваться изменить соответствующие пути в конфигурационных файлах.

### REDS

[Официальный сайт](https://seungjunnah.github.io/Datasets/reds.html).

Мы объединили тренировочный и проверочный наборы данных в одну папку. Оригинальный тренировочный набор состоит из 240 клипов с нумерацией от 000 до 239. Мы переименовали проверочные клипы с номерами от 240 до 269.

**Проверочная часть**

Официальная проверочная часть и та, которая была использована в EDVR для конкурса, различаются:| имя | клипы | общее количество |
|:----------:|:----------:|:----------:|
| REDSOfficial | [240, 269] | 30 клипов |
| REDS4 | 000, 011, 015, 020 клипов из *оригинального тренировочного набора* | 4 клипа |

Все оставшиеся клипы используются для обучения. Обратите внимание, что явное разделение наборов данных для обучения и валидации не требуется; загрузчик данных выполняет эту задачу.**Предварительная подготовка**

1. Скачайте наборы данных с [официального сайта](https://seungjunnah.github.io/Datasets/reds.html).
1. Создайте группы для тренировочных и валидационных данных: `python scripts/data_preparation/regroup_reds_dataset.py`
1. [Необязательно] Создайте файлы LMDB при необходимости. Для получения информации обратитесь к [описанию LMDB](#LMDB-Описание). `python scripts/data_preparation/create_lmdb.py`. Используйте функцию `create_lmdb_for_reds` и не забудьте скорректировать пути и конфигурацию соответственно.
1. Протестируйте загрузчик данных с помощью скрипта `tests/test_reds_dataset.py`.
Запомните, что вам потребуется скорректировать пути и конфигурацию соответственно.

### Vimeo90K

[Официальный сайт](http://toflow.csail.mit.edu/)1. Скачайте набор данных: [`Набор Septuplets -> Оригинальный набор для обучения и тестирования (82 ГБ)`](http://data.csail.mit.edu/tofu/dataset/vimeo_septuplet.zip). Это является эталонной версией (Ground-Truth). В скачиваемом архиве есть файл `sep_trainlist.txt`, который содержит список образцов для обучения.
1. Сгенерируйте низкочастотные изображения (TODO)
Низкочастотные изображения в наборе данных Vimeo90K для тестирования создаются с использованием бикубического ядра сжатия в MATLAB. Используйте скрипт `data_scripts/generate_LR_Vimeo90K.m` (выполняется в MATLAB) для создания низкочастотных изображений.
1. [Необязательно] Создайте файлы LMDB при необходимости. Для получения информации обратитесь к [описанию LMDB](#LMDB-Описание). `python scripts/data_preparation/create_lmdb.py`. Используйте функцию `create_lmdb_for_vimeo90k` и не забудьте скорректировать пути и конфигурацию соответственно.
1. Протестируйте загрузчик данных с помощью скрипта `tests/test_vimeo90k_dataset.py`.
Запомните, что вам потребуется скорректировать пути и конфигурацию соответственно.## StyleGAN2

### FFHQ

Набор данных для обучения: [FFHQ](https://github.com/NVlabs/ffhq-dataset).

1. Скачайте набор данных FFHQ. Рекомендуется скачать файлы `tfrecords` с [NVlabs/ffhq-dataset](https://github.com/NVlabs/ffhq-dataset).
1. Распакуйте `tfrecords` в изображения или LMDB. (Требуется TensorFlow для чтения `tfrecords`). Для каждого разрешения создается отдельная папка с изображениями или файлами LMDB.

    ```bash
    python scripts/data_preparation/extract_images_from_tfrecords.py
    ```

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xinntao-BasicSR.git
git@api.gitlife.ru:oschina-mirror/xinntao-BasicSR.git
oschina-mirror
xinntao-BasicSR
xinntao-BasicSR
master