[Машинное обучение] Как я обучил модель с нуля для обнаружения и сегментации печатей
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Привет хабр! Сегодня хочу поделиться своим кейсом. Распознавание печатей позволило бы автоматизировать множество рутиных задач, упростив работу человека. Для своей задачи я использую модель Mask R-CNN. Mask R-CNN представляет собой двухэтапную структуру: на первом этапе сканируется изображение и генерируются предложения (области, которые могут содержать объект). На втором этапе предложения классифицируются и создаются ограничивающие рамки и маски.Что такое сегментация?Сегментация - это задача определения контуров объекта на уровне пикселей. По сравнению с аналогичными задачами компьютерного зрения, это одна из самых сложных задач зрения.Обратите внимание на следующие вопросы:
Классификация: на этом изображении есть кошка.Обнаружение объектов: на этом изображении в этих местах есть две кошки, одна собака и утка. Мы начинаем учитывать перекрывающиеся объекты.Сегментация: в этих местах есть 4 всплывающих окон, и это пиксели, принадлежащие каждому из них.Подготовка набора данных для обученияТак как, нет открытых наборов данных для печатей(по крайне мере я не нашел), я решил создать набор данных с нуля. Я искал изображения с открытых каналов глобальной паутины. Я собрал около 2 тысяч изображений разделил их на обучающий набор и набор для проверки. Искать изображения очень просто. Аннотировать их - сложная часть.
Вы наверное задаётесь вопросом, разве нам не нужен больше изображений, чем 2 тысяч для обучения модели глубокого обучения? Иногда да, но часто нет. Я полагаюсь на трансферное обучение. Это просто означает, что вместо обучения модели с нуля я начинаю с файла весов, который был обучен на наборе данных COCO (в репозитории Mask R-CNN они предоставляют его). Хотя набор данных COCO не содержит класса печатей, он содержит много других изображений (~ 120 тысяч), поэтому обученные веса уже изучили множество функций, общих для естественных изображений, что действительно помогает.Для аннотирования изображений я использовал VIA (VGG Image Annotator). Это отдельный HTML-файл, который вы загружаете и открываете в браузере. Аннотирование первых нескольких изображений было очень медленным, но как только я привык к пользовательскому интерфейсу, я начал аннотировать объект около 20 секунд.
Загрузка набора данныхНе существует общепринятого формата для хранения масок сегментации. Некоторые наборы данных сохраняют их как изображения PNG, другие - как точки многоугольника и так далее. Для обработки всех этих случаев наша реализация предоставляет класс набора данных, который вы наследуете, а затем переопределите несколько функций для чтения ваших данных в любом формате.Инструмент VIA сохраняет аннотации в файле JSON, и каждая маска представляет собой набор точек многоугольника. Я не нашел документации по формату, но это довольно легко понять, просмотрев сгенерированный JSON. Я включил в код комментарии, чтобы объяснить, как выполняется синтаксический анализ.
Мой SealDataset класс выглядит так:
class SealDataset(utils.Dataset):
def load_balloons(self, dataset_dir, subset):
...
def load_mask(self, image_id):
...
def image_reference(self, image_id):
...
load_balloonsсчитывает файл JSON, извлекают аннотации и итеративно вызывает внутренние add_classи add_imageфункцию для создания набора данных.
load_mask генерирует растровые маски для каждого объекта изображения путем рисования многоугольников.
image_referenceпросто возвращает строку, которая идентифицирует изображение для целей отладки. Здесь он просто возвращает путь к файлу изображения.Вы могли заметить, что мой класс не содержит функций для загрузки изображений или возврата ограничивающих рамок. Функция по умолчанию load_imageв базовом Datasetклассе обрабатывает загрузку изображений. И ограничивающие прямоугольники генерируются динамически из масок.Проверить набор данныхЧтобы убедиться, что мой новый код реализован правильно, я добавил эту записную книжку Jupyter . Он загружает набор данных, визуализирует маски и ограничивающие рамки, а также визуализирует якоря, чтобы убедиться, что размеры моих якорей подходят для размеров моих объектов. Вот пример того, что вы должны ожидать:
Совет по коду:чтобы создать этот блокнот, я скопировал файл inspect_data.ipynb , который мы написали для набора данных COCO, и изменил один блок кода вверху, чтобы вместо него загрузить набор данных Seal.
КонфигурацииКонфигурации для этого проекта аналогичны базовой конфигурации, используемой для обучения набора данных COCO, поэтому мне просто нужно было переопределить 3 значения. Как и в случае с Datasetклассом, я наследую от базового Configкласса и добавляю свои переопределения:
class BalloonConfig(Config):
# Give the configuration a recognizable name
NAME = "seal"
# Number of classes (including background)
NUM_CLASSES = 1 + 1 # Background + seal
# Number of training steps per epoch
STEPS_PER_EPOCH = 100
В базовой конфигурации для большей точности используются входные изображения размером 1024x1024 пикселей. Я так и оставил. Мои изображения немного меньше, но модель автоматически меняет их размер.ОбучениеМаска R-CNN - довольно большая модель. Вам нужен современный графический процессор. Я пробовал на Quadro M2000 c 4 ГБ памяти. Обучение заняло около 3-4 часов. Начните обучение с этой команды, запущенной из seal. Здесь мы указываем, что тренировка должна начинаться с предварительно натренированных весов COCO. Код автоматически загрузит веса из нашего репозитория:
python seal.py train --dataset=/путь/к/датасету --model=coco
И возобновить тренировку, если она остановилась:
python seal.py train --dataset=/путь/к/датасету --model=last
Проверка результатовВ записной книжке inspect_seal_model показаны результаты, полученные с помощью обученной модели. Проверьте блокнот, чтобы увидеть больше визуализаций и пошаговое руководство по конвейеру обнаружения.
Предобученные весы для обнаружения и сегментации можете скачать здесь. Чтобы использовать, добавьте проект в папку samples в Mask R-CNN. Если есть необходимость датасета, напишите мне в почту: galym55010@gmail.com
===========
Источник:
habr.com
===========
Похожие новости:
- [Анализ и проектирование систем, Big Data, Машинное обучение, Natural Language Processing] Насколько Быстрой Можно Сделать Систему STT?
- [Машинное обучение, Искусственный интеллект] Хотите стать «учёным по данным»? Тогда не начинайте с машинного обучения (перевод)
- [Машинное обучение, Робототехника] Boston Dynamics: от боевых роботов в коммерцию
- [Машинное обучение, Искусственный интеллект, Сетевое оборудование] Искусственный интеллект в сети ЦОД: опыт Huawei
- [Обработка изображений, Big Data, Машинное обучение, Компьютерное железо, Natural Language Processing] Playing with Nvidia's New Ampere GPUs and Trying MIG
- [Информационная безопасность, Машинное обучение] Как предоставить табличные данные и сохранить при этом конфиденциальность (перевод)
- [Беспроводные технологии, Разработка систем связи, Искусственный интеллект, Транспорт] Самообучающийся ИИ начал управлять навигацией раздающих интернет аэростатов Loon
- [Машинное обучение, Научно-популярное, Искусственный интеллект] Стоит ли заменять живых актеров в блокбастерах на CGI?
- [Машинное обучение, Учебный процесс в IT, Развитие стартапа, Биотехнологии, DIY или Сделай сам] Диагностика крови с помощью Deep Learning: Как превратить проект с хакатона в стартап и поднять $20,5 млн (перевод)
- [Работа с видео, Обработка изображений, Машинное обучение, Облачные сервисы, Видеоконференцсвязь] Бесполезное видеонаблюдение или принцип «Чабудо» китайских производителей
Теги для поиска: #_mashinnoe_obuchenie (Машинное обучение), #_mask_rcnn, #_obnaruzhenie_obektov (обнаружение объектов), #_segmentatsija_izobrazhenij (сегментация изображений), #_kompjuternoe_zrenie (компьютерное зрение), #_glubokoe_obuchenie (глубокое обучение), #_mashinnoe_obuchenie (
Машинное обучение
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:51
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Привет хабр! Сегодня хочу поделиться своим кейсом. Распознавание печатей позволило бы автоматизировать множество рутиных задач, упростив работу человека. Для своей задачи я использую модель Mask R-CNN. Mask R-CNN представляет собой двухэтапную структуру: на первом этапе сканируется изображение и генерируются предложения (области, которые могут содержать объект). На втором этапе предложения классифицируются и создаются ограничивающие рамки и маски.Что такое сегментация?Сегментация - это задача определения контуров объекта на уровне пикселей. По сравнению с аналогичными задачами компьютерного зрения, это одна из самых сложных задач зрения.Обратите внимание на следующие вопросы: Классификация: на этом изображении есть кошка.Обнаружение объектов: на этом изображении в этих местах есть две кошки, одна собака и утка. Мы начинаем учитывать перекрывающиеся объекты.Сегментация: в этих местах есть 4 всплывающих окон, и это пиксели, принадлежащие каждому из них.Подготовка набора данных для обученияТак как, нет открытых наборов данных для печатей(по крайне мере я не нашел), я решил создать набор данных с нуля. Я искал изображения с открытых каналов глобальной паутины. Я собрал около 2 тысяч изображений разделил их на обучающий набор и набор для проверки. Искать изображения очень просто. Аннотировать их - сложная часть. Вы наверное задаётесь вопросом, разве нам не нужен больше изображений, чем 2 тысяч для обучения модели глубокого обучения? Иногда да, но часто нет. Я полагаюсь на трансферное обучение. Это просто означает, что вместо обучения модели с нуля я начинаю с файла весов, который был обучен на наборе данных COCO (в репозитории Mask R-CNN они предоставляют его). Хотя набор данных COCO не содержит класса печатей, он содержит много других изображений (~ 120 тысяч), поэтому обученные веса уже изучили множество функций, общих для естественных изображений, что действительно помогает.Для аннотирования изображений я использовал VIA (VGG Image Annotator). Это отдельный HTML-файл, который вы загружаете и открываете в браузере. Аннотирование первых нескольких изображений было очень медленным, но как только я привык к пользовательскому интерфейсу, я начал аннотировать объект около 20 секунд. Загрузка набора данныхНе существует общепринятого формата для хранения масок сегментации. Некоторые наборы данных сохраняют их как изображения PNG, другие - как точки многоугольника и так далее. Для обработки всех этих случаев наша реализация предоставляет класс набора данных, который вы наследуете, а затем переопределите несколько функций для чтения ваших данных в любом формате.Инструмент VIA сохраняет аннотации в файле JSON, и каждая маска представляет собой набор точек многоугольника. Я не нашел документации по формату, но это довольно легко понять, просмотрев сгенерированный JSON. Я включил в код комментарии, чтобы объяснить, как выполняется синтаксический анализ. class SealDataset(utils.Dataset):
def load_balloons(self, dataset_dir, subset): ... def load_mask(self, image_id): ... def image_reference(self, image_id): ... load_mask генерирует растровые маски для каждого объекта изображения путем рисования многоугольников.
Совет по коду:чтобы создать этот блокнот, я скопировал файл inspect_data.ipynb , который мы написали для набора данных COCO, и изменил один блок кода вверху, чтобы вместо него загрузить набор данных Seal.
class BalloonConfig(Config):
# Give the configuration a recognizable name NAME = "seal" # Number of classes (including background) NUM_CLASSES = 1 + 1 # Background + seal # Number of training steps per epoch STEPS_PER_EPOCH = 100 python seal.py train --dataset=/путь/к/датасету --model=coco
python seal.py train --dataset=/путь/к/датасету --model=last
Предобученные весы для обнаружения и сегментации можете скачать здесь. Чтобы использовать, добавьте проект в папку samples в Mask R-CNN. Если есть необходимость датасета, напишите мне в почту: galym55010@gmail.com =========== Источник: habr.com =========== Похожие новости:
Машинное обучение ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:51
Часовой пояс: UTC + 5