850 тыс. Изображений за 24 часа: автоматизация создания наборов данных глубокого обучения

Почему

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

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

Вымойте, ополосните, повторяйте, пока не накопите достаточно большой корпус, чтобы удовлетворить вашу страсть к персональным данным.

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

Я создаю классификатор, и мне нужно большое количество изображений за короткий промежуток времени. Классификатор будет использован в следующем проекте под названием Pelops. Классификатор сделает снимок и определит тип кузова транспортного средства, т. Е. малолитражный, компактный, легковой автомобиль, фургон, внедорожник, кроссовер и т. Д.

Мысли перед действиями

Сначала я подумал о сайтах с опубликованными API-интерфейсами для вызова, например, Edmonds, где вы можете указать марку и модель автомобиля. Такой подход позволил бы мне получать изображения по марке / модели, и я мог бы использовать другой сайт, чтобы запрашивать изображения по типу тела.

Во-вторых, я подумал об иерархических сайтах, подобных Craigslist, где я мог бы брать изображения и просматривать публикации по маркам и моделям. (Я не очень ожидал, что это сообщение будет добыто.)

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

Приближалось время кодирования; Мне нужно было направить моего внутреннего ленивого разработчика и подумать о способах получения изображений на моих условиях. Я определенно хотел передать кому-то список атрибутов и заставить его возвращать серию изображений. Мы с коллегой подумали, что это отличный повод поругать поисковик. Я могу предоставить цвет, марку и модель; поисковая система в основном возвращала изображения, связанные с моим запросом.

Трубопровод

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

Составить список изображений

Написание кода для запроса / очистки поисковой системы и загрузки изображений из поисковой системы заняло менее получаса. Запуск скрипта и создание списка изображений для загрузки заняли 5 часов (поисковые системы становятся привередливыми, если их очистить слишком быстро).

(100 изображений * 1046 марок / моделей * 10 цветов) означало бы, что я, надеюсь, накоплю около миллиона изображений. Будут ли они полезными изображениями - вот о чем я беспокоился в будущем.

Скачать изображения

Фактическая загрузка изображения заняла более 10 часов. Некоторые сайты не отвечали или загружались медленно.

[ПРИМЕЧАНИЕ. Некоторые из загружаемых вами материалов могут быть защищены авторским правом]

Сохранить изображения

Хотя я просил изображения, иногда вы не всегда получаете то, что хотите. Я не выполнял проверку типа файла во время загрузки. Выборочная проверка показала, что я иногда загружал HTML вместо изображения. Однако количество не-изображений было небольшим по сравнению с количеством изображений.

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

Сохраняйте изображения с автомобилями

Удаление не-изображений привело к следующей проблеме; некоторые из загруженных файлов не были изображениями автомобилей. Не желая лично просматривать 950 тысяч изображений в Mechanical Turk, я обратился к использованию предварительно обученной модели компьютерного зрения, чтобы помочь мне.

Я использовал Keras и предварительно обученную нейронную сеть (resnet50), чтобы определить, была ли машина на изображении. Если один из следующих терминов [автомобиль, грузовик, внедорожник, скорая помощь,…] находился в 4 лучших ярлыках, возвращаемых для изображения, я оставил изображение.

Обработка изображений с помощью модели глубокого обучения с использованием графического процессора заняла около 8 часов. Модель оценивала примерно 2000 изображений в минуту на одном Titan X.

После финального прохода осталось около 840к изображений. Беглый просмотр данных показал, что в основном автомобили.

Создать дополнительные текстовые функции

Моя последняя ленивая идея дополнить графические метки возникла из-за еще большего злоупотребления поисковыми системами. Я хотел маркировать автомобиль, внедорожник, грузовик и / или фургон для каждого транспортного средства. Чтобы узнать, должна ли конкретная модель автомобиля иметь этикетку, просто найдите ее и посчитайте результаты.

Пытаясь классифицировать Ford Mustang, я бы выполнил 4 поиска:

  1. «Автомобиль Ford Mustang»
  2. «Форд Мустанг внедорожник»
  3. «Грузовик Форд Мустанг»
  4. «Фургон Форд Мустанг»

Затем я фиксировал количество результатов, возвращаемых поисковой системой.

Вы можете взять самое большое значение в качестве метки или использовать массив в качестве вектора для описания класса. Бьюсь об заклад, вектор будет лучше из-за таких автомобилей, как Шевроле Эль Камино.

Заключительные мысли

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

Общее время на создание скриптов, загрузку и обработку файлов заняло около 24 часов.

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

Если вы заинтересованы в создании собственного набора данных, проверьте git repo и посмотрите Pelops, чтобы узнать, как лаборатория будет использовать данные о машине.

Lab41 - это испытательная лаборатория Кремниевой долины, в которой эксперты из разведывательного сообщества США (IC), академических кругов, промышленности и In-Q-Tel собираются вместе, чтобы лучше понять, как работать с большими данными и, в конечном итоге, использовать их.

Узнайте больше на lab41.org и подпишитесь на нас в Twitter: @ _lab41