Skip to content

ai-forever/DataProcessingFramework

Repository files navigation

DataProcessingFramework

Фреймворк для работы с датасетами

Содержание

Установка

Установить с помощью pip:

pip install git+https://github.com/ai-forever/DataProcessingFramework

Установка из исходников:

git clone https://github.com/ai-forever/DataProcessingFramework cd DataProcessingFramework pip install -r requirements.txt

О фреймворке

Фреймворк ориентирован на работу с мультимодальными данными и поддерживает следующие возможности:

  1. Чтение датасетов
  2. Фильтрация датасетов с помощью различных моделей
  3. Конвертация датасетов в другие форматы хранения
  4. Валидация датасетов

Поддерживаемые модальности

  • Тексты
  • Изображения
  • Видео

Фреймворк поддерживает работу с комбинацией перечисленных выше модальностей, например, текст-изображение или текст-видео.

Поддерживаемые форматы данных

  • Files
  • Shards
  • ShardedFiles

Формат files

Формат files это csv файл с метаданными и путями к изображениям, видео и др. CSV файл может выглядеть примерно так:

image_path,text,width,height images/1.jpg,caption,512,512 

Чтение датасета из формата files:

from DPF.configs import FilesDatasetConfig from DPF.dataset_reader import DatasetReader config = FilesDatasetConfig.from_modalities( 'tests/datasets/files_correct/data.csv', image_path_col='image_path', caption_col='caption' ) reader = DatasetReader() processor = reader.from_config(config)

Формат shards

В этом формате датасет разделяется на шарды по N сэмплов в каждом. Файлы в каждом шарде лежат в tar архиве, а метаинформация лежит в csv файле. tar архив и csv файл каждого шарда должны иметь одинаковые имена (индекс шарда).

Пример структуры:

0.tar 0.csv 1.tar 1.csv ... 

Файл 0.csv:

image_name, caption 0.jpg, caption for image 1 1.jpg, caption for image 2 ... 

Чтение датасета из формата shards:

from DPF.configs import ShardsDatasetConfig from DPF.dataset_reader import DatasetReader config = ShardsDatasetConfig.from_modalities( 'tests/datasets/shards_correct', image_name_col='image_name', caption_col='caption' ) reader = DatasetReader() processor = reader.from_config(config)

Формат sharded files

Этот формат похож на формат sharsd, но вместо tar архивов файлы лежат в папках.

Пример структуры:

. ├── 0/ │ ├── 0.jpg │ ├── 1.jpg │ └── ... ├── 0.csv ├── 1/ │ ├── 1000.jpg │ ├── 1001.jpg │ └── ... ├── 1.csv └── ... 

Чтение датасета из формата sharded files:

from DPF.configs import ShardedFilesDatasetConfig from DPF.dataset_reader import DatasetReader config = ShardedFilesDatasetConfig.from_modalities( 'tests/datasets/shards_correct', image_name_col='image_name', caption_col='caption' ) reader = DatasetReader() processor = reader.from_config(config)

Базовое использование

Конфиги

Чтобы начать работу с датасетом, нужно сначала создать конфиг DatasetConfig, описывающий датасет и его модальности. Для каждого формата данных нужно использовать соответствующий конфиг. Пример для формата shards:

from DPF.configs import ShardsDatasetConfig config = ShardsDatasetConfig.from_modalities( 'examples/example_dataset/', # путь к датасету image_name_col='image_name', # название колонки в csv с названием изображения video_name_col='video_name', # название колонки в csv с названием видео caption_col='caption' # название колонки в csv с кэпшенами )

Чтение датасета

Считать датасет можно с помощью класса DatasetReader, передав конфиг в метод from_config:

from DPF.configs import ShardsDatasetConfig from DPF.dataset_reader import DatasetReader config = ShardsDatasetConfig.from_modalities( 'examples/example_dataset/', image_name_col='image_name', caption_col='caption' ) reader = DatasetReader() processor = reader.from_config(config)

Пример чтения датасета с видео в формате sharded files:

from DPF.configs import ShardedFilesDatasetConfig config = ShardedFilesDatasetConfig.from_modalities( 'examples/example_video_dataset/', video_name_col='image_name', caption_col='caption' ) reader = DatasetReader() processor = reader.from_config(config)

Взаимодействие с датасетом происходит через интерфейс DatasetProcessor. DatasetProcessor дает возможность валидировать, просматривать, фильтровать датасеты.

Просмотр и изменение датасета

Обработчик датасета (интерфейс DatasetProcessor) даёт возможность посмотреть статистику и информацию по датасету, а также посмотреть рандомные семплы данных.

Получить датафрейм датасета можно, обратившись к атрибуту df:

processor.df

Вывести саммари о датасете:

processor.summary()

Обновить существующие или добавить новые колонки:

processor.update_columns(['column_to_update', 'new_column'])

Переименовать колонки:

processor.rename_columns({'old_column': 'new_columns'})

Удалить колонки:

processor.delete_columns(['column_to_delete'])

Получить рандомный семпл из датасета:

modality2bytes, metadata = processor.get_random_sample()

Фильтрация

Фильтры - это модели или алгоритмы, которые позволяют посчитать некоторый набор метрик для датасета. Фильтры обрабатывают данные и добавляют новые колонки с посчитанными метриками.

Список фильтров:

  • images:
    • ImageInfoFilter - получение базовой информации (высота, ширина) об изображениях
    • PHashFilter - подсчет PHash изображений
    • ImprovedAestheticFilter - модель определения эстетичности изображений
    • BLIPCaptioningFilter - кэпшенинг моделью BLIP
    • CLIPLabelsFilter - определение близости изображения с набором текстов с помощью модели CLIP
    • LLaVaCaptioningFilter - кэпшенинг моделью LLaVA-13b
    • NSFWFilter - детекция NSFW изображений
    • CRAFTFilter - детекция текста
    • OCRFilter - распознавание текста
    • WatermarksFilter - детекция водяных знаков на изображении
  • text-image:
    • BlipFilter - определение близости между картинкой и кэпшеном моделью BLIP-2
    • CLIPFilter - определение близости между картинкой и кэпшеном моделью CLIP
    • RuCLIPFilter - определение близости между картинкой и кэпшеном моделью ru-clip
  • texts:
    • LangFilter - определение языка текста
    • RegexFilter - фильтрация регулярными выражениями
  • videos:
    • VideoInfoFilter - получение информации о видео (ширина, высота, fps, длительность)
    • ImageFilterAdapter - адаптер картиночных фильтров к одному кадру видео

Применение фильтра:

from DPF.filters.images.base_images_info_filter import ImageInfoGatherer datafilter = ImageInfoGatherer(workers=8) processor.apply_data_filter(datafilter) processor.df # new columns ['width', 'height', 'is_correct'] are added

Конвертация между форматами

Конвертация в формат shards:

processor.to_shards( 'destination/dir/', filenaming="counter", # or "uuid" keys_mapping={"text": "caption"}, workers=4 )

Конвертация в формат sharded files

processor.to_sharded_files( 'destination/dir/', filenaming="counter", # or "uuid" keys_mapping={"text": "caption"}, workers=4 )

Packages

No packages published

Contributors 6

Languages