На данный момент поддерживаются три типа форматов хранения данных:
На данный момент мы можем модифицировать конфигурационный файл YAML для поддержки различных форматов хранения данных. В качестве примера возьмём PairedImageDataset, который можно модифицировать в соответствии с различными требованиями.
Прямое чтение данных с диска.
type: PairedImageDataset
dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub
dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic/X4_sub
io_backend:
type: disk
Использование 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
...
Каждая строка представляет изображение с тремя полями, которые указывают:
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 )