Создаем свой датасет с пришельцами

Создаем свой датасет с пришельцами

Сегментацией людей с помощью нейронных сетей уже никого не удивишь. Есть много приложений, таких как Sticky Ai, Teleport Live, Instagram, которые позволяют выполнять такую сложную задачу на мобильном телефоне в реалтайме.

Итак, предположим планета Земля столкнулась с внеземными цивилизациями. И от пришельцев из звездной системы Альфа Центавра поступает запрос на разработку нового продукта. Им очень понравилось приложение Sticky Ai, которое позволяет вырезать людей и делать стикеры, поэтому они хотят портировать приложение на свой межгалактический рынок.

К сожалению, наша нейронная сеть, которая используется в приложении для сегментации, обучена только на изображениях человеческой расы, поэтому на пришельцах работает плохо. Срочно возникает потребность расширить наш датасет пришельцами.

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

Задача:

Есть изображения пришельцев, для каждого изображения надо создать черно-белую маску, в которой белым будет выделен пришелец, а черным фон.

Создаем свой датасет с пришельцами

Решение:

Первым делом нужно составить ТЗ для фрилансеров, которые будут размечать изображения. Так как нам нужно очень высокое качество, то будем размечать изображения в фотошопе.

Если очень хорошее качество нам не нужно, либо выделяемый объект очень простой, то такую разметку можно производить с помощью ломаных линий (polygon vertices). Такой тип разметки доступен на Amazon Mechanical Turk и Яндекс.Толоке, где рабочая сила очень дешевая.

Можно составить ТЗ в виде 10-ти страничного PDF документа, но:

1. Фрилансеры обычно не читают ТЗ, а пролистывают.

2. В документе сложно описать подробно алгоритм как правильно и быстро надо размечать.

3. На составление самого документа уходит очень много времени.

Поэтому сейчас мы полностью отказались от ТЗ в виде PDF документа, а предоставляем задание в виде обучающего видео.

После такого нововведения:

• В 2 раза выросла производительность фрилансеров (так как в видео представлен самый быстрый и оптимальный способ разметки).

• В 3 раза сократились вопросы, задаваемые фрилансерами (так как на видео показан каждый шаг).

• В 2 раза получилось уменьшить стоимость разметки (так как цена часа работы не изменилась, но фрилансеры размечают в два раза быстрее).

Особое внимание надо уделить методу разметки в фотошопе. Фотошоп — очень гибкая программа, в которой производить разметку можно разными способами. Поэтому желательно заранее определить какое качество разметки вам нужно, изучить разные инструменты выделения, сравнить их между собой и выбрать тот, с помощью которого обработка изображения происходит быстрее всего.

Пример:

Есть два способа выделения:

Способ А занимает 5 мин на изображение.

Способ Б занимает 10 мин на изображение.

При способе А за час фрилансер размечает 12 изображений, поэтому цена за изображение будет 150 / 12 = 12.5 руб.

При способе Б за час фрилансер размечает 6 изображений, поэтому цена за изображение будет 150 / 6 = 25 руб.

Итак, мы нашли лучший способ выделения и записали видеоинструкцию, что дальше?

Осталось найти фрилансеров. Есть много бирж фрилансеров, таких как Fl.ru, Weblancer, Фриланс.ру.

Но в последнее время мы используем фриланс-биржу WORK-ZILLA, потому что:

1. Там довольно дешевая рабочая сила.

2. Много исполнителей.

3. Удобный интерфейс для создания заданий.

Для того, чтобы создать задание:

Регистрируемся, пополняем баланс, нажимаем «Дать задание», выбираем «Дизайн»->«Обработка фото».

Создаем свой датасет с пришельцами

Заполняем заголовок и описание, определяем время на выполнение задания. Обработав несколько пришельцев, я заметил, что на одно изображение в среднем уходит 4 минуты. Т.е. за час выходит 15 изображений, поэтому устанавливаем цену за одно изображение 150 / 15 = 10 руб.

Создаем свой датасет с пришельцами

Сразу после публикации задания исполнители начинают предлагать свои услуги.

Создаем свой датасет с пришельцами

Выбираем самого красивого по аватарке опытного по отзывам и утверждаем в качестве исполнителя, выдаем изображения. Как видим, поиск фрилансера у нас занял менее 15 минут.

Создаем свой датасет с пришельцами

На следующее утро исполнитель прислал работу.

Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами

Как теперь ее проверить?

Конечно, можно каждое изображение открыть в фотошопе и посмотреть насколько хорошо все выделено, но что делать, если на тебя одновременно работает 20 человек, и каждый присылает по 40 изображений в день?

Автоматизировать! Для облегчения проверки мною был реализован на питоне такой скрипт:

import cv2 import numpy as np import os import shutil from __future__ import print_function from tqdm import tqdm_notebook as tqdm #функция, которая рисует фон как в фотошопе def generate_checkerboard(shape, size): res = np.ones(shape, dtype=np.float32) for i in range(0, shape[0] // size + 1): for j in range(0, shape[1] // size + 1): if (i + j) % 2 == 0: res[i * size:i * size + size, j * size:j * size + size] = 0.7 return np.stack([res] * 3, axis=2) path = '01_Починок Сергей_13' files_im = filter(lambda x: x[-4:] == '.jpg', os.listdir(path + '/images')) files_masks = filter(lambda x: x[-4:] == '.png', os.listdir(path + '/masks')) print('Кол-во изображений: %s' % len(files_im)) print('Кол-во масок: %s' % len(files_masks)) if len(files_im) != len(files_masks): print('Кол-во изображений и масок не совпадает') raise Exception('bad count') #создаем папку res, в которую будут записываться коллажи os.makedirs(path + '/res') for idd in tqdm(map(lambda x: x[:-4], files_im)): print(idd) mask = cv2.imread(path + '/masks/' + idd + ".png") / 255. im = cv2.imread(path + '/images/' + idd + ".jpg") checkerboard = generate_checkerboard(im.shape[:2], 40) * 255 cv2.imwrite(path + '/res/' + idd + ".jpg", np.concatenate([im, im * (1 - mask), im * mask + (1 - mask) * checkerboard],axis=1))

Скрипт берет исходное изображение, маску, и делает из них коллаж, состоящий из оригинального изображения, вырезанного фона и вырезанного пришельца.

Запускаем скрипт и получаем такие коллажи:

Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами
Создаем свой датасет с пришельцами

Просмотрев изображения, замечаем, что одно изображение исполнитель выделил не очень хорошо.

Создаем свой датасет с пришельцами

Просим подправить изображение.

Создаем свой датасет с пришельцами

После того, как фрилансер исправил все наши замечания, подтверждаем работу и расписываем благодарный отзыв фрилансеру.

Создаем свой датасет с пришельцами

Итог:

Предположим, что для обучения нейронной сети нужно будет 2000 изображений пришельцев.Тогда, чтобы собрать такой датасет, надо будет потратить всего 2000 х 10 = 20000 руб, а если учесть, что в среднем один фрилансер обрабатывает по 40 изображений в день и одновременно над разметкой трудятся 10 человек, то создание датасета займет 2000 / (10 х 40) = 5 дней.

P.S.

Конечно, мы пока не столкнулись с инопланетянами, никто из команды Prisma AI сегментировать пришельцев не собирается, но на этом примере я хотел показать вам, как просто и с минимальными затратами можно создать свой датасет под любую задачу, будь это детекция пешеходов для беспилотного автомобиля или определение лесов на спутниковых снимках.

Понравилась статья? Еще больше информации на тему данных, AI, ML, LLM вы можете найти в моем Telegram канале “Роман с данными”

  • Как подготовиться к сбору данных, чтобы не провалиться в процессе?
  • Как работать с синтетическими данными в 2024 году?
  • В чем специфика работы с ML проектами? И какие бенчмарки сравнения LLM есть на российском рынке?

Обо всем этом читайте в “Роман с данными”

11
Начать дискуссию