Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Компьютерное зрение. Практикум

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
С помощью объекта Compose вы можете перечислить список действий
который вы хотите применить к изображениям в вашем наборе данных
transform = albu.Compose([ albu.RandomRotate90(), albu.Transpose(), albu.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.50, rotate_limit=45, p=.75), albu.Blur(blur_limit=3), albu.OpticalDistortion(), albu.GridDistortion(), ])
Рисунок 1.12 – Результат работы Compose
Также применяется компонент OneOF который определяет что необходимо
применить одну из аугментаций. Компонент имеет параметр p обозначающий
вероятность того что будет применена одна из операций перечисленных в списке
21
transform = albu.Compose([ albu.RandomRotate90(), albu.Flip(), albu.Transpose(), albu.GaussNoise(), albu.OneOf([ albu.MotionBlur(p=.2), albu.MedianBlur(blur_limit=3, p=0.1), albu.Blur(blur_limit=3, p=0.1), ], p=0.2), albu.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2), albu.OneOf([ albu.OpticalDistortion(p=0.3), albu.GridDistortion(p=.1), ], p=0.2), albu.OneOf([ albu.CLAHE(clip_limit=2), albu.RandomBrightnessContrast(), ], p=0.3), albu.HueSaturationValue(p=0.3), ]) random.seed(42) augmented_image = transform(image=image_tower)['image'] visualize(augmented_image)
22
Рисунок 1.13 – Пример вероятностной аугментации
Возможно, работа с аугментациями через словарь может показаться не совсем
интуитивной, но на самом деле такой подход позволяет более гибко работать с
данными
Предположим, что теперь мы хотим обучить модель, которая будет решать
задачу детекции. Задача детекции заключается в определении местоположения и
классификации объектов на изображении. Основная цель найти на фото
интересующие нас объекты и выделить их с помощью прямоугольной рамки.
Пример детекции представлен на рисунке 1.14.
23
Рисунок 1.14 – Пример разметки для детекции объектов на изображении
Пусть вам необходимо выполнить предобработку и аугментацию такого
набора данных. То есть манипуляции, которые вы применили для изображений
(обрезка, сжатие, отражение по одной из осей) должны быть точно также
применены и к прямоугольным рамкам. С помощью словаря вы можете передавать
как данные с изображениями, так и данные с разметкой.
Предположим у нас имеется изображение и разметка к нему
!wget https://media.kasperskycontenthub.com/wp-
content/uploads/sites/67/2023/04/21114400/11325630_original.jpg
#скачаем изображение из интернета
importcv2 image = cv2.imread('/content/11325630_original.jpg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) #Изменяем порядок
каналов
24
''' bboxes – это координаты наших рамок (x1,y1,x2,y2).
x1,y1 координаты в верхней левой точки прямоугольника x2,y2 координаты правой нижней точки прямоугольника
'''
bboxes = [[696, 524, 1065, 611],
[264, 256, 338, 318], [366, 227, 450, 335], [207, 255, 553, 359], [923, 482, 994, 585], [802, 507, 863, 587], [207, 288, 550, 359],
#к каждому прямоугольнику сопоставлен класс объекта к которому он
относится
my_labels = ['boat', 'person', 'person', 'boat', 'person', 'person', 'boat', 'person']
Функция для визуализации
import cv2 def draw_bboxes(image,bboxes,labels,color=(0, 255, 0), thickness=2): for i in range(len(bboxes)): left,top,right,bottom = bboxes[i]
[802, 475, 859, 542]]
left = int(left) top = int(top) right = int(right) bottom = int(bottom)
25
cv2.putText(image,labels[i],(left,top-20),cv2.FONT_HERSHEY_SIMPLEX, 1,
(255, 255, 255), thickness, cv2.LINE_AA)
cv2.rectangle(image, (left, top), (right, bottom), color, thickness)
Посмотрим исходное изображение
img_bbox = cv2.imread('/content/11325630_original.jpg') img_bbox = cv2.cvtColor(img_bbox, cv2.COLOR_BGR2RGB) #Изменяем
порядок каналов
draw_bboxes(img_bbox, bboxes, my_labels) visualize(img_bbox)
Рисунок 1.15 – Пример детекции объектов на изображении
Отразим наше изображение по горизонтали. Для того чтобы наши
аугментации применялись на прямоугольники необходимо добавить параметр
box_params. Параметр format определяет каким образом представлены координаты
прямоугольников. "pascal_voc" - это значит что координаты прямоугольника будут
26
заданы через две точки (т.е как в представленном примере). Если же указать "coco" -
то это будет означать, что координаты будут иметь формат (x,y,w,h) где x,y это
координаты левой верхней точки прямоугольника, w,h - ширина и высота прямоугольника
transform = albu.Compose([ albu.HorizontalFlip(p=1) ],bbox_params=albu.BboxParams(format='pascal_voc',label_fields=['xlabels'])) augmented_dict = transform(image=image, bboxes=bboxes, xlabels=my_labels)
Координаты отраженных прямоугольников хранятся вaugmented_dict['bboxes']
aug_img = augmented_dict['image'] draw_bboxes(aug_img, augmented_dict['bboxes'], augmented_dict['xlabels']) visualize(aug_img)
Рисунок 1.16 – Аугментация в задаче детекции объектов на изображении
27
Задание
Для рисунка 1.15 с помощью библиотеки Albumentations выполните
следующие трансформации
Поворот изображения на 30 градусов Отражения по горизонтали и вертикали Сдвиг изображения Яркостные преобразования (изменение контраста, насыщенности, значений
пикселей)
Размытие по Гауссу Добавление шума Обрезка изображения (Продемонстрируйте использование
RandomCrop,RandomSizedBBoxSafeCrop, CenterCrop)
Выполните каждую трансформацию в отдельности и отобразите результат
вместе c разметкой.
28
2 Сверточные нейронные сети
Сверточная нейронная сеть (convolutional neural network, CNN) – основной
инструмент для классификации и распознавания объектов, лиц на фотографиях,
распознавания речи. Мы будем говорить в первую очередь о CNN для работы с изображениями, но свертка – универсальная операция. Ее можно применить для
любого сигнала, будь то данные с датчиков, аудиосигнал или картинка. Сверточные
сети базируются на достаточно сложном математическом аппарате, но мы не станем
углубляться в сложные математические рассуждения, а рассмотрим использование
этого вида нейронных сетей на распространенном примере. Предположим, что у нас
стоит задача: выделить на картинке какой-то объект – например, автомобиль. Человек легко понимает, что перед ним автомобиль, и распознает его по тысяче
мелких признаков. А сможет ли компьютер понять, что именно этот набор точек на
картинке является автомобилем? Ответ простой – да, сможет, если его этому
научить, и сеть CNN справится с этой задачей значительно быстрее и эффективнее,
чем любая другая.
Сверточная нейронная сеть за счет применения специальной операции,
называемой сверткой, позволяет уменьшить количество обрабатываемой
информации, вследствие чего лучше справляется с картинками высокого
разрешения, а также способна выделить опорные признаки изображения, такие как
ребра, контуры или грани. На следующем уровне обработки из этих ребер и граней
можно распознать повторяющиеся фрагменты текстур, которые дальше могут
сложиться во фрагменты изображения. По сути, каждый слой нейронной сети
использует собственное преобразование. Если на первых слоях сеть оперирует
такими понятиями, как ребра, грани и т. п., то дальше используются понятия
«текстура», «части объектов». В результате такой проработки мы можем правильно
классифицировать картинку или выделить на конечном шаге искомый объект на
изображении.
Первой и, по сути, самой тривиальной задачей, которую научились решать с
помощью сверточных нейронных сетей, стала классификация изображений. Но с их
29
помощью можно классифицировать и любые другие сигналы. Классификация с
помощью CNN активно применяется в медицине: можно обучить нейронную сеть
классификации болезней или симптомов – например, по анализу магнитно-
резонансных снимков. В сельском хозяйстве разрабатывается и внедряется методика
анализа и распознавания изображений, при которой данные получают от спутников
и используют для прогнозирования будущей урожайности конкретных земельных
участков. Распознавание объектов на фото и видео с помощью нейронных сетей
применяется в беспилотном транспорте, видеонаблюдении, системах контроля
доступа, системах «умного дома» и т. п. Один из примеров изображения,
обработанного сверточной нейронной сетью, представлен на рисунке 2.1.
Рисунок 2.1 – Пример работы сверточной нейронной сети YOLO. Модель
предсказывает различные категории движущихся транспортных средств, обводя их
ограничивающей рамкой (boundingbox), отмечая категорию и показатель
вероятности (от 0 до 1).
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]