Задачи обнаружения объектов действительно интересны и по-своему сложны. Некоторые задачи действительно сложны и требуют больше данных для получения результата. Но в этой статье я собираюсь проиллюстрировать одну небольшую задачу по обнаружению символов, которую можно выполнить с меньшим количеством данных. Цель этого проекта — извлечь тексты и обнаружить различные символы из заданного набора изображений с помощью методов компьютерного зрения.
Что нам нужно для решения этой задачи:
- факел (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.
Ссылки: