Настройка нейронной сети для детекции необходимых объектов |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-06-10 18:05 техническое зрение, теория программирования, методы распознавания образов Нейронные сети – сложные математические алгоритмы, которые помогают решать большой круг задач. Перед использованием их необходимо настроить и обучить. Обучение нейронной сети достаточно долгий по времени и затратный по вычислительным ресурсам процесс. Однако существуют инструменты, благодаря которым мы можем упростить эти проблемы. Сегодня мы рассмотрим процесс переобучения нейронной сети по детекции определенного объекта на изображении. В качестве примера для детекции объектов будем использовать алгоритм YOLOv3. Дополнительные материалы по статье вы сможете найти на github странице. Пример установки и настройки осуществляется на ОС Windows 10. В первую очередь нам необходимо скачать или клонировать необходимые материалы для переобучения нейронной сети под определенный тип объекта с данной github страницы. Для того чтобы не возникало проблем с доступом или разрешениями, материалы лучше разместить в директории своей учетной записи, например: C:Usersuser_nameDocumentsNN. 1. Переходим в папку yolov3-master, вызываем терминал (командную строку) и выполняем команду pip install -U -r requirements.txt. При запуске команды некоторые из пакетов не установились, т.к в репозитории pip для windows, пакетов с таким названием не существует. Чтобы установка прошла успешно, в requirements.txt мы должны закомментировать несколько пакетов («torch >= 1.5» и «pycocotools»). Затем установить pytorch с помощью следующей команды:
Пакет pycocotools в нашем случае не понадобится. Также необходимо скачать и установить CUDA tools, для того чтобы ваши вычисления проходили на видеокарте, что в разы увеличивает скорость переобучения. 2. После успешного завершения установки можем приступать к подготовке данных. Для лучшей работы алгоритма фотографии для обучения необходимо брать с материалов, на которых будет производится обработка. Например, необходимо обработать видеоматериалы с камер видеонаблюдения, которые установлены в помещении, где объекты располагаются под большим углом. В такой ситуации будет очень сложно обучить алгоритм для детекции объектов, которые сильно отличаются от картинок в интернете, на которых была обучена нейронная сеть. Таким образом, обучающая выборка составляется либо из скрин-снимков по видеоматериалам, либо с помощью ручной съемки фотоаппаратом. Размер обучающей выборки может сильно варьироваться, все зависит от характера задачи. В данном примере набор данных состоит из 46 картинок, на которых изображены три типа объектов (ручка, карандаш, маркер). Фотосъемка производилась на фоне стола и листа А4. 3. Следующий этап состоит в разметке объектов на изображении. Однако, перед тем как приступить к разметке, необходимо увеличить обучающую выборку с помощью нескольких методов аугментации. Это важно для улучшения способностей нейронной сети к распознаванию объектов в различных вариациях. Несколько примеров аугментации можно найти в данной тетрадке. По завершении аугментации объединяем оригинальные изображения с результатом аугментации в одну папку (важно, изображения должны располагаться в корне папки yolov3_master, например: C:Usersuser_nameDocumentsNN yolov3_masterimages). Далее с помощью программы labelImg проводим разметку объектов, последовательно выполняя следующие шаги:
В результате в папке labels появятся текстовые документы с названиями изображений, в которых содержится метка класса и четыре координаты — нормализованные значения x,y,w,h, которые описывают расположение прямоугольника для каждого объекта на изображении (1 – это номер строки в редакторе Notepad++ и не относится к содержимому документа): 4. Далее нам необходимо разделить подготовленную выборку на обучающую и тестовую. В данном случае необходимо создать 2 текстовых документа (train_112.txt и test_24.txt), в которых будут указаны полный путь расположения для каждого изображения. Пример создания документов можно найти в тетрадке. 5. Для того чтобы искомые объекты были именованными необходимо создать файл с расширением .names, например objects.names, в котором указаны имена в том же порядке, как указано в classes.txt в папке labels. Выглядит примерно так: Далее необходимо создать файл с расширением .data, например conf.data, в котором указано количество классов (в данном примере 3), файлы с именами объектов, а также файлы с расположением изображений для обучающей и тестовой выборки: Файлы objects.names, conf.data и последующие файлы необходимо поместить в следующую директорию: yolov3_masterdata, заранее удалив с неё все файлы. 6. Для переобучения необходимо настроить конфигурационный файл, для этого с папки (…yolov3_mastercfg) копируем файл yolov3-spp.cfg в папку (…yolov3_masterdata). Далее необходимо отредактировать строки (636,643 — 722,729 — 809,816) для каждого из трех слоев: Где, filters = (5 + n) * 3 и classes = n. n – количество классов (в данном примере 3). 7. Далее необходимо скачать веса для настроенного конфигурационного файла. Для этого со страницы скачиваем файл yolov3-spp.pt и помещаем его в (…yolov3_masterdata). Для примера используется алгоритм yolov3-spp. Однако существует еще несколько вариаций алгоритма, например, yolov3-tiny, что является облегченной версией yolov3-spp. Облегченная версия менее точна, но при это скорость обработки материалов значительно выше. 8. Переходим непосредственно к переобучению алгоритма под свой тип объекта. Для этого в папке …yolov3_master запускаем командную строку и вводим следующую команду:
После запуска команды может возникнуть ошибка следующего характера: Для решения данной проблемы необходимо закомментировать строки в файле utils.py в папке utils: В теле функции check_git_status закомментируем все строки кроме print, в который передадим любую строку, например, «ss». Также может появиться ошибка следующего вида: Данная ошибка говорит о том, что не хватает памяти видеокарты для построения вычислительного графа. Одним из способов решения данной проблемы является уменьшение размера батча при обучении. Для этого в файле (…yolov3_master rain.py) необходимо изменить параметр batch_size, по умолчанию установлено 16, изменим на меньшее значение (8 или 4) кратное 4: Также данное значение можно передать явно, используя значение параметра при инициализации:
В примере выше мы указали конфигурационный файл, файл с информацией об обучающей выборке, веса и параметр сохранения. Параметр —nosave указывает на то что будет сохранен только финальный файл с весами. Также можно настроить в файле train.py режим сохранения, например, если вы хотите сохранять веса каждые 400 epoch: Также важно указать параметр —epochs, количество эпох зависит от типа объектов, объема обучающей выборки и других факторов. В данном примере изначально было 46 изображений, с помощью методов аугментации набор данных увеличился до 136, из них 112 – обучающая выборка, 24 – тестовая выборка. Вычисления проводились на видеокарте GTX 1060 6 GB. Первая попытка проводилась для 300 эпох, обучение заняло порядка 2.5 часов. Выявилась очень плохая точность алгоритма. Вторая попытка проводилась для 1200 эпох, обучение заняло ~ 12 часов. По окончании обучения в папку (…yolov3_masterweights) сохранятся веса — файл last.pt. Для того чтобы проверить работоспособность алгоритма необходимо запустить следующую команду:
Перед запуском команды необходимо поместить изображения для обработки алгоритмом в папку (…yolov3_masterdatasamples). Результат появится в папке (…yolov3_masteroutput). Таким образом, проведено переобучение готовой нейронной сети, которая была способна определять 80 классов объектов, под новые 3 типа объекта, не вошедших в этот список. Для объекта «маркер» алгоритм не совсем точен, уверенность составляет меньше 0.5. Одной из причин может быть малый размер обучающей выборки, т.к. в данном примере изображений с маркерами было 26 %, остальное ручки и карандаши. ссылка на оригинал статьи https://habr.com/ru/post/506166/ Источник Источник: savepearlharbor.com Комментарии: |
|