Задачи обнаружения объектов действительно интересны и по-своему сложны. Некоторые задачи действительно сложны и требуют больше данных для получения результата. Но в этой статье я собираюсь проиллюстрировать одну небольшую задачу по обнаружению символов, которую можно выполнить с меньшим количеством данных. Цель этого проекта — извлечь тексты и обнаружить различные символы из заданного набора изображений с помощью методов компьютерного зрения.

Что нам нужно для решения этой задачи:

  • факел (SSD MobileNet)модель для обучения и логических выводов.
  • cv2, matplotlib для визуализации.
  • NumPy, pandas для обработки и хранения данных.
  • Конфигурация графического процессора NVIDIA Tesla T4 или NVIDIA Tesla P100.

Обнаружение символов с помощью SSD MobileNet:

Давайте изучим данные :

Данных намного меньше, и у нас всего 7 изображений и 9 символов (классов), что делает нашу задачу мультиклассовой классификацией по обнаружению символов. Это будет сложной задачей, так как в отличие от работы с большим набором данных, мы решаем проблему с гораздо меньшим количеством данных, некоторые из них, как показано ниже:

Давайте составим план нашего проекта:

  • Поскольку у нас меньше данных, мы будем использовать некоторые методы увеличения изображения и попытаемся сгенерировать синтетические данные.
  • Мы будем использовать модель SSD MobileNet для обучения наших синтетических сгенерированных данных.
  • Мы используем все эти синтетические данные для обучения, а остальные шесть исходных изображений будем использовать для проверки.
  • На нашем последнем шаге мы будем использовать Paddle-OCR для извлечения текстов из изображений.
  • Текстовые данные включают имя устройства, номер REF, номер партии, количество и т. д., и эти данные будут сгенерированы с помощью файла Excel.

Что такое SSD MobileNet:

  • Прежде чем углубиться в SSD MobileNet, давайте сначала разберемся, что такое SSD.
  • SSD означает обнаружение одиночного выстрела и используется для обнаружения объектов в режиме реального времени.
  • Два основных компонента SSD — это модель магистрали и головка SSD.
  • Где базовая модель обычно представляет собой предварительно обученную сеть классификации изображений, которая действует как средство извлечения признаков для всей модели.
  • Головка твердотельного накопителя — это всего лишь один или несколько сверточных слоев, добавленных к этой основе, которые дадут нам местоположение и класс требуемых объектов через координаты ограничивающей рамки.
  • В нашей модели мы будем использовать MobileNetв качестве экстрактора признаков. Вот почему она называется моделью SSD MobileNet.

Две части этого изображения, первая с белыми прямоугольниками, представляют сеть архитектуры Mobile Net, а вторая с синими прямоугольниками — головку SSD.

Давайте сгенерируем синтетические данные:

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

  • Сначала мы получим одно изображение из семи исходных изображений и попробуем нашу аугментацию только на этом выбранном изображении.
  • Затем мы создадим синтетические изображения 7 000, назначив случайным образом определенные символы, чтобы модель научилась идентифицировать объекты в меньшем масштабе, чем обычно.
  • Приведенный ниже код поможет нам сгенерировать изображения размером 7k и сохранить их во фрейме данных с деталями символов (номера классов) вместе с соответствующими ограничивающими рамками.
  • Фрейм данных с шестью столбцами, где xmin, ymin, xmax и ymax — это координаты ограничивающей рамки, тогда как класс (от 0 до 9) представляет количество символов.

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

Пора обучить модель:

  • Используя приведенный ниже фрагмент кода, мы сможем загрузить модель ssdlite320_mobilenet_v3_large из torchvision и настроить модель для классификации в соответствии с нашими требованиями, т. е. в общей сложности 10 классов, включая один фоновый класс.
  • Как мы и планировали ранее, мы не собираемся проводить валидацию во время обучения и будем использовать все данные о самом обучении. Мы будем обучать 25 эпох для 7k изображений с размером пакета 5.
  • Здесь мы взяли скорость обучения за 0,01 с импульсом и падением веса за 0,9 и 0,0005 соответственно.

Давайте проверим выходные данные модели:

  • Приведенный ниже прогноз исходного изображения показывает, что модель довольно хорошо работает после 20 эпох.
  • Ограничительные рамки соответствуют названию класса.
  • Получена оценка достоверности (в диапазоне от 0 до 1 для каждого символа).

Извлечение текста с помощью Paddle-OCR:

Что такое Paddle-OCR:

  • Прежде чем погрузиться в Paddle-OCR, давайте сначала разберемся, что такое OCR.
  • OCR (оптическое распознавание символов) используется для преобразования текстовых документов в цифровые документы. Он классифицируется в основном как общий OCR и OCR для конкретного домена.
  • Paddle-OCR – это общий инструмент OCR с открытым исходным кодом, который использует алгоритм "Paddle" (горизонтальное распознавание) для обнаружения текста, занимая очень мало памяти и поддерживая многоязычные функции.
  • Модель может идентифицировать текст в статических и движущихся изображениях независимо от их ориентации и языка. Время отклика распознавания намного меньше (микросекунды).

Случаи использования paddle -OCR:

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

Давайте напишем код и извлечем некоторые детали:

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

Заключение :

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

Ссылки: