Советы по глубокому обучению: распознавание объектов в 10 строк

Редакция Библиотеки программиста подготовила советы по глубокому обучению на примере компьютерного зрения и распознавания объектов.

Введение

советы по глубокому обучению

Компьютерное зрение – это наука о компьютерах и программных системах, которые могут распознавать и понимать изображения. Оно является одной из важных областей искусственного интеллекта и состоит из различных аспектов, таких как распознавание изображения, обнаружение предмета, классификация / генерация изображения и т. д. Обнаружение объектов, вероятно, является наиболее важным аспектом компьютерного зрения.

Обнаружение предмета широко применяется в таких областях:

  • распознавание лиц;
  • обнаружение автомобилей;
  • подсчет пешеходов;
  • системы безопасности;
  • беспилотные авто и т. д.

Существует масса способов обнаружения объектов, которые могут быть использованы в различных областях. Как и любая другая компьютерная технология, широкий спектр творческого применения зависит от разработчиков программного обеспечения.

Прорыв в 2012 году позволил создать такие мощные методы, как R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet, быстрые и очень точные SSD и YOLO. Использование этих методов и алгоритмов, основанных на глубоком обучении, требует серьезных знаний в математике и понимание фреймворков глубокого обучения.

Начнем

Рассматривать советы по глубокому обучению мы начнем с компьютерного зрения и Python-библиотеки ImageAI, позволяющей легко интегрировать современные технологии компьютерного зрения в свои существующие и новые приложения.

Установка Python

Необходимо установить Python 3 с официального сайта.

Установка зависимостей

Следующий шаг – установка зависимостей через pip:

  • Tensorflow: pip install tensorflow
  • Numpy: pip install numpy
  • SciPy: pip install scipy
  • OpenCV: pip install opencv-python
  • Pillow: pip install pillow
  • Matplotlib: pip install matplotlib
  • H5py: pip install h5py
  • Keras: pip install keras
  • ImageAI: pip install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl

Retina Net

Загрузите файл модели Retina Net, который будет использоваться для обнаружения объектов.

После установки зависимостей мы продолжаем разбирать советы по глубокому обучению и приступаем к написанию первого кода для обнаружения объектов. Создайте файл FirstDetection.py, а затем впишите в него приведенный ниже код. Скопируйте файл новой модели Retina и изображение, которое требуется обработать, в папку, содержащую файл Python.

Тестирование

from imageai.Detection import ObjectDetection
import os

execution_path = os.getcwd()

detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , 
         "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

for eachObject in detections:
    print(eachObject["name"] + " : " + eachObject["percentage_probability"] )

Запустите код и подождите результатов в консоли. После этого перейдите в папку, в которой расположен FirstDetection.py – там вы найдете новое изображение. Давайте посмотрим на оба изображения:

До распознавания-1

До распознавания-2

После распознавания-1

Результаты, обнаружения для картинки:

person : 55.8402955532074
person : 53.21805477142334
person : 69.25139427185059
person : 76.41745209693909
bicycle : 80.30363917350769
person : 83.58567953109741
person : 89.06581997871399
truck : 63.10953497886658
person : 69.82483863830566
person : 77.11606621742249
bus : 98.00949096679688
truck : 84.02870297431946
car : 71.98476791381836

После распознавания-2

Результаты, обнаружения для картинки:

person : 71.10445499420166
person : 59.28672552108765
person : 59.61582064628601
person : 75.86382627487183
motorcycle : 60.1050078868866
bus : 99.39600229263306
car : 74.05484318733215
person : 67.31776595115662
person : 63.53200078010559
person : 78.2265305519104
person : 62.880998849868774
person : 72.93365597724915
person : 60.01397967338562
person : 81.05944991111755
motorcycle : 50.591760873794556
motorcycle : 58.719027042388916
person : 71.69321775436401
bicycle : 91.86570048332214
motorcycle : 85.38855314254761

Теперь разберемся, как работает этот код.

from imageai.Detection import ObjectDetection
import os

execution_path = os.getcwd()
  • 1я строка: импорт ImageAI и класса обнаружения объектов;
  • 2я строка: импорт класса Python os;
  • 3я строка: определение переменной, содержащей путь к папке с нашим Python-файлом, RetinaNet файл, модели и образы.
detector = ObjectDetection()
detector.setModelTypeAsRetinaNet()
detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))
detector.loadModel()
detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , 
              "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))
  • 1я строка: объявили класс обнаружения объектов;
  • 2я строка: установили тип модели в RetinaNet;
  • 3я строка: установили путь к модели RetinaNet;
  • 4я строка: загружаем модель в класс обнаружения объектов;
  • 5я строка: вызываем функцию обнаружения, а также парсим путь входного и выходного изображений.
for eachObject in detections:
    print(eachObject["name"] + " : " + eachObject["percentage_probability"] )
  • 1я строка: переберем все результаты, возвращенные методом detectObjectsFromImage;
  • 2я строка: выводим название и процентную вероятность на каждом объекте, обнаруженном на изображении.

ImageAI поддерживает массу настроек процесса обнаружения объектов. Одной из них является возможность извлечения каждого объекта, обнаруженного на изображении. Класс обнаружения объектов создаст папку image, извлечет, сохранит и вернет массив, содержащий путь к каждому из изображений.

detections, extracted_images = detector.detectObjectsFromImage
      (input_image=os.path.join(execution_path , "image.jpg"), 
       output_image_path=os.path.join(execution_path , "imagenew.jpg"), 
       extract_detected_objects=True)
Советы по глубокому обучению завершает список возможностей ImageAI, т. к. кроме элементарного обнаружения он умеет еще кое-что:
  • Регулировка минимальной вероятности: по умолчанию объекты, обнаруженные с вероятностью менее 50, не будут отображаться, и такие события не попадут в лог. Это значение можно увеличить или уменьшить для различных случаев.
  • Пользовательские настройки обнаружения: используя класс CustomObject, вы можете попросить сообщать об обнаружениях одного или нескольких уникальных объектов.
  • Скорость обнаружения: вы можете уменьшить время, необходимое для обнаружения изображения, установив скорость обнаружения “fast”, “faster” и “fastest”.
  • Входящие типы: вы можете указать в пути к файлу изображения Numpy массив или файловый поток в качестве входного изображения.
  • Выходные типы: можно указать, что функция detectObjectsFromImage должна возвращать изображение в виде файла или массива Numpy.

Оригинал

Другие материалы по теме:

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ