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

Сегментация изображений:

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

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

Особая техника, используемая в сегментации изображений, делает ее применимой для решения критических проблем компьютерного зрения. Это проблемы, которые требуют подробной информации об объектах, присутствующих в изображении, деталей, которые невозможно предоставить путем классификации всего изображения или предоставления ограничивающих рамок для объектов, присутствующих в изображении. Некоторые из основных вкладов сегментации изображений включают:

-Эффективная система обзора для беспилотных автомобилей для эффективного понимания дорожной обстановки.

-Сегментация медицинских изображений обеспечивает сегментацию частей тела для выполнения диагностических тестов.

  • Анализ спутниковых снимков.

Существует два основных типа сегментации изображений:

Семантическая сегментация: объекты, классифицированные с одинаковыми значениями пикселей, сегментируются с одинаковыми цветовыми картами.

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

PixelLib: - это библиотека, созданная для простой реализации сегментации изображений в реальных задачах. PixelLib - это гибкая библиотека, которую можно интегрировать в программные решения, требующие применения сегментации изображений.

Семантическая сегментация и сегментация экземпляра возможны с использованием пяти строк кода.

Установите PixelLib и его зависимости:

Установите последнюю версию tensorflow (tensorflow 2.0) с помощью:

  • pip3 установить тензорный поток

Установите opencv-python с помощью:

  • pip3 установить opencv-python

Установите scikit-образ с помощью:

  • pip3 install scikit-image

Установите подушку с помощью:

  • pip3 install Pillow

Установите Pixellib:

  • pip3 установить pixellib

Реализация семантической сегментации с PixelLib:

Код для реализации семантической сегментации с помощью модели deeplabv3 + обучен на наборе данных pascal voice.

Мы будем наблюдать за каждой строчкой кода:

import pixellib
from pixellib.semantic import semantic_segmentation 
segment_image = semantic_segmentation()

Класс для выполнения семантической сегментации импортируется из pixelLib, и мы создали экземпляр этого класса.

segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)

В приведенном выше коде мы загрузили модель xception, обученную на паскальском вокале, для сегментации объектов. Модель можно скачать здесь.

segment_image.segmentAsPascalvoc(“path_to_image”, output_image_name = “path_to_output_image)

Мы загрузили функцию для сегментации изображения. Функция принимает два параметра…

  • path_to_image: - это путь к изображению, которое нужно сегментировать.
  • output_image_name: - это путь для сохранения сегментированного изображения. Он будет сохранен в вашем текущем рабочем каталоге.

sample1.jpg

Сохраненное изображение после сегментации, объекты изображения сегментируются. При желании вы можете применить к изображению наложение сегментации.

segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name = "image_new.jpg", overlay = True)

Мы добавили дополнительный параметр overlay и установили для него значение true, и мы получили изображение с наложением сегментации на объекты.

Эта модель xception обучена на наборе данных pascal voice, наборе данных с 20 категориями объектов.

Объекты и соответствующие им карты цветов

Специализированное использование PixelLib может потребовать от вас возврата массива результатов сегментации:

Получите массив результатов сегментации с помощью этого кода

output, segmap = segment_image.segmentAsPascalvoc()

Вы можете протестировать код для получения массивов и распечатать форму вывода, изменив код семантической сегментации ниже.

Получите как выходные данные, так и массивы наложения сегментации с помощью этого кода,

segmap, segoverlay = segment_image.segmentAsPascalvoc(overlay = True)

СЕГМЕНТАЦИЯ ЭКЗАМЕНА С PIXELLIB:

Сегментация экземпляров с помощью PixelLib основана на структуре Mask R-CNN.

Код для реализации сегментации экземпляра:

Наблюдайте за каждой строчкой кода

import pixellib
from pixellib.instance import instance_segmentation
segment_image = instance_segmentation()

Класс для выполнения сегментации экземпляра импортирован, и мы создали экземпляр класса.

segment_image.load_model("mask_rcnn_coco.h5")

Это код для загрузки модели маски r-cnn для выполнения сегментации экземпляра. Скачайте модель маски r-cnn отсюда.

segment_image.segmentImage("path_to_image", output_image_name = "output_image_path")

Это код для выполнения сегментации экземпляра изображения, он принимает два параметра:

  • path_to_image: Путь к изображению, который должна спрогнозировать модель.
  • output_image_name: Путь для сохранения результата сегментации. Он будет сохранен в вашем текущем рабочем каталоге.

sample2.jpg

Это сохраненное изображение в вашем текущем рабочем каталоге.

Вы можете реализовать сегментацию с помощью ограничивающих рамок. Этого можно добиться, изменив код.

segment_image.segmentImage("path_to_image", output_image_name = "output_image_path", show_bboxes = True)

Мы добавили дополнительный параметр show_bboxes и установили для него значение true, маски сегментации создаются с ограничивающими рамками.

Модель Mask R_CNN обучается на наборе данных Microsoft Coco, наборе данных с 80 общими категориями объектов. Модель может выполнять сегментацию экземпляров для этих категорий объектов.

Список категорий объектов, представленных в наборе данных Coco:

[BG, человек, велосипед, автомобиль, мотоцикл, самолет, автобус, поезд, грузовик, лодка, светофор, пожарный гидрант , «знак остановки», «паркомат», «скамейка», «птица», «кошка», «собака», «лошадь», «овца», «корова», «слон», «медведь», «зебра» , «жираф», «рюкзак», «зонт», «сумочка», «галстук», «чемодан», «фрисби», «лыжи», «сноуборд», «спортивный мяч», «воздушный змей», «бейсбольная бита» , «бейсбольная перчатка», «скейтборд», «доска для серфинга», «теннисная ракетка», «бутылка», «бокал для вина», «чашка», «вилка», «нож», «ложка», «чаша», «банан». ',' яблоко ',' бутерброд ',' апельсин ',' брокколи ',' морковь ',' хот-дог ',' пицца ',' пончик ',' пирог ',' стул ',' диван ',' растение в горшке , кровать, обеденный стол, туалет, телевизор, ноутбук, мышь, пульт, клавиатура, сотовый телефон, микроволновая печь, духовка, тостер. ',' раковина ',' холодильник ',' книга ',' часы ',' ваза ',' ножницы ',' плюшевый мишка ',' фен ',' зубная щетка ']

Специализированное использование PixelLib для сегментации экземпляров.

Получите следующие массивы:

-Массивы обнаруженных объектов

-Objects 'соответствующие массивы class_ids'

-Массивы масок сегментации

-Массив вывода

Используя этот код

segmask, output = segment_image.segmentImage()

Вы можете протестировать код для получения массивов и распечатать форму вывода, изменив код сегментации экземпляра ниже.

Получите массивы сегментации с ограничивающими рамками, включив параметр show_bboxes.

segmask, output = segment_image.segmentImage(show_bboxes = True)

Установите PixelLib и протестируйте его с любым желаемым количеством изображений.

Посетите официальный репозиторий PixelLib на github.

Посетите официальную документацию PixelLib

Свяжитесь со мной через:

Электронная почта: [email protected]

Twitter: @AyoolaOlafenwa

Facebook: Айула Олафенва

Linkedin: Айула Олафенва