ВВЕДЕНИЕ
В эру цифровых технологий, машинное обучение, в частности компьютерное зрение – важная и значимая отрасль. С помощью машинного обучения люди упрощают себе жизнь, делают мир цифровых технологий лучше и безопасней. Согласно результатам международного исследования Microsoft, 94% руководителей считают, что технологии искусственного интеллекта важны для решения стратегических задач их организаций. При этом 27% опрошенных уже внедрили соответствующие технологии в ключевые бизнес-процессы, еще 46% ведут пилотные проекты.
Россия, благодаря традиционно сильной математической школе не отстает от мировых тенденций. И если судить по докладам на конференции «Технологии машинного обучения. Искусственный интеллект и нейросети: инструменты и опыт реальных проектов», организованной издательством «Открытые системы», применение средств ИИ в нашей стране уже стало если не обыденностью, то достаточно распространенным способом не только оптимизировать, но и радикально поменять бизнес-процессы.
Поскольку разнообразие методов и способов обучения искусственного интеллекта не меньше, чем у интеллекта естественного, то, прежде чем начать проект в этой области, я ознакомился с методами и способами машинного обучения, их возможностями, сферами применения и ограничениями.
Компания «ФосАгро» в настоящий момент активно внедряет элементы цифровизации на производственных предприятиях. На крупном химическом предприятии безопасности работников и охране труда уделяется большое внимание. От применения средств индивидуальной защиты на производстве зависит жизнь и здоровье человека. Сегодня все большее внимание уделяется применению технологий нейросетей, автоматическому сбору, обработке информации и формированию баз данных.
Заказчиком проекта выступила Дирекция по информационным технологиям АО «Апатит» в лице заместителя директора департамента по цифровизации Виноградова С.Е.
Объект исследования: распознавание по видео наличие на работнике химического предприятия средств индивидуальной защиты.
Предмет исследования: разработка системы, распознающей по видео наличие на работнике химического предприятия средств индивидуальной защиты.
Изучение информационных источников и уточнение темы: в процессе работы над данной темой была проанализирована основная учебная и научно-популярная литература, которая позволила осмыслить и осуществить выполнение учебно-исследовательской работы. Много интересной информации узнал из статьи Григория Алексеева, опубликованной на сайте Введение в машинное обучение [1].
Гипотеза: если изучить основы компьютерного зрения, то на практике можно реализовать модель машинного обучения, распознающую систему индивидуальной защиты (далее СИЗ) на сотруднике предприятия. Цель: применение технологий компьютерного зрения при создании модели машинного обучения на Python. Для достижения цели были поставлены и решены основные задачи:
1. изучить технологии машинного обучения;
2. приобрести навыки работы в Python;
3. разработка системы на Python, распознающей по видео наличие на работнике химического предприятия средств индивидуальной защиты.
Методы исследования: теоретические (анализ и синтез), математические.
Машинное обучение
Машинное обучение-обозначает множество математических, статистических и вычислительных методов для разработки алгоритмов, способных решить задачу не прямым способом, а на основе поиска закономерностей в разнообразных входных данных.
Машинное обучение используется в структурах обеспечения безопасности. Например, система распознавания лиц в метро. Камеры сканируют лица людей, входящих и выходящих из метро. Аналитические машины сравнивают снимки с лицами, которые находятся в розыске. Если сходство высоко, то система подает сигнал. Примеры применения в реальной жизни: диагностика заболеваний, поиск мест залегания полезных ископаемых, оценка надёжности и платёжеспособности кандидатов на получение кредитов и так далее [2].
Методы машинного обучения
Существует множество методов машинного обучения. Но самые распространённые из них – обучение с учителем и без.
Обучение с учителем — один из способов машинного обучения, в ходе которого испытуемая система принудительно обучается с помощью примеров «стимул-реакция». Метод применяется, когда необходимо найти функциональную зависимость результатов от входов и построить алгоритм, на входе принимающий описание объекта и на выходе выдающий ответ.
Обучение без учителя — один из способов машинного обучения, при котором испытуемая система спонтанно обучается выполнять поставленную задачу без вмешательства со стороны экспериментатора [3].
Кластер. Машинное обучение
Компьютерное зрение
Компьютерное зрение- это область искусственного интеллекта, связанная с анализом изображений и видео. Она включает в себя набор методов, которые наделяют компьютер способностью «видеть» и извлекать информацию из увиденного.
Выбор языка программирования
Для того чтобы реализовать алгоритм машинного обучения, необходимо выбрать язык программирования, на котором будет писаться код.
Сейчас на рынке в основном выделяют 5 языков программирования, для машинного обучения и анализа данных: Python, R, C++, JavaScript и C#. Проведя анализ, я пришёл к выводу, что самыми подходящими языками являются C++ и Python. Свой выбор я остановил на Python.
Выбор библиотеки для проекта
Для упрощения реализации искусственного интеллекта, были придуманы специальные библиотеки, позволяющие без написания длинного кода использовать нужные функции.
Для моей задачи отлично подойдёт ImageAI - библиотека Python, созданная для того, чтобы дать разработчикам возможность создавать приложения и системы с автономными возможностями глубокого обучения и компьютерного зрения с использованием простого и небольшого количества строк кода.
Нахождение данных для анализа
Чтобы наша будущая модель смогла различать объекты, ее необходимо обучить на множестве различных данных. Для этого я использовал видео с предприятия Фосагро, а также набор данных, с большим числом фотографий защитных касок.
Обработка данных
Для этого с помощью программы LabelImg я создавал аннотации к фотографиям, проще говоря, размечал нужные объекты на фото. Суммарно я разметил 800 фотографий вручную. Остальные изображения были уже аннотированы.
.
Фото 1. Разметка объектов
Помимо этого, желательно иметь +- схожий размер фотографий. В моём случае это 416*416.
Для этого я написал вот такой код, который задаёт нужный размерам фотографиям:
from PIL import Image
import os, sys
path = "/root/Desktop/python/images/"
dirs = os.listdir( path )
def change():
for item in dirs:
if os.path.isfile(path+item):
img = Image.open(path+item)
f, e = os.path.splitext(path+item)
imResize = img.resize((416,416), Image.ANTIALIAS)
imResize.save(f + ' resized.jpg', 'JPEG', quality=90)
change()
Листинг 1. Тестирование модели
Затем общее число фотографий нужно разбить в процентом соотношении. А именно 80 и 20 процентов соответственно. Где 80% - обучающие данные, а 20% - тестовые.
Создание и обучение модели
from imageai.Detection.Custom import DetectionModelTrainer
trainer = DetectionModelTrainer()
trainer.setModelTypeAsYOLOv3()
trainer.setDataDirectory(data_directory="helmet")
trainer.setTrainConfig(object_names_array=["helmet","head","person"], batch_size=4, num_experiments=30, train_from_pretrained_model="detection_model-ex-020--loss-0019.130.h5")
trainer.trainModel()
Листинг 2. Создание и обучение модели
Для начала импортируем нужную библиотеку, затем создаём модель с нужными параметрами обучения.
Trainer – Наша модель
Object_names_array – Названия, тех объектов, которые мы будем находить. Это объекты находятся в файлах для аннотации фотографий.
num_experiments – Количество эпох. Эпоха - одна итерация в процессе обучения, включающая предъявление всех примеров из обучающего множества и, возможно, проверку качества обучения на контрольном множестве.
Запускаем код и ждём выполнения обучения
Скриншот 1. Ход выполнения
По мере обучения, смотрим параметры обученной модели. Для этого напишем ещё один файл с кодом
from imageai.Detection.Custom import DetectionModelTrainer
trainer = DetectionModelTrainer()
trainer.setModelTypeAsYOLOv3()
trainer.setDataDirectory(data_directory="helmet")
metrics = trainer.evaluateModel(model_path="helmet/models/detection_model-ex-002--loss-0023.363.h5", json_path="helmet/json/detection_config.json", iou_threshold=0.5, object_threshold=0.3, nms_threshold=0.5)
print(metrics)
Листинг 3. Параметры обученной модели
Чем ближе показатель к 1(в нашем случае – head и helmet), тем модель лучше.
Тестирование модели
Для тестирования понадобиться наша модель, а также любая картинка, с объектами, которые нужно найти.
Напишем следующий код
from imageai.Detection.Custom import CustomObjectDetection
detector = CustomObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath("helmet/models/detection_model-ex-00")
detector.setJsonPath("helmet/json/detection_config.json")
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image="t.jpg", output_image_path="tr.jpg")
for detection in detections:
print(detection["name"], " : ", detection["percentage_probability"], " : ", detection["box_points"])
Листинг 4. Тестирование модели
После его выполнения, программа выведет координаты, найденных объектов, а также нарисует их границы.
Фото 2. До обнаружения
Фото 3. После обнаружения
ЗАКЛЮЧЕНИЕ
Данное решение может стать частью большого проекта по внедрению цифровых решений в области промышленной безопасности и охраны труда на предприятиях компании «ФосАгро», а также использовано как основа для решения подобных задач в других направлениях производственной деятельности.