Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТиП_Лекция_КомпьютерноеЗрение_ДЛЯ_ЧТЕНИЯ.docx
Скачиваний:
11
Добавлен:
23.06.2024
Размер:
34.69 Mб
Скачать

2.3. Гистограммы

Обсудим гистограммы и причем тут изображения. Начнем с проблемы.

Слайд 84

У нас есть картинка, на которой изображена Луна. На этой картинке очень много однотонного серого цвета и очень плохо видны детали. Когда мы говорим о фотографии Луны, мы говорим о том, что нам интересны детали, т.е. её рельеф. Что мы можем с этим сделать?

Слайд 85

Мы можем нарисовать гистограмму значений наших пикселей. Что мы видим? Мы видим, что есть большой всплеск в конкретном значении и по краям пикселей практически нет. Что с этим можно сделать?

Слайд 86

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

Слайд 87

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

Слайд 88

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

Слайд 89

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

Слайд 90

Получили следующую кривую, которая идет практически горизонтально до всплеска, потом резко поднимается вверх и дальше идет горизонтально. Теперь нам надо выровнять нашу функцию распределения. Попытаемся сделать так, чтобы она была прямой из 0 в 1. Для этого нужно применить к каждому пикселю нашу функцию распределения.

Слайд 91

Гистограмма опять размажется на весь цветовой диапазон, а функция распределения станет похожа на прямую из 0 в 1. Посмотрим на результат:

Слайд 92

Четкость изображения увеличилась, рельеф стал виден еще больше.

Теперь давайте рассмотрим плохой случай, когда гистограмма работает не очень хорошо:

Слайд 93

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

Слайд 94

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

Слайд 95

Мы будем применять усреднение на каком-то фиксированном разбиении. Если сделать это в лоб, то мы получим артефакт, который показан на слайде – четырехугольники в местах, где проходило разбиение.

Слайд 96

Что можно сказать про такой результат? Красными точками помечены середины четырехугольников. Для них функция распределения посчитана абсолютно правильно. Для всех остальных она посчитана не совсем правильно, т.к. она посчитана для красных точек и просто была применена для всех остальных пикселей в этом окошке. Что с этим можно сделать? Мы можем усреднить по функции распределения. Вспомним, как мы делали нечто похожее при интерполяции. Мы брали и усредняли пиксели пропорционально расстоянию до целочисленного значения. Здесь же мы будем усреднять функцию распределения пропорционально расстоянию до центров разбиения. В результате мы получим такой результат:

Слайд 97

Если добавить еще больше разбиений, то результат улучшиться

Слайд 98

В результате мы получили очень четкое изображение, на котором видны многие детали.

Если применить этот подход к нашему первому изображению с луной, то мы получим такой результат:

Слайд 99

Такой подход называется адаптивным выравниванием гистограммы.

Границы и признаки

3. Границы

3.1. Оператор Собеля

Что такое границы? Это пиксели, на которых заканчивается какой-либо объект.

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

Представление в виде свертки:

Далее необходимо сгладить изображение, чтобы убрать резкие изменения в функции, не относящиеся к объектам.

Итоговое изображение с инвертированным цветом:

Изображение выглядит «дырявым» из -за того, что мы использовали производную по одной оси. Объеденим производные по двум осям:

Итог:

3.2. Оператор Лапласа

В операторе Лапласа мы используем вторую производную, а именно свойство, что изменения максимально сильны при пересечении 0.

Вторая производная:

Для объединения двух производных мы используем оператор Лапласа:

Итог:

Этот способ:

  • Чувствителен к шуму

  • Хорошо работает на ядрах 5х5 - 9х9

3.3. Canny

Canny – лучший алгоритм выделения границ. Он строит ровные границы объектов.

Canny состоит из:

  1. Фильтрации

  2. Подсчета градиента

  3. Подавления немаксимумов

  4. Фильтрации границах

  5. Объединения в линии

Фильтрация — используем фильтр Гаусса.

Подсчет градиента — используем оператор Собеля. На этом шаге мы запоминаем магнитуду и направление градиента.

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

Алгоритм подавления:

Фильтрация границ — частичная фильтрация уже произошла во время подавления, но этого не достаточно. Для дополнительной фильтрации мы делим все пиксели на границе на 2 категории: сильная и слабая границы.

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

4. Пирамиды и признаки

4.1. Пирамиды

Пирамиды — структуры данных для хранения изображений. Хранит изображения в разных разрешениях.

Пирамида Гаусса

В пирамиде Гаусса каждое следующее изображение в 4 раза меньше предыдущего.

Формула пирамиды Гаусса.

Пирамида Лапласа:

Пирамида Лапласа на i шаге — это разница пирамиды Гаусса на i шаге и ее сглаженной версии.

Минус — пирамида не инвертируема — нельзя восстановить изображение.

Но в немного другом варианте пирамиды мы убираем этот недостаток.

Зачем применяются пирамиды? Они используются для объединения изображений.

Задача классификации для нейронных сетей

5. Задача классификации

5.1. Классификация изображений и ImageNet

Классификация - определение класса объекта.

Классификации присущи стандартные вызовы:

  • Многоклассовая классификация — когда мы выбираем какой класс из большого набора является верным для объекта.

  • Пересекающиеся классы — когда на изображении находятся несколько объектов, чьи классы нужно определить.

  • Несбалансированные классы — когда для одного класса изображений много, а для другого очень мало.

  • Шум в разметке — когда на изображениях присутствует шум.

С лайд-?

Но у задач классификации в компьютерном зрении есть свои особенности:

  • Наш алгоритм должен быть чувствительным к сдвигам, то есть, где бы не находилась на изображении кошка, класс у нее не изменится.

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

  • Наш алгоритм должен классифицировать объект вне зависимости от его положения, например, сидящая и лежащая кошка имеют один класс.

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

  • Наш алгоритм должен учитывать вариативность внутри класса, ведь кошки разных пород все равно имеют один класс!

Метрики для задач классификации:

Слайд-?

ImageNet – самый знаковый датасет в компьютерном зрении. Он содержит почти 22 тысячи классов. Например, для каждой породы собак — свой класс. Но для обучения чаще всего используют 1000 классов.

Слайд?

Есть другие, менее распространенные датасеты:MNIST используют для распознавания рукописных текстов и т.д.

5.2. Базовые слои и оптимизация

Сверточные слои — применяются в компьютерном зрении, так как не чувствительны к сдвигу и применяются не к каждому каналу по отдельности, а ко всем сразу, что экономит много ресурсов. Получается , что итоговые веса — высота свертки * ширину свертки * глубину входного канала * глубину выходного канала.

С лайд?

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

С лайд?

Еще один способ понизить размерность изображения - разделить его на области 4*4 и брать из этой области самое высокое значение. Таким образом мы оставляем самые важные значения и выкидываем неважные.

С лайд?

Самая популярная промежуточная активация в компьютерном зрении — ReLU

У нее есть неприятная особенность — если на слое все признаки выдадут 0 или меньше, то активация все признаки приравняет к 0, из-за чего все признаки у следующих слоев автоматически станут равны 0.

С лайд-?

Следующим слоем является Dropout, который создает подсети, случайно выключая активации. Выключение активации — приравнивание ее к 0.

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

Слайд?

У нас получилась итоговая схема обучения:

5.3. FLOPs & FoV

У нейронных сетей есть определенный набор характеристик:

FLOPs – Floating Point Operations – количество операций, необходимых для прогона модели на одном примере. Этот параметр не прямо зависим со скоростью работы, хоть и сильно коррелирует.

F oV – этот параметр определяет, сколько признаков поучаствовало в формировании признака определенного слоя. При формировании признака слоя участвуют несколько признаков предыдущего слоя. Он помогает лучше понять архитектуру сети и ее работоспособность еще до начала обучения. Например, если мы хотим найти на изображении объект, а FoV конечного слоя нашей сети меньше размера этого объекта, то очень велика вероятность, что сеть не справится с поставленной задачей.

6. Архитектуры

6.1. VGG & BatchNorm

Первая архитектура, которую мы рассмотрим — это VGG & BatchNorm.

Она была представлена в 2014 году и представляет собой просто последовательность сверток, которые заканчиваются несколькими полносвязными слоями. Использовалась активация ReLU и Пулинг maxpool 2x2(понижение разрешения). Причем при понижении разрешения увеличивается количество каналов на наших промежуточных признаках.

У VGG есть много вариаций, например VGG 19 с 19 полновязными слоями.

Этот алгоритм показывал лучшие результаты среди VGG, его параметры занимали более 500 mb, но существенным минусом было время обучения — 3 недели.

6.2. Модели ResNet

Модели ResNet пришли на смену VGG, когда последние достигли пика своих возможностей. Суть этой модели — блоки(или слои), в которых есть несколько последовательно расположенных сверток, и в которых общий выход блока состоит из выхода последней свертки с прибавлением входа блока.

Этот метод позволяет создать сеть с 152 слоями и более устойчива к разным негативным эффектам. Благодаря этим слоям значительно сократилось время обучения сети, что является огромным плюсом ResNet.

6.3. XceptionNet & MobileNet

XceptionNet – быстрая и компактная архитектура сетей.

XceptionNet — суть архитектуры: мы так же используем блоки, но в них изначально увеличивается количество входных каналов с помощью свертки 1х1, после чего делим нашу карту признаков на большое количество более мелких. Получившиеся карты признаков мы используем в некотором количестве сверток 3х3, которые учатся независимо друг от друга, после чего формируем с их помощью 1 большой выход.

Эта архитектура сильно ускорила и сжала сеть.

6.4. MNAS

Мы рассмотрели некоторые архитектуры сетей, но как выбрать, какая из них в вашем случае будет наиболее эффективна. NAS – это автоматический выбор архитектуры сети в зависимости от задачи. Для этого мы обучаем отдельную сеть, которая будет выбирать архитектуру для остальных сетей.

6.5. EfficientNet

Все архитектуры сетей, которые мы рассматривали до этого, были сверточными, но в 2017 появился новый вид архитектуры — трансформеры, который используют для обработки текста. ViT относится именно к этому виду. Его идея заключается в использовании блока attention, который из поступивших значений должен выбрать самый важный признак. Алгоритм: для каждого признака Q и K перемножаются, после чего от получившегося значения берем SoftMaх, у нас получается число в диапазоне 0...1, к которому прибавляется 1. И в итоге V умножается на получившееся число. Далее сравниваются все получившееся значения и выбирается самое большее. Для нашего алгоритма блоки ставятся параллельно .

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

7. Практическая методология

7.1. Что делать если плохо учится?

До обучения сети нам нужно сделать несколько шагов.

  1. На первом шаге мы должны выбрать правильный критерий качества — метрику, с учетом всех особенностей будущей сети.

  2. На втором шаге мы выбираем базовую модель с учетом всех наших требований.

После мы уже можем начать обучение сети.

Как правильно выбрать базовую модель?

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

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

Как менять архетектуру?

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

При ручной настройке нужно учитывать следующие параметры:

  • Способность к обучению

  • Потребление памяти

  • Потребление времени на предсказании

  • Потребление времени на обучении

Ручное управление состоит том, чтобы сбалансировать эти характеристики под ваши нужды.

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

П рактики отлавливания ошибок:

  • Визуализация работы во время обучения — выписывать все странные предсказания при обучении, часто так можно заметить ошибки.

  • Визуализация худших ошибок — мы отлавливаем моменты, где вероятность, предоставленная сетью была большой, но она совершила ошибку

  • Переобучение на маленьком наборе данных — если после полноценного обучения сеть выдает плохой результат, то перед сменой архитектуры или ее доработкой можно попробовать обучить ее на 10-15 изображениях. Если про таком наборе она все равно будет ошибаться, то ваша модель не обучается, где-то есть ошибка

7.2. Аугметация и Псевдо-разметка

Мы рассмотрели, как изменять архитектуру, но что делать, если даже при подборе лучшей архитектуры нас все равно не устраивает результат? Мы можем поработать с данными. Для этого используется аугментация — изменение примеров в наборе данных. Ее можно применять на этапе тренировки и тестирования.

Аугментация на этапе тренировки увеличивает набор данных, это особенно актуально для маленьких датасетов. Так же она увеличивает робастность алгоритма к определенным особенностям входа.

Что же этот метод из себя представляет? Это сохранение измененных изображений этого же датасета. Изменения могут затрагивать как изменение освещение, так и поворот изображения. Это ограничено только вашим воображением.

А угментация на этапе теста — это генерирование нескольких аугментированных изображений из одного, их предсказание, усреднение всех предсказаний. Усреднение должно быть таким же, как и предсказание изначального изображения.

Псевдо - разметка это еще один способ работы с данными. Чаще всего наборы данных размечены не полностью, а лишь частично, причем чаще всего размеченная часть гораздо меньше не размеченной. В таких случаях и помогает псевдо — разметка. Мы обучаем модель по размеченной части набора данных, после чего делаем предсказания на не размеченной части и добавляем то, в чем модель уверенна, в размеченный набор. После чего повторяем.

Задачи переноса стиля и поиска изображений по содержанию

9. Стаил Трансфер

9.1. A Neural Algorithm of Artistic Style

Сейчас мы расскажем о переносе стиля. Но что такое стиль? На двух картинах Винсента ван Гога изображено совершенно разное — портрет человека и ночной город. Это называют контентом изображения. Несмотря на это, они чем -то очень схожи. Это «что-то » и называют стилем. Обычно говорят что каждый художник имеет свой стиль. Задача переноса стиля состоит в том, чтобы перенести на изображение определенный стиль, не меняя контент.

У задачи переноса стиля есть определенные сложности:

  • Примеров правильной работы нет, поэтому учиться на чем-то готовом не выйдет

  • Понятия похожести стиля и контента размыты,поэтому их необходимо сформулировать с помощью формул для обучения сети

Наша мера похожести будет состоять из двух составляющих — мера похожести(сохранности) контента и мера похожести стиля.

В качестве меры для контента мы возьмем сумму фиксированных слоев у VGG сети. Считаются выходы слоя для изображения контента и измененного изображения, и расстояние l. Слой можно выбрать какой угодно, но чем он глубже, тем более абстрактные признаки создает. Берется несколько слоев, после чего итоговые значения на каждом слое складываются.

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

Для подсчета корреляции используют матрицу Грамма. В каждой ячейке матрицы будет скалярное произведение каналов.

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

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

9.2. Fast Neural Style

Изначальный алгоритм переноса стиля был довольно медленным, поэтому он оптимизировался. В алгоритме Fast Neural Style была оптимизирована нейронная сеть для генерации итогового изображения. В ней применялись Deconvolution слои, которые увеличивали разрешение(например в 2 раза).

9.3. Arbitrary-Style-Transfer

Fast Neural Style был достаточно быстрым алгоритмом, но в нем для каждого стиля надо было обучать отдельную сеть. В Arbitrary-Style-Transfer улучшили предыдущий алгоритм, немного поменяв подход, что позволило с помощью 1 сети переносить любой стиль.

10. CBIR

10.1. Поиск изображений по содержанию

CBIR — это задача поиска изображений по содержанию. Мы рассмотрим частный случай CBIR – поиск по фото.

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

Т ак как у нас происходит сравнение изображений то очень важным пунктом становится выбор метрики качества. Наиболее популярной метрикой для задачи CBIR является Precision@k. В ней введены два понятия — рекомендованные — наиболее близкие изображения по мнению модели, релевантный — является ли рекомендация объекта правильной.

В метрике есть гиперпараметр k, который отвечает за количество близких значений, которые будут участвовать в метрике. Например: на скольки фотографиях из 5 с самым похожим человеком был именно этот человек. Чаще всего k фиксируется, но если нужно, чтобы все фотографии с данным человеком использовались в метрике, это не нужно.

10.2. Функции схожести и потерь часть 1

Мы разобрались с тем, как будет выглядеть наша система и какие метрики качества нужно использовать, теперь разберемся, как сравнивать признаки друг друга и обучать. В функции схожести и потерь основная цель архитектуры — создать признаки изображения, поэтому мы возьмем архитектуру классификации с обрезанной частью. Цель функции схожести — находить расстояние между описаниями признаков. Для описания признаков чаще всего используют косинусное или евклидово расстояние.(евклидово — разница между признаками, возведенная в квадрат, косинусное — скалярное произведение двух векторов деленное на норму). Дополнительно признаки нормируются на единичную сферу(в евклидовом — всегда, в косинусном — часто).

М ы хотим, чтобы похожие объекты лежали близко друг к другу, а непохожие далеко.

Мы рассмотрим несколько функций, реализующих данный функционал.

Контрастная функция потерь:

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

Триплетная функция потерь похожа на контрастную, но теперь мы располагаем объекты относительно якоря. Здесь так же есть число m, меньше которого расстояние между позитивным и негативным быть не может.

Но у обоих этих функций есть недостаток — они могут стать 0 при выборе правильно работающих примеров, из — за чего модель перестает учиться.

Для этого триплеты делят на 3 категории: сложные, средние и легкие, после чего доучивают сеть на сложных триплетах.

Для разделения триплетов сначала строим признаки для большого батча, после чего для каждого якоря подбираем самый ближний негативный и самый дальний позитивный примеры. На ранних этапах обучения рекомендуется выбирать полусложные теплеты.

10.3. Функции схожести и потерь часть 2

Альтернатива обучения признаков напрямую — ArcFace – софтмакс классификация. Для нее строится сеть, где добавляется слой, переводящий все лица(если нужно распознавать лица) в отдельные классы, после чего softmax присваевает классам в вероятности.

Недостатки метода:

  • Обучение классификации требует набор данных со специальной разметкой.

  • Плохо пригоден для больших наборов данных. В этом случае требует специальной реализации из-за ограничения максимальной памяти GPU.

10.4. Ранжирование

Ранее мы размечали базу данных с фотографиями. Но как же производить поиск по базе? Обычный перебор слишком долог при большом наборе данных и для нас не подходит. Для этого используют приближенный поиск.

Рассмотрим самый популярный алгоритм приближенного поиска — Annoy.

У нас есть фото с большим набором точек. Задача — найти ближайшую точку к случайно выбранной. Мы выбираем две случайные точки, проводим линию между ними и разделяем фото на 2 области. Продолжаем процедуру до критерия остановки — недостатка точек для дальнейшего разделения.

В итоге у нас получилось бинарное дерево, во которому мы и будем искать соседей!