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

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

Вам потребуется не менее 10 000 изображений для каждой функции. Более реалистично, я бы умножил это на 5x между обучением, проверкой, отсевом… Это много изображений для загрузки. Подождите секунду, где я могу получить данные?

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

Возьмем очень простую задачу: «Apple против Apple». Давайте обучим модель распознавать «логотип Apple» и «Apple Fruit». Цель состоит в том, чтобы собрать 90 000 изображений и разделить их на две равные части: 50 % логотипа и 50 % фруктов.

Google Images предоставляет 300 изображений, что составляет 0,66% изображений, необходимых для обучения модели распознаванию «яблочного фрукта».

Кроме того, Google разрешает всего несколько запросов в час. Это определенно блокировщик, если вы пытаетесь создать большой набор данных. Скажем, если вам нужны хорошие изображения размером 90 000, вам, возможно, потребуется загрузить изображения размером 108 000. Опыт показывает, что вам нужно удалить ~ 20% изображений, потому что Google Images возвращает кучу файлов нежелательных изображений (HTML, SVG…)

Если поиск изображений Google возвращает 300 изображений, нам потребуется 360 HTTP-запросов, чтобы получить все 108 000 изображений. Я вижу несколько вариантов:

  • Вручную запустите 360 запросов и загрузите 90 000 изображений * 2 минуты на изображение = 3000 часов = 63 недели для одного человека. Или 3000*10$/час (минималка)=~30к$
  • Создайте автоматизированное программное обеспечение. Наиболее эффективным вариантом будет запуск запроса с помощью Python (запросы и wget — хорошие пакеты). И подключите / настройте многочисленные http-прокси для перенаправления вашего трафика, чтобы обмануть Google. В лучшем случае: инвестиции ~20 тысяч долларов.

  • Лучше всего инвестировать 50 долларов в месяц в подписку SerpAPI. Вы можете интегрировать SerpAPI в свой любимый язык программирования: Python, Golang, Java, NodeJs/Javascript, Php, Curl…

Давайте посмотрим, как быстро создать набор данных с помощью Google Images, Keras/Tensorflow, Python и SerpAPI.

Полный исходный код хранится на GitHub: https://github.com/serpapi/showcase-serpapi-tensorflow-keras-image-training

Общий поток следующий:

  • Получить результат изображения из SerpAPI, используя формат json
  • Загрузите все оригинальные изображения прямо из источника.
  • Классифицируйте изображения, перемещая их по каталогам, и бросьте плохое яблоко.
  • Обучите модель
  • Анализируйте точность с помощью небольшого проверочного набора

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

Мы предлагаем два способа запуска этого руководства.

  1. Изображение на основе Docker, предоставленное командой Tensorflow
  2. Запустите tensorflow 1.12 в своей среде.

Примечание. Люблю докер, он сэкономит время на установке тензорного потока, но добавляет немного сложности, а виртуальная машина имеет небольшое снижение производительности.

Вот короткое видео, показывающее процесс в действии.

https://youtu.be/kWVobAUzrcc

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

  1. Скачать больше изображений (требуется подписка на сервис)
  2. Запустите wget параллельно (не уверен, что это лучший вариант для Python)
  3. Уточнить модель
  4. Изменение размера изображений / настройка с использованием данных
  5. Улучшите процесс классификации, улучшив поиск изображений в Google, например: «Apple Fruit», «Apple Brand».

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

Держите это Просто и Глупо.