В статье затронуты основные принципы компьютерного зрения и глубокого машинного обучения. На основе библиотек с открытым исходным кодом разработана программа, использующая нейросеть и позволяющая осуществлять фильтрацию по параметрам.
Ключевые слова: CNN, нейронная сеть, открытый исходный код, компьютерное зрение, машинное обучение
Современную жизнь обычного человека двадцать первого столетия невозможно представить без технологичного электронного девайса в руке. Мировое сообщество из года в год стремится внедрить в свою жизнь как можно больше цифровых технологий, тем самым предпринимая попытки упростить свою жизнь, привнести в нее комфорт и удобство. И если десять лет назад главной проблемой было создать некую технологию, то сейчас главная цель — автоматизация. И одно из главных направлений автоматизации — распознавание компьютером изображений.
В работе над своим проектом я применял машинное обучение и компьютерное зрение. Для анализа использовались изображения и видео с разнообразных камер наблюдения, а также специально отснятый материал.
Способность анализировать данные и запоминать — главный принцип машинного обучения.
Машинное обучение (англ. machine learning, ML) — класс методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение в процессе применения решений множества сходных задач.
Рис. 1. Схема машинного обучения
Нейронная сеть (также искусственная нейронная сеть, ИНС) — математическая модель, построенная по принципу организации и функционирования биологических нейронных сетей — сетей нервных клеток живого организма.
Первый слой нейронной сети принимает все пиксели в изображении. После этого запускаются и применяются разнообразные фильтры, которые формируют модель для понимания различных частей изображения.
Значение глубины для цифрового изображения задается количеством цветовых каналов. Черно-белые изображения имеют всего 1 канал. Цветные — 3. Таким образом, конечные параметры фильтра CNN 3х3х3. Для каждого пикселя сеть умножает значения фильтра на значения самих пикселей, чтобы получить числовое представление конкретного пикселя. Таким же методом анализируется все изображение.
Итогом этой операции является детальная карта признаков.
Объединяющий слой CNN отбирает релевантные для анализа признаки, в зависимости от параметра поиска. Поскольку сеть должна принимать решения относительно наиболее важных частей изображения, предполагается, что она изучит только те части изображения, которые действительно представляют суть рассматриваемого объекта.
Для объединения параметров используют метод максимального объединения. Он подразумевает взятие максимального значения пикселей в пределах одного фильтра. Это отсекает ¾ объема информации в случае, если используется фильтр 2х2.
Максимальные значения пикселей задействуют для того, чтобы учесть возможные искажения изображения, а размер изображения уменьшен, чтобы не допустить переобучение
Ядро YOLOv3, используемое в разработанной мной программе обучено на CIFAR-10. Это большой набор данных, содержащий более 60000 изображений, представляющих 10 различных классов объектов. Изображения являются полноцветными RGB, но они очень малы, всего 32x32. CIFAR-10 поставляется в комплекте с библиотекой Keras.
Я провел тщательный анализ двух ядер-кандидатов с открытым исходным кодом с целью выбрать наилучший вариант.
Характеристика/Название |
Ядро YOLOv3 |
Ядро ResNet 50 v .2. 0 .1 |
Быстродействие |
Среднее |
Низкое |
Точность |
Среднее |
Высокое |
Конфликтность |
Низкое |
Высокое |
Нагрузка на систему |
Среднее |
Среднее |
Объем ядра на диске |
Низкое |
Низкое |
Программа написана на языке Python с использованием библиотек TensorFlow 2.4.0 и OpenCV-Python Keras 0.2.0. Программа построена на ядре нейронной сети YOLOv3. Версия Python-3.8.6 (64/32bit). Размер программы — 35 МБ (с библиотеками — 2 GB).
TensorFlow — это библиотека с открытым исходным кодом, созданная для Python командой Google Brain.
Ниже представлен исходный код моей программы TryVision 3.2.1 beta Build 2 . Эта программа анализирует видеопоток.
import os
os.environ [«CUDA_DEVICE_ORDER»] = «PCI_BUS_ID»
os.environ [«CUDA_VISIBLE_DEVICES»] = ""
Рис. 2 Подключение операционной системы и центрального процессора как устройства видеообработки (из-за отсутствия GPU в моем ПК)
print(«TryVision 3.2.1 beta Build 2")
from imageai.Detection import VideoObjectDetection
execution_path = os.getcwd()
detector = VideoObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath(os.path.join(execution_path, «yolo.h5"))
detector.loadModel()
Рис. 3 Импорт методов из библиотек для запуска ядра нейросети, создание рабочих классов, подключение ядра нейросети YOLOv3
video_path = detector.detectObjectsFromVideo(input_file_path=os.path.join(execution_path, «test0.mp4"),
output_file_path=os.path.join(execution_path, «test0_detected»)
, frames_per_second=20, log_progress=True)
print(video_path)
print(«Successfully!")
Рис. 4 Обращение к исходному файлу, инициирование его обработки и создание нового файла. Вывод в консоль прогресса (количество обработанных кадров)
Таким образом, данная программа анализирует видео покадрово для более точного распознавания модели.
В дальнейшем планируется продолжить работу над программой, чтобы расширить сферы её применения, а также повысить точность определения и создать новую версию, способную анализировать объекты в реальном времени.
Литература:
- Вьюгин В. «Математические основы машинного обучения и прогнозирования», М.: [2013] — 390 с. ISBN: 978–5-4439–2014–6, Издательство «МЦНМО».
- Бастиан Ш. «Крупномасштабное машинное обучение вместе с Python», М.: [2017] — 360 с. ISBN: 978–5-97060–506–6, Издательство «ДМК Пресс»
- Джулли А, Пал C. «Библиотека Keras — инструмент глубокого обучения», М.: [2018] — 296 с. ISBN: 978–5-97060–573–8, Издательство «ДМК Пресс»
- StackOverflow.com // всемирный форум разработчиков и программистов https://stackoverflow.com/