Коллекция Wellcome содержит множество изображений. 120 000 из них в настоящее время доступны через каталог api, а еще 40 миллионов имеют открытую лицензию и бесплатно доступны для всех. Наша команда по оцифровке обрабатывает остальную часть коллекции с невероятной скоростью, создавая тысячи новых цифровых изображений каждый день.
Разобраться в этом объеме материала вручную - задача практически невыполнимая. Эксперты используют годы обучения и опыт, чтобы распутать и каталогизировать связи между произведениями, но они не могут обработать оцифрованные работы достаточно подробно с той скоростью, с которой мы их создаем. Такая сложная работа чрезвычайно ценна, и все, что мы можем сделать, чтобы ускорить их рабочий процесс, принесет пользу каждому.
Кроме того, хотя некоторые люди, использующие наш интерфейс каталога, являются экспертами в предметной области, многие из них их нет, и мы не можем ожидать, что у них хватит страсти или терпения, чтобы просмотреть каждую работу в коллекции, чтобы найти то, что им интересно.
Интегрируя машинное обучение в способы доступа к коллекции, мы ускоряем и упрощаем некоторые неудобные начальные этапы работы для экспертов, одновременно улучшая взаимодействие людей с доступом к коллекции в Интернете.
В качестве примера в этом посте мы будем использовать машинное обучение, чтобы найти и измерить визуальное сходство между всеми изображениями в нашей коллекции.
Классификаторы изображений и векторы классификации
Классификация изображений - очень распространенная задача в машинном обучении, и это отправная точка для нашей работы по подобию.
Нейронные сети обычно обучаются распознавать то, что люди обычно фотографируют, например собак, кошек, людей и автомобили.
Поскольку классификация выполняется с помощью вычислений, нам нужен способ представления наших категорий в числовом виде. Используя категории [dog, cat, man, car]
в качестве примера, сеть создает вектор классификации в следующем формате для каждого нового изображения:
dog
=[1, 0, 0, 0]
cat
=[0, 1, 0, 0]
man
=[0, 0, 1, 0]
car
=[0, 0, 0, 1]
Компьютеры сейчас абсурдно хороши в такого рода вещах, набирая больше очков, чем люди, во многих задачах, которые несколько лет назад считались невозможными, и работают только с необработанными пиксельными данными изображений. К тому же они невероятно быстрые - всего за несколько минут пройдет весь каталог изображений Wellcome Collection с помощью простого классификатора.
Векторы признаков
Двоичные выходные данные классификационной сети могут сказать нам, изображена ли собака на фотографии, но эта информация не очень тонкая. Мы могли бы использовать классификационные векторы, чтобы найти все изображения собак в коллекции, но мы не сможем определить, являются ли эти собаки лабрадорами или какие из них больше всего похожи на новую, ранее невидимую собаку. В этом векторе есть только один бит информации, и мы мало что можем с ним поделать.
Однако благодаря многоуровневой природе нейронных сетей у нас есть доступ к нескольким другим векторам. Промежуточные уровни сети (между входами необработанных пикселей и выходами векторов классификации) содержат всю информацию о том, как сеть пришла к своему решению по классификации.
Каждый элемент в нашем выбранном векторном массиве функций соответствует визуальному элементу или форме, например paw
, grass
, pointy ear
, floppy ear
и т. Д., И их значение соответствует тому, насколько сильно сеть считает, что эта функция присутствует в изображении. Комбинация высоких значений в элементах paw
и floppy ear
вектора признаков может внести вклад в окончательный уровень классификации, например, вывод 1
в позиции dog
над положением car
.
Эти векторы могут принимать любое из значений между 0
и 1
в каждой позиции и обычно намного больше, чем наши векторы классификации, что позволяет им кодировать гораздо больше нюансов, чем векторы классификации.
Создать вектор признаков так же быстро и просто, как и провести классификацию. Мы просто просим ту же сеть предоставить нам фрагменты информации, которые повлияли бы на ее окончательное решение о классификации, вместо того, чтобы запрашивать само решение.
Сходство
На данный момент мы разработали способ создания информационного числового описания каждого изображения в коллекции. Справедливо предположить, что похожие изображения будут описываться схожими уровнями схожего набора функций, поэтому, задав следующие типы вопросов о паре изображений, мы сможем определить, насколько они похожи:
У них такое же количество pointy ear
?
У них такое же количество floppy ear
?
Сколько bicycle wheel
они показывают?
Сколько handwritten text
вы можете увидеть в каждом из них?
Есть ли такое же количество light background
?
А как насчет dark borders
?
Все эти вопросы объединены в один математический расчет, охватывающий каждую функцию в нашем векторе функций. Расчет дает одно число от 0
до 1
, которое дает нам меру «расстояния» между векторами. Чем меньше расстояние между векторами признаков, тем более похожими изображения.
Результаты, достижения
Теперь мы можем взять любое изображение из нашей коллекции и запросить его самые близкие совпадения! Вот несколько примеров.
Верхние левые изображения здесь - это изображения-запросы. Последующие изображения являются теми, которые мы определили как наиболее похожие в соответствии с их векторами признаков.
Кажется, что как обычные, так и абстрактные формы довольно хорошо улавливаются сетью!
Опять же, эти совпадения основаны только на необработанных данных пикселей в каждом изображении - сеть не имеет доступа ни к каким метаданным и принимает решения исключительно на основе визуального сходства изображений.
Мы также можем использовать эту технику для сравнения изображений из-за пределов коллекций с изображениями внутри нее, что позволяет нам выполнять своего рода обратный поиск изображений! Создание вектора признаков для известной единицы MERL указывает нам, например, на другое изображение здоровенной овцы из нашей собственной коллекции.
Как мы этим пользуемся в Wellcome?
Возможность генерировать такую информацию полезна во многих контекстах. Мы используем сходство изображений для внутренних целей, чтобы находить кластеры работ в коллекции, чтобы улучшить нашу каталогизацию. Мы использовали его, чтобы удалить ненужные изображения из наших общедоступных коллекций. Скорее всего, мы начнем опробовать функцию сходства изображений на отдельных страницах работ в надежде расширить кругозор пользователей и более удачно раскрыть части коллекции. Что наиболее важно, эти векторы функций обеспечивают основу для многих будущих разработок Wellcome Collection с машинным обучением. Смотрите это пространство!
Все еще хотите узнать больше?
Мы открыто работаем в Wellcome, и весь код команды платформы доступен для чтения и повторного использования всеми, включая все, что я создал в папке /data_science
. Исследование, которое я описал выше, задокументировано более подробно в наборе записных книжек jupyter вместе с рабочим кодом, который я использовал для получения результатов выше. Если у Вас возникнут вопросы, пишите в твиттере!