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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
обучения нейросети по следующим причинам:
– все изображение размечено полупрозрачными цветами, которые
определяются нейросетью как огромное количество разных классов (по общему
количеству оттенков);
– в нижней части изображения содержится автоматически генерируемая
микроскопом техническая информация (дата, режим увеличения, линейка и т.п.).
Подобные включения недопустимы, они создают аномалии, значительно
увеличивающие ошибки нейросети;
– не вся площадь заполнена тем или иным цветом из цветовой схемы: есть
белые ручьистые узоры, а также выбивающиеся из схемы синие и бордовые пятна.
Таким образом, подобное изображение не годится для обучения нейросети,
однако, при должной редактуре, его можно привести в соответствующий вид. Для
этого достаточно программными средствами обрезать фотографию снизу, удалив
техническую информацию, после чего любым редактором изображений с хорошим
функционалом настроить цветовую схему, подогнав цвета под указанный выше
формат. Самое сложное заключается в заполнении всей площади цветовой схемой,
так как для этого нужно участие специалиста в области количественной
металлографии и фрактографии, который укажет, к какому именно классу относятся
незаполненные площади изображения.
Рисунок 1.4 – Размеченное фрактографическое изображение, нуждающееся в
дополнительной обработке
Попытка использовать подобные представленному на рисунке 1.4
11
необработанные размеченные данные не приводят к положительному результату.
На рисунке 1.5 показан скриншот с ошибкой при загрузке набора данных в
AutoML-приложение Liner.io.
Рисунок 1.5 – Сообщение об ошибке наличия более 150 классов по цветам
Кроме того, основные возможные проблемы, негативно влияющие на
формирование датасета фрактографических изображений, могут включать:
– недостаточное общее количество изображений. Здесь необходимо понимать,
сколько пар размеченных и неразмеченных фотографий достаточно для выбранной
архитектуры нейросети, чтобы достичь приемлемого уровня качества ее обучения. В
нашем случае достаточно нескольких сотен пар изображений;
– повторяющиеся изображения с разными файловыми именами. Одинаковые
фотографии способны быстро приводить к переобучению нейросети, что является
крайне нежелательным фактором. При этом вручную проверить отсутствие
повторяющегося файла достаточно трудоемкая задача;
– пропуски данных в парах: наличие только размеченного, или только
неразмеченного изображения. Отсутствие одного изображение из пары обнуляет
ценность наличия второго;
– испорченное изображение. Подобную проблему так же трудно выявить,
необходимо либо проверять каждый файл вручную, либо найти решение
автоматизировать процесс проверки, например, с использованием алгоритмов
компьютерного зрения. При этом проблема достаточно серьезная, способная
ухудшить качество обучения нейросети.
12
Если рассматривать пример из проектатранспортного анализа на рисунке 1.6,
геометрии
то очевидными проблемами выступают следующие:
– искажение геометрии транспортных средств. Так как на обычных камерах со
стандартными настройками все объекты будут отображаться с нормальными
пропорциями всех частей, обученная на искаженных картинах нейросетевая модель
будет давать большее количество неточных результатов.
– неразборчивое отображение ввиду малого масштаба, либо избыточного
затемнения приводит к невозможности выделения отличительных признаков
объектов, что так же повышает вероятность последующих ошибок в их детекции.
а) искажение перспективы,
масштаб
б) избыточно малый
Рисунок 1.6 – Размеченное изображение транспортных средств, нуждающееся
в дополнительной обработке, либо негодное для дальнейшего использования
Рисунок 1.7 – Визуальное отображение датасета фрактографических
изображений с указанием недостающего элемента
Благодаря визуализации, приведенной на рисунке 1.7, становится очевидным,
13
что не хватает одного размеченного изображения.
Рекомендации по корректировке и созданию качественного датасета
фрактографических изображений. Разумеется, оптимальным вариантом является
договоренность со специалистами в области количественной металлографии и
фрактографии о точном формате размеченных изображений, которые необходимо
поставлять с «сырыми» фотографиями. Это позволит значительно сэкономить время
на предобработке. Так, отдельно нужно отметить, что для максимального удобства
при работе с исходным кодом, доработанная цветовая схема соответствует
аддитивной цветовой модели, когда основными являются цвета RGB (Red, Green,
Blue – Красный, Зеленый и Синий соответственно). Для избавления от технической
информации было решено удалить по 200 пикселей всех фотографий снизу, что
привело к снижению их разрешения с 1280х960 до 1280х760.
Ранее, на рисунке 1.7 мы наглядно проиллюстрировали проблему нехватки
одного размеченного изображения. При внимательном анализе имеющегося
датасета обнаруживается недостача файла «20130731.002224», что подтверждается
как отсутствием аналогичного номера с пометкой «размеч» или «расчерч», так и
недостающим визуальным аналогом с цветовой схемой. Кроме того, статистика
директории указывает на общее количество файлов равной 39. Для небольшой
выборки подобные недостачи можно выявить вручную, однако, если количество
данных будет достаточно большим, необходимо продумать автоматический
контроль поступающих изображений.
После всех преобразований мы получаем следующий корректный набор
данных, пригодный для обучения нейросети выбранной архитектуры U-Net,
показывающий даже на малой выборке из 30 пар изображений приемлемое качество
анализа фрактографических фотографий, составляющее около 80% на
валидационной выборке. Для компенсации столь малой выборки используется
метод аугментации или создание синтетических изображений посредством
различных трансформаций уже имеющихся фотографий: поворот на определенный
угол, отзеркаливание, смещение на несколько пикселей дают возможность из одной
пары изображений создать сразу несколько дополнительных вариантов, пригодных
14
для обучения нейросети.
Результаты использования корректно предобработанного датасета. В нашем
примере с фрактографическим анализом в обучающую выборку из 30 пар
изображений датасета было выделено 25, оставшиеся 5 пар были выделены в
качестве тестовой части. Далее обучающая выборка участвовала в обучении модели.
Импортирование выборки прошло успешно. Программа нашла в размеченных
изображениях три класса и предложила дать им имена.
В примере с анализом транспортного потока мы сразу ввели 18 необходимых
категорий транспортных средств (легковые автомобили, автобусы, грузовые
автомобили с разбиением по количеству осей, микроавтобусы, спецтехника,
мотоциклы, велосипеды и электросамокаты), после чего на каждом новом снимке
просто обводили вручную каждый из имеющихся видов транспорта с присвоением
соответствующей категории.
При обработке изображения нужно применять соответствующие алгоритмы и
методы для достижения желаемого результата, а также проверять достоверность и
точность полученных данных.
Достаточность данных в датасете. Весьма важным является вопрос о
необходимом минимальном количестве изображений для последующей разметки и
применении в качестве обучающей выборки, на которой и будет обучаться
нейросетевая модель информационной системы анализа. Как правило, в
публикациях фигурируют различные оценки по данному показателю, например,
минимальное значение количества необходимых изображений металлических
образцов при их использовании для обучения нейросетевой модели с архитектурой
U-Net колеблется в пределах 121-284.
Пример статистики достаточного датасета представлен на рисунке 1.8, где при
обучении модели с архитектурой YOLO в задачах детекции и отслеживания
транспортных средств было использовано около 5,5 тыс. изображений, в каждом из
которых содержится от одного размеченного объекта до нескольких десятков в 18
различных категориях. Минимальное значение на одну категорию – 314.
15
Рисунок 1.8 – Статистика датасета изображений транспортных средств для
обучения нейросетевой модели с архитектурой YOLO.
1.1 Лабораторная работа № 1 Предобработка изображений и аугментации
Вполне возможно вы столкнетесь с такой ситуацией, что вы будете
самостоятельно собирать свой набор данных или работать с данными, которые вам
предоставит кто-то из знакомых. Как показывает практика сбор данных для
обучения нейросети может быть очень трудоемкой задачей. Первая проблема
заключается в том, что большинство людей не очень хотят собирать и размечать
большое количество изображений (а для качественного обучения нейронной сети
необходимо тысячи изображений). Первую проблему можно решить с помощью
аугментаций. Аугментация данных – это процесс искусственного генерирования
новых данных на основе существующих. Предположим мы обучаем нейросеть
отличать автомобиль от мотоцикла. Отразив изображение мотоцикла по
горизонтали, мы практически ничего не изменили с точки зрения "смысла"
изображения, но с точки зрения представления данных мы получили совершенно
16
новое изображение. А вторая проблема может заключаться в том, что данные могут
быть некачественными, изображения могут быть различного формата, различного размера, яркости и контрастности.
Изображения, как правило, представляют собой набор пикселей, где каждый
пиксель – это вектор состоящих из трех целочисленных значений, отвечающих за
интенсивность красного, синего и зеленого цвета. Значения интенсивности
изменяются от 0 до 255, где 0 означает, что интенсивность цвета минимальна, а 255
насыщенность цвета максимальна. На рисунке 1.9 вы можете видеть разложение фотографии по каналам.
Рисунок 1.9 – Разложение фотографии по красному, синему и зеленому каналу
Чем насыщеннее выражен цвет канала, тем он светлее на рисунке 1.9. Так, где
синий канал наиболее светлой является область неба. Где зеленый канал, светлой
частью является зеленая крыша башни. На красном канале, цвет самой башни
светлее по сравнению с остальными каналами.
17
Для обработки изображений будем использовать библиотеки OpenCV и
Albumentations.
import torch import torchvision import albumentations as albu importcv2 #OpenCV importrandom
Ввиду исторических причин OpenCV открывает изображения не в формате
RGB а в формате BGR. То есть порядок следования каналов изменен. В других
библиотеках в такой как matplotlib порядок следования каналов RGB. Поэтому при
чтении изображения с помощью OpenCV необходимо поменять порядок каналов.
Здесь vis_2_img вспомогательная функция для визуализации изображений.
image = cv2.imread('/content/bashnya-s-chasami.jpg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image2 = cv2.imread('/content/bashnya-s-chasami.jpg')
vis_2_img(image,image2, title1="Порядок каналов изменен", title2="Порядок
каналов не изменен")
Результат замены порядка каналов мы видим на рисунке 1.10.
18
Рисунок 1.10 – Замена порядка каналов
Предобработка и аугментации. Применяя аугментации мы хотим добиться
наибольшего разнообразия в наших данных. Чем больше будет разнообразие, тем
более вероятно, что модель научиться решать поставленную перед ней задачу, а не
достигнет переобучения. С другой стороны, с аугментациями надо быть
осторожным и исходить из поставленной задачи. Например, если вы хотите обучить
модель распознавать лицо на фотографии, нет смысла переворачивать изображение
на 180 градусов, так как это только может замедлить сходимость процесса обучения модели.
Albumentations позволяет упростить процесс создания аугментаций для
изображений. Так, например мы можем создать объект который будет описывать
один из этапов аугементации или предобработки. Код ниже служит для тогочтобы
вырезать из изображения случайную часть изображения размером от 128x128 до
256x256 пикселей, а затем изменить размер вырезанной части до 224x224 пикселей.
Параметр “p” указывает с какой вероятностью будет применяться этот этап.
Параметр “p” нужен для того чтобы установить для какой доли изображений
следует применять аугментацию. Это сделано для экономии ресурсов. Аугментация
всей обучающей выборки может потребовать большое количество памяти, но не
может гарантировать значительное улучшение результата обучения.
19
importalbumentationsasalbu
random.seed(7) #фиксируем значение генератора случайных чисел. Служит для
воспроизводимости результата
aug = albu.RandomSizedCrop(min_max_height=(128,256), height=224, width=224,
p=0.5)
Когда вы создали объект aug для описания этапа аугментации вы должны
передать ваш набор изображений в конструктор aug. Также вы должны определить
имя параметра для данных, которые вы передаете в aug (здесь это имя image). После
того как будут выполнены аугментации вы получите словарь в котором будут
находиться ваши изображения с примененными аугментациями. Получить к ним
доступ вы можете по ключу, ключ это название параметра, которое вы передали
(имя image)
image_tower = cv2.imread('/content/bashnya-s-chasami.jpg') image_tower = cv2.cvtColor(image_tower, cv2.COLOR_BGR2RGB) augmented_dict = aug(image=image_tower)
visualize(augmented_dict['image'])
Рисунок 1.11 – Пример аугментрованного изображения
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]