Как HMTL помогает улучшить итоговую точность в задачах NLP

5 декабря 2018
многозадачное обучение hmtl

Как HMTL помогает улучшить итоговую точность в задачах NLP

Да, вы правильно прочитали, это правда HMTL — модель Hierarchical Multi-Task Learning, что дословно переводится как Иерархическое многозадачное обучение. Наблюдается нарастающая волна как в NLP, так и в целом в глубоком…

Да, вы правильно прочитали, это правда HMTL — модель Hierarchical Multi-Task Learning, что дословно переводится как Иерархическое многозадачное обучение. Наблюдается нарастающая волна как в NLP, так и в целом в глубоком обучении, которая называется многозадачное обучение!

Перевод статьи Beating state-of-the-art in NLP with HMTL, автор — Victor Sanh.

Я работал с многозадачным обучением на протяжении года, и результатом работы является HMTL. Эта модель, которая превосходит современные state-of-the-art модели в некоторых задачах NLP, будет представлена на избирательной конференции AAAI. Была выпущена статья и представлен тренировочный код, которые стоит посмотреть.

Одна модель для нескольких задач

Дадим определение многозадачному обучению.

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

Создана качественная онлайн демо-версия, в которой можно интерактивно взаимодействовать с HMTL. Попробуйте сами!

Примеры полученных в демо HTML результатов.
Примеры полученных в демо HMTL результатов.

Традиционно, специальные модели обучались независимо для каждой из этих NLP задач (Named-Entity Recognition, Entity Mention Detection, Relation Extraction, Coreference Resolution).

В случае HMTL, все эти результаты получаются при помощи одной модели с одним прямым прохождением!

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

Многозадачное обучение (Multi-Task Learning, MTL) поощряет модели использовать признаки и методы, которые могут быть полезны в других задачах. Фундаментальная движущая сила MTL состоит в том, что близкие задачи должны получать преимущества друг от друга через индуцирование более богатых представлений.

Читайте также: Transfer learning с библиотекой Keras

Зачем применять многозадачное обучение

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

Покажем сравнение с Усейном Болтом — возможно одним из самых великих спринтеров, девятикратным олимпийским золотым медалистом и обладателем нескольких действующих мировых рекордов (на ноябрь 2018 года). Так вот, великий бегун тренируется интенсивно и разнообразно, большую часть сил на тренировках затрачивая не на бег, а на другие упражнения. Усейн Болт, например, поднимает железо, запрыгивает на возвышенности, делает прыжки. Эти упражнения не связаны напрямую с бегом, но развивают силу мускулатуры и взрывную силу для улучшения главной задачи — спринта.

В естественной обработке языка MTL сначала был использован в подходах на нейронной основе исследователями R. Collobert и J. Weston. Модель, которую они предложили, представляла из себя MTL-инстанс, в котором несколько разных задач (со слоями для узкоспециализированных задач) основаны на одних и тех же общих вложениях, тренируемых для выполнения различных задач.

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

Хотя и можно заранее простым способом зафиксировать, как информация будет передаваться между задачами, мы можем также позволить модели самой решать, какие параметры и слои она должна делить (share), а также какие слои лучше всего использовать для данной задачи.

В последнее время идеи общих представлений вновь появились в значительной степени из-за погони за универсальными вложениями предложений, которые могут быть использоваться во всех областях независимо от конкретной задачи. Некоторые полагаются на MTL. Subramanian et al., например, заметил: для того чтобы иметь возможность обобщать широкий круг разнообразных задач, необходимо кодировать несколько лингвистических аспектов предложения. Была предложена Gensen — архитектура MTL с общим представлением кодировщика с несколькими последующими слоями для конкретных задач. В этой работе использовались 6 различных слабо связанных задач — от поиска логических выводов из естественного языка до машинного перевода через разбор грамматики с фразовыми структурами.

Коротко говоря, многозадачное обучение сейчас привлекает к себе много внимания и становится обязательным для широкого спектра задач не только в естественной обработке языка, но и в компьютерном зрении. Совсем недавно бенчмарки, такие как GLUE benchmark (оценка общего понимания языка), были представлены для оценки обобщающей способности архитектур MTL и, в более общем смысле, моделей понимания языка (Language Understanding).

Многозадачное обучение на Python

Теперь давайте напишем код, чтобы увидеть как работает MTL на практике.

Очень важная часть программы многозадачного обучения — тренировка. Здесь необходимо ответить на вопросы:

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

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

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

  • Выбираем задачу (независимо от выбора алгоритма);
  • Выбираем пакет (batch) в датасете для выбранной задачи (случайная выборка пакета — почти всегда хороший выбор);
  • Выполним прямой проход через нейросеть;
  • Распространим ошибку в обратном направлении.

Этих четырех шагов должно быть достаточно в большинстве случаев.

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

На сайте Hugging Face представлена хорошая библиотека AllenNLP, разрабатываемая Институтом ИИ Аллена. Эта библиотека — мощный и в то же время гибкий инструмент для проведения исследований в NLP. AllenNLP совмещает в себе гибкость PyTorch с умными модулями для загрузки и обработки данных, которые тщательно разрабатывались для задач NLP.

Если вы еще не заглянули туда, я настоятельно рекомендую сделать это. Команда разработчиков сделала замечательное учебное пособие по использованию библиотеки.

Код

Ниже я представлю простую часть кода для создания обучающей модели MTL на основе AllenNLP.

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

Теперь, когда у нас есть класс Task, мы можем определить нашу модель Model.

Создание модели в AllenNLP — весьма простое занятие. Для этого нужно просто сделать ваш класс наследуемым от класса allennlp.models.model.Model. В этом случае будет автоматически получено множество методов, таких как get_regularization_penalty(), который будет штрафовать модель (То есть L1 или L2 регуляризация) во время обучения.

Давайте поговорим о двух основных методах, которые мы будем использовать в работе сети, это forward() и get_metrics(). Эти методы во время обучения рассчитывают, соответственно, прямое прохождение (вплоть до вычисления потерь) и метрики обучения/оценки для данной задачи.

Важный элемент в многозадачном обучении — добавить конкретный аргумент task_name, который во время обучения будет использоваться для выбора текущей интересующей задачи. Давайте посмотрим, как это написать:

Ключевой пункт в MTL — выбор порядка выполнения (обучения) задач. Самый простой способ сделать это — производить выбор задачи случайно из равномерного распределения после каждого обновления параметров (прямой + обратный проход через нейросеть). Такой алгоритм использовался в нескольких ранних работах, таких как упомянутый ранее Gensen.

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

В следующем куске кода реализована процедура выбора задачи. Здесь task_list определяется как список задач Task, на которых мы хотим обучать нашу модель.

Давайте запустим нашу MTL модель.

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

Итерации метода train() будут проходить по задачам в соответствии с их распределением вероятности. Метод также будет оптимизировать параметры MTL модели шаг за шагом.

Хорошей идеей будет добавить условие остановки во время обучения на основе валидационных метрик (_val_metric и _val_metric_decreases в классе Task). Например, можно останавливаться, когда валидационная метрика не улучшается в течение patience количества эпох. Такое условие проверяется после каждой тренировочной эпохи. Хотя мы этого не делали, вы должны легко разобраться, как модифицировать представленный код, чтобы он принимал во внимание это улучшение. В любом случае, здесь можно посмотреть на полный тренировочный код.

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

  • Последовательная регуляризация. Одна из основных проблем во время обучения MTL модели — забывание. Модель полностью или частично забывает часть информации, связанную с обучением прошлой задачи, после обучения новой задачи. Это явление повторяется вновь и вновь, когда несколько задач выполняются последовательно. Hashimoto et al. представляет последовательную регуляризацию: она предотвращает слишком сильное по сравнению с прошлыми эпохами обновление параметров при помощи добавления L2 штрафа к функции потерь. В таком конфигурации тренер MTL не меняет задачу после обновления параметров, а проходит полный тренировочный датасет интересующей задачи.
  • Многозадачное обучение как вопросно-ответная система. Недавно McCann et al. [7] представил новую парадигму в исполнении многозадачного обучения. Каждая задача переформулируется в вопросно-ответную задачу, а единственная модель (MQAN) обучается совместно отвечать на 10 разных задач, рассмотренных в этой работе. MQAN достигает state-of-the-art результатов в нескольких задачах, например, в таких WikiSQL — задача семантического парсинга. Вообще говоря, в этой работе обсуждаются ограничения монозадачного обучения и связи многозадачного обучения с Transfer Learning.

Улучшение state-of-the-art в семантических задачах: Модель иерархического многозадачного обучения (HMTL)

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

В недавней работе, представленной на AAAI в январе, было предложено сконструировать такую модель в виде иерархии. Если говорить более подробно, мы строим иерархию между набором точно подобранных семантических задач, чтобы отразить лингвистические иерархии между разными задачами (здесь также полезно посмотреть Hashimoto et al.).

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

Мы рассматриваем набор, состоящих их следующих семантических задач:

  • Named Entity Recognition;
  • Entity Mention Detection;
  • Relation Extraction;
  • Coreference Resolution.

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

В нашем эксперименте мы установили, что эти задачи могут получать друг от друга преимущества с помощью многозадачного обучения:

  • Комбинация упомянутых 4 задач приводят к state-of-the-art результатам на 3 из них (Named Entity Recognition, Relation Extraction and Entity Mention Detection);
  • Фреймворк MTL значительно ускоряет скорость обучения по сравнению с фреймворками монозадачного обучения.

Мы также проанализировали  обучаемые и совместно используемые вложения в HMTL. Для анализа использовался SentEval — набор из 10 пробных задач, представленных Conneau et al. [8]. Эти пробные задания нацелены на оценку способности распознавать широкий набор лингвистических свойств (синтаксические, поверхностные и семантические).

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

Реализация Transfer learning с библиотекой Keras

22 ноября 2018
transfer-learning-keras

Реализация Transfer learning с библиотекой Keras

Для большинства задач компьютерного зрения не существует больших датасетов (около 50 000 изображений). Даже при экстремальных стратегиях аугментации данных трудно добиться высокой точности. Обучение таких сетей с миллионами параметров обычно…

Для большинства задач компьютерного зрения не существует больших датасетов (около 50 000 изображений). Даже при экстремальных стратегиях аугментации данных трудно добиться высокой точности. Обучение таких сетей с миллионами параметров обычно имеет тенденцию перегружать модель. В этом случае Transfer learning готов прийти на помощь.

Inception-V3 Google Research

Что такое Transfer learning?

Transfer Learning (TL) — одно из направлений исследований в машинном обучении, которое изучает возможность применения знаний, полученных при решении одной задачи, к другой.

Зачем нужен Trasfer learning?

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

Как может помочь Trasfer learning?

Если внимательно изучить процесс глубокого обучения, то станет понятно следующее: на первых слоях сети пытаются уловить самые простые закономерности, на средних слоях — наиболее важные, и на последних слоях — специфические детали. Такие обученные сети, как правило, полезны при решении других задач компьютерного зрения. Давайте посмотрим, как реализовать TL с использованием Keras для решения различных задач.

transfer learning
Inception V3 Google Research

Простая реализация с помощью Keras


Помня, что свойства СonvNet являются более примитивными на первых слоях и усложняются с каждым последующим слоем, рассмотрим четыре типичных сценария.

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

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

Таким образом, давайте отбросим все слои VGG19 и обучим только классификатор:

for layer in model.layers:
   layer.trainable = False
#Now we will be training only the classifiers (FC layers)

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

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

for layer in model.layers:
   layer.trainable = True
#The default is already set to True. I have mentioned it here to make things clear.

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

for layer in model.layers[:5]:
   layer.trainable = False.
# Here I am freezing the first 5 layers

3. Новый датасет небольшой и сильно отличается от исходного

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

Этот код должен помочь. Он будет извлекать свойства «block2_pool». Обычно это не очень полезно, поскольку слой имеет 64х64х128 свойств и обучение классификатора поверх них может и не помочь. Можно добавить несколько полносвязных слоев и обучить нейронную сеть поверх них. Это нужно делать в следующем порядке:

  1. Добавьте несколько FC слоев и выходной слой.
  2. Задайте весовые коэффициенты для более ранних слоев и отбросьте их.
  3. Обучите сеть.

4. Новый датасет большой и сильно отличается от исходного

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

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

Selfie ID: подтверждение личности с помощью глубокого обучения

22 октября 2018
Selfie Matching DocFace+ DWI

Selfie ID: подтверждение личности с помощью глубокого обучения

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

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

DocFace+ Selfie Matching
Примеры автоматических систем сопоставления фотографий в документах при пересечении международных границ.

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

Современные исследования

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

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

Новый метод

В своей новой статье исследователи из Мичиганского университета предложили улучшенную версию DocFace — метода глубокого обучения для сопоставления документов с селфи.

В работе показано, что методы оптимизации на основе градиентного спуска сходятся медленно, если у большого числа классов мало выборок — как в случае существующих датасетов «документы-селфи». Для решения этой проблемы ученые предложили метод, названный Dynamic Weight Imprinting (DWI). Кроме того, они разработали новую систему распознавания для обучения единым представлениям на основе пар «документ-селфи» и проект с открытым исходным кодом под названием DocFace+ для сопоставления пар «документ-селфи».

Суть метода

Проблемы и ограничения предследуют разработчиков на каждом шагу при создании автоматизированной системы сопоставления пар «документ-селфи». Многие из них нетипичны для традиционных систем распознавания лиц.

Две основными проблемы: 

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

Метод целиком основан на transfer learning. Модель основной нейронной сети обучается на большом датасете (MS-Celeb 1M), а затем свойства переносятся в целевой домен пар «документ-селфи».

DocFace+

Утверждая, что алгоритм сходится крайне медленно и часто обучение «застревает» в локальных минимумах при работе со многими классами, имеющими малую выборку, исследователи предлагают использовать функцию потерь Additive Margin Softmax (AM-Softmax) наряду с новым методом оптимизации, который они называют DWI.

Обобщающая способность различных функций потерь.
Обобщающая способность различных функций потерь

Dynamic Weight Imprinting

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

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

функция потерь AM Softmax vs Diam Softmax
Сравнение функций потерь AM-Softmax и DIAM.

Исследователи обучили популярную архитектуру Face-ResNet с использованием стохастического градиентного спуска и функции потерь AM-Softmax. Затем они точно настроили модель на датасет пар «документ-селфи», связывая предлагаемый метод оптимизации DWI с AM-Softmax. Наконец, на специфических для документов и селфи свойствах была обучена пара одноуровневых сетей, обменивающихся параметрами высокого уровня.

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

Результаты

DWI демонстрирует превосходные результаты, давая в координатах TAR 97,51 ± 0,40%. Авторы утверждают, что их подход с использованием датасета MS-Celeb-1M и функции потерь AM-Softmax дает 99,67% точности в стандартном протоколе проверки LFW и скорости верификации 99,60% при FAR, равному 0,1% по протоколу BLUFR.

DocFace+
Примеры неверно классифицированных новой моделью изображений в датасете пар «документ-селфи».
Средняя производительность сдерживания различных модулей, которыми обмениваются одноуровневые сети
Сравнение SWI и DWI в координатах TAR

Сравнение с другими подходами

Dynamic Weight Imprinting был сопоставлен с другими методами поиска совпадений лиц, так как на данный момент не существует подходов сопоставления пар «документ-селфи». Сравнение с этими методами проводилось в координатах TAR и FAR и приведено в таблице:

Средняя производительность и стандартное отклонение различных методов сопоставления пар документ-селфи
Результаты оценки различных методов на датасете Public-IvS

Заключение

Метод DocFace+ для сопоставления пар документ-селфи показывает потенциал transfer learning, особенно в случае недостатка данных. Высокая точность сопоставления пар документ-селфи доказывает, что алгоритм может потенциально использоваться в системах подтверждения личности. Кроме того, представлен новый метод оптимизации DWI с быстрой сходимостью и высокой обобщающей способностью.

«Танцуют все!» — невероятное качество Motion Transfer для видео

30 августа 2018
everybody dance now

«Танцуют все!» — невероятное качество Motion Transfer для видео

Плохо умеете танцевать? Больше не проблема! Удивите своих друзей ошеломляющим видео, где вы танцуете, как суперзвезда. Исследователи из Беркли предложили новый способ motion trasfer для видео. Они утверждают, что способны перенести исполнение…

Плохо умеете танцевать? Больше не проблема! Удивите своих друзей ошеломляющим видео, где вы танцуете, как суперзвезда. Исследователи из Беркли предложили новый способ motion trasfer для видео. Они утверждают, что способны перенести исполнение танца с исходного видео на целевое всего за несколько минут.

Предыдущие работы

За последние два десятилетия motion transfer (трансфер или ретаргетинг движений) привлек значительное внимание со стороны исследователей. Ранние подходы заключались в создании нового видеоматериала путем манипулирования существующими.

Так какая же идея лежит за новым подходом?

State-of-the-art идея

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

Два дополнительных компонента улучшают результаты:

  • условное предсказание в каждом кадре в сравнении с предыдущим шагом для временной гладкости;
  • специализированной GAN для реалистичного синтеза лица.

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

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

Метод

Предлагаемый метод состоит из 3 частей:

  1. Обнаружение позы — с использованием предобученного современного детектора позы для скелета из исходного видео.
  2. Глобальная нормализация позы — учет различий между источником и целевыми объектами в фигурах и местоположении в кадре.
  3. Сопоставление нормализованных скелетов и целевого объекта.

Ниже приведен обзор метода:

Обзор метода motion transfer
Обзор метода

Для обучения модель использует детектор позы P для создания скелета из видеокадров целевого объекта. Тогда отображение G обучается вместе с состязательным дискриминатором D, который пытается отличить «реальную» пару соответствий (x, y) и «поддельную» пару (G (x), y).

Далее, для передачи, детектор позы P помогает получить стыковые суставы для источника. Затем они преобразуются с нормализацией процесса Norm в суставы для цели, для которой создается скелет. Наконец, применяется обученное отображение G.

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

Временное сглаживание

Чтобы создать видеоряд, они модифицируют генерацию одного изображения, чтобы обеспечить временную согласованность между соседними кадрами, как показано на рисунке ниже:

Настройка временного сглаживания
Настройка временного сглаживания

Проще говоря, текущий кадр G (xt) обусловлен его соответствующим скелетом xt и ранее синтезированным кадром G (xt-1) для получения гладкой картинки на выходе. Дискриминатор D затем пытается дифференцировать «реальную» временную согласованность последовательность (xt-1, xt, yt-1, yt) из «поддельной» последовательности (xt-1, xt, G (xt-1), G (xt) ).

Настройка FaceGAN

Исследователи дополнительно расширяют модель с помощью специальной настройки GAN, предназначенной для добавления деталей и реализма лица, как показано на рисунке ниже. А точнее, модель использует один дискриминатор 70 × 70 Patch-GAN для дискриминатора лица.

Face GAN setup

Теперь перейдем к результатам экспериментов …

Результаты

Целевые объекты записывались в течение 20 минут в режиме реального времени со скоростью 120 кадров в секунду. Кроме того, учитывая, что сеть не кодирует информацию об одежде, целевые танцоры носят туго натянутую одежду с минимальным складками.

Видео с источниками было найдено онлайн — это видео высокого качества, на которых исполняется танец.

Ниже приведены результаты, где верхняя строка показывает объект-источник, средняя показывает нормализованные скелеты, а нижняя отображает выходные данные модели:

Трансфер для 5 последовательных кадров
Трансфер для 5 последовательных кадров

В приведенных ниже таблицах показаны результаты полной модели (с временным сглаживанием и настройками FaceGAN) по сравнению с базовой моделью (pix2pixHD) и базовой моделью с настройкой временного сглаживания. Качество отдельных кадров оценивалось с помощью измерения Structural Similarity (SSIM) и Learned Perceptual Image Patch Similarity (LPIPS).

table 01

Сравнение результатов синтеза для <span class=
разных моделей (T.S .: модель с временным сглаживанием, T.S. + Face: полная модель с настройкой временного сглаживания и FaceGAN)»> Сравнение результатов синтеза для разных моделей (T.S .: модель с временным сглаживанием, T.S. + Face: полная модель с настройкой временного сглаживания и FaceGAN)

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

table 1

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

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

Сравнение изображений лиц, полученных различными моделями, в наборе валидации
Сравнение изображений лиц, полученных различными моделями, в наборе валидации

Вывод

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

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

Может быть интересно:

Как работает сверточная нейронная сеть: архитектура, примеры, особенности

17 июля 2018
сверточная нейронная сеть пример

Как работает сверточная нейронная сеть: архитектура, примеры, особенности

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

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

Двумерная сверточная нейронная сеть

сверточная нейронная сеть пример
Двумерная свертка

Двумерная свертка (2D convolution) — это довольно простая операция: начинаем с ядра, представляющего из себя матрицу весов (weight matrix).  Это ядро “скользит” над двумерным изображением, поэлементно выполняя операцию умножения с той частью входных данных, над которой оно сейчас находится, и затем суммирует все полученные значения в один выходной пиксель.

Ядро повторяет эту процедуру с каждой локацией, над которой оно “скользит”, преобразуя двумерную матрицу в другую все еще двумерную матрицу признаков. Признаки на выходе являются взвешенными суммами (где веса являются значениями самого ядра) признаков на входе, расположенных примерно в том же месте, что и выходной пиксель на входном слое.

сверточная нейронная сеть
Операция свертки

Независимо от того, попадает ли входной признак в “примерно то же место”, он определяется в зависимости от того, находится он в зоне ядра, создающего выходные данные, или нет. Это значит, что размер ядра сверточной нейронной сети определяет количество признаков будут объединены для получения нового признака на выходе.

В примере, приведенном выше, мы имеем 5*5=25 признаков на входе и 3*3=9 признаков на выходе. Для стандартного слоя (standard fully connected layer) мы бы имели весовую матрицу 25*9 = 225 параметров, а каждый выходной признак являлся бы взвешенной суммой всех признаков на входе. Свертка позволяет произвести такую операцию с всего 9-ю параметрами, ведь каждый признак на выходе получается анализом не каждого признака на входе, а только одного входного, находящегося в “примерно том же месте”. Обратите на это внимание, так как это будет иметь важное значение для дальнейшего обсуждения.

Часто используемые техники

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

padding нейронной сети
Padding

Padding. Если вы наблюдаете анимацию, обратите внимание на то, что в процессе скольжения края по существу обрезаются, преобразуя матрицу признаков размером 5*5 в матрицу 3*3. Крайние пиксели никогда не оказываются в центре ядра, потому что тогда ядру не над чем будет скользить за краем. Это совсем не идеальный вариант, так как мы хотим чтобы чаще размер на выходе равнялся входному.

Padding добавляет к краям поддельные (fake) пиксели (обычно нулевого значения, вследствии этого к ним применяется термин “нулевое дополнение” — “zero padding”). Таким образом, ядро при проскальзывании позволяет неподдельным пикселям оказываться в своем центре, а затем распространяется на поддельные пиксели за пределами края, создавая выходную матрицу того же размера что и входная.    

striding сверточная нейронная сеть
Свертка с шагом 2

Striding. Часто бывает, что при работе со сверточным слоем, нужно получить выходные данные меньшего размера, чем входные. Это обычно необходимо в сверточных нейронных сетях, где размер пространственных размеров уменьшается при увеличении количества каналов. Один из способов достижения этого — использование субдискритизирующих слоев (pooling layer) (например, принимать среднее/максимальное значение каждой ветки размером 2*2, чтобы уменьшить все пространственные размеры в два раза). Еще один способ добиться этого — использовать stride (шаг).

Идея stride заключается в том, чтобы пропустить некоторые области над которыми скользит ядро. Шаг 1 означает, что берутся пролеты через пиксель, то есть по факту каждый пролет является стандартной сверткой. Шаг 2 означает, что пролеты совершаются через каждые два пикселя, пропуская все другие пролеты в процессе и уменьшая их количество примерно в 2 раза, шаг 3 означает пропуск 3-х пикселей, сокращая количество в 3 раза и т.д.

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

Многоканальная версия сверточной нейронной сети

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

rgb каналы
В большинстве случаев мы имеем дело с изображениями RGB с тремя каналами

Вот где ключевые различия между терминами становятся нужными: тогда как в случае с 1 каналом, где термины фильтр и ядро взаимозаменяемы, в общем случае они разные.

сверточная нейронная сеть - работа

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

Каждый фильтр в сверточном слое создает только один выходной канал и делают они это так: каждое из ядер фильтра «скользит» по их соответствующим входным каналам, создавая обработанную версию каждого из них. Некоторые ядра могут иметь больший вес, чем другие, для того чтобы уделять больше внимания определенным входным каналам (например, фильтр может иметь красный канал ядра с большим весом, чем другие каналы, и, следовательно, больше реагировать на различия в образах из красного канала).

Каналы свертки

Затем каждая из обработанных в канале версий суммируется вместе для формирования одного канала. Ядра каждого фильтра генерируют одну версию каждого канала, а фильтр в целом создает один общий выходной канал:

Операции сверточной нейронной сети

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

Конечный выходной канал

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

Параметры в сверточной нейронной сети

Свертка — это по-прежнему линейное преобразование

Даже с уже описанной механикой работы сверточного слоя, все еще сложно связать это с нейронной сетью прямого распространения (feed-forward network), и это все еще не объясняет, почему свертки масштабируются и работают намного лучше с изображениями.

Предположим, что у нас есть вход 4*4, и мы хотим преобразовать его в сетку 2*2. Если бы мы использовали feed-forward network, мы бы переделали вход 4*4 в вектор длиной 16 и передали его через плотно связанный слой с 16 входами и 4 выходами. Можно было бы визуализировать весовую матрицу W для слоя по типу:

матрицы весов

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

Если бы мы использовали ядро K размера 3 на видоизмененным входом размера 4*4, чтобы получить выход 2*2, эквивалентная матрица перехода будет выглядеть так:

матрица весов сверточной нейронной сети
Примечание: в то время как приведенная матрица является эквивалентной матрицей перехода, фактическая операция обычно реализуется как совсем иное матричное умножение

Свертка, в целом, все еще является линейным преобразованием, но в то же время она также представляет собой совершенно иной вид преобразования. Для матрицы с 64 элементами существует всего 9 параметров, которые повторно используются несколько раз. Каждый выходной узел получает только определенное количество входов (те, что находятся внутри ядра). Нет никакого взаимодействия с другими входами, так как вес для них равен 0.

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

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

Вам не нужно оптимизировать все 64 параметра, потому большинство из них установлено на ноль (и они останутся такими), а остальные мы преобразуем в общие параметры и в результате получим только 9 параметров для оптимизации. Эта эффективность имеет значение, потому что, когда вы переходите от 784 входов MNIST к реальным изображениям 224*224*3, это более 150 000 входов. Плотный слой, пытающийся вдвое уменьшить вход до 75 000 входных значений, по-прежнему потребует более 10 миллиардов параметров. Для сравнения, в целом ResNet-50 имеет около 25 миллионов параметров.

Таким образом, фиксирование некоторых параметров к нулю и их связывание повышает эффективность, но в отличие от случая с transfer learning, где мы знаем, что prior работает грамотно, потому что он работает с большим общим набором изображений, откуда мы знаем, что это будет работать хоть сколько-то хорошо?

Ответ заключается в комбинациях образов, изучаемых параметрами за счет prior.

Локальные особенности

Итак:

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

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

Если это были какие-то другие данные, например, данные о установках приложений по категориям, то это стало бы катастрофой, потому что количество столбцов установки приложений и типов приложений рядом друг с другом не означает, что у них есть «локальные общие признаки», общие с датами установки приложений и временем использования. Конечно, у четырех могут быть основные признаки более высокого уровня (например, какие приложения люди хотят больше всего), которые могут быть найдены, но это не дает нам никаких оснований полагать, что параметры для первых двух точно такие же, как параметры для последних двух. Эти четверо могли быть в любом (последовательном) порядке и по-прежнему быть подходящими!

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

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

                                       Применение ядра, детектирующего грани
Применение ядра, детектирующего грани

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

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

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

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

 

После 2-й и 3-й свертки
После 2-й и 3-й свертки

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

Тем не менее, как бы глубоки ни заходили наши детекторы признаков, без каких-либо дальнейших изменений они все равно будут работать на очень маленьких участках изображения. Независимо от того, насколько глубоки ваши детекторы, вы не сможете обнаружить лица в сетке 3*3. И вот здесь возникает идея рецептивного поля (receptive field).

Рецептивные поля

Существенной особенностью архитектур сверточной нейронной сети является то, что размеры ввода становятся все меньше и меньше от начала до конца сети, а количество каналов становится больше. Это, как упоминалось ранее, часто делается с помощью strides или pooling layers. Местность определяет, какие входные данные из предыдущего уровня будут на выходе следующего. Receptive field определяет, какую область исходного входа получает выход.

Идея strided convolution состоит в том, что мы обрабатываем пролеты только на фиксированном расстоянии друг от друга и пропускаем те что посередине. С другой точки зрения, мы оставляем только выходы на определенном расстоянии друг от друга, удаляя остальные.

применение сверточной нейросети
Свертка 3*3, шаг 2

Затем мы применяем нелинейность к выходном данным, затем накладываем еще один новый слой свертки сверху. Здесь все становится интересным. Даже если бы мы применили ядро того же размера (3*3), имеющее одну и ту же локальную область, к выходу strided convolution, ядро имело бы более эффективное receptive field.

рецептивные поля сверточная нейронная сеть

Это связано с тем, что выход strided слоя по-прежнему представляет из себя одно и то же изображение. Это не столько обрезка, сколько изменение размера, только теперь каждый отдельный пиксель в выходе является «представителем» большей площади (другие пиксели которой были отброшены) из того же местоположения исходного ввода. Поэтому, когда ядро следующего слоя применяется к выходу, оно работает с пикселями, собранными из большей области.

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

работа сверточной нейронной сети на примере
Визуалицая усложнения после добавления слоев

Такое расширение восприимчивого поля позволяет слоям свертки сочетать признаки низкого уровня (линии, ребра) с признаками более высокого уровня (кривые, текстуры), как мы видим в слое mixed3a.

Вслед за слоем pooling/striding сеть продолжает создавать детекторы для еще более высокоуровневых признаков (частей, шаблонов), как мы видим на mixed4a.

Повторное уменьшение размера изображения к 5-му блоку сверток дает размеры ввода всего 7*7, по сравнению с входами 224*224. В этот момент каждый отдельный пиксель представляет собой огромную сетку размером 32*32 пикселя.

Если на более ранних слоях активация обнаруживала грани, то здесь активация на сетке 7*7 нужна для выявления более сложных образов, например, птиц.

Сеть в целом развивается из небольшого количества фильтров (64 в случае GoogLeNet), обнаруживая функции низкого уровня, до очень большого количества фильтров (1024 в окончательной свертке), каждый из которых ищет чрезвычайно специфические признаки высокого уровня. И далее применяется окончательный слой — pooling layer, который сворачивает каждую сетку 7*7 в один пиксель, каждый канал является детектором признаков с receptive field, эквивалентным всему изображению.

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

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

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

Проблема adversarial attacks

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

Для человека очевидно, что на обоих картинках изображена панда. Для компьютера - не совсем.
Для человека очевидно, что на обоих картинках изображена панда. Для компьютера — не совсем

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

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

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

Нейросеть обнаруживает нарушения прав человека на фотографиях

18 мая 2018
Human Rights Violations Recognition in Images Using CNN Features

Нейросеть обнаруживает нарушения прав человека на фотографиях

Нарушения прав человека происходили на протяжении всей истории человечества, сегодня это уже устоявшееся понятие — в 1948 году была принята конвенция ООН о правах человека. К нарушению этих прав относятся действия, которые…

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

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

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

База данных нарушений прав человека

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

  1. Новый датасет о нарушениях прав человека, содержащий 3 тыс. изображений для 8 категорий нарушений.
  2. Оценка возможности представлений глубоких объектно-ориентированных СНС (сверточных нейронных сетей) и сценоцентричных СНС для распознавания нарушений прав человека.
  3. Признание нарушений прав человека путем объединения объектно-ориентированных и сценически-ориентированных функций СНС по различным механизмам слияния.
  4. Оценка влияния разного рода механизмов слияния функций для распознавания нарушений прав человека.

Датасет

Human Rights Violations Database

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

База данных прав человека (БДПЧ), которая содержит 3 тыс. фотографий с фактами нарушений прав человека, зафиксированных в реальных ситуациях и окружениях, разделена на восемь семантических категорий и один дополнительный класс — «без нарушений».

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

Проблема решаема — публичные хранилища неправительственных организаций (НПО) содержат достаточный набор данных.

Первой неправительственной организацией считается Human Rights Watch, которая предлагает онлайн-платформу для средств массовой информации, содержащую факты нарушений прав человека и международного гуманитарного права в виде фоторепортажей, видео, спутниковых снимков и аудиоклипов. Онлайн-хранилище Human Rights Watch содержит девять тем в контексте нарушений прав человека: оружие, бизнес, права детей, инвалидность, здоровье и права человека, международное правосудие, ЛГБТ, права беженцев, права женщин и 49 подкатегорий. В базе данных сразу обнаруживается один недостаток — на видеофайлах присутствует “водяной знак”. В результате записанные изображения, которые первоначально содержали “водяной знак”, пришлось обрезать.

После этапа обрезки авторы получили цветные изображения размером 600 на 900 пикселей или более. В дополнение к этим изображениям добавляются фоторесурсы, доступные для каждой темы и подкатегорий, что приводит к 342 изображениям в окончательном массиве. Пайплайн, используемый для сбора и обработки изображений из архива Human Rights Watch, показан на рисунке 1.

Search mechanism
Рисунок 1

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

В последнем датасете содержится набор из 8 категорий нарушений прав человека и 2847 изображений. 367 готовых изображений загружаются из двух онлайн репозитариев, составляющих 12,88% датасета, а остальные 2480 изображений скринятся из видеороликов, которые загружены на медиа-платформу Human Rights Watch. Окончательный датасет состоит из восьми категорий:

  1. Оружие
  2. Детский труд
  3. Браки с несовершеннолетними
  4. Содержание под стражей
  5. Права инвалидов
  6. Переселенные народы
  7. Окружающая среда
  8. Непосещение школ

Как это работает

Учитывая впечатляющую эффективность в классификации у глубоких сверточных нейронных сетей, используются три современных объектно-ориентированных СНС-архитектуры, ResNet50, VGG 16 и VGG 19 со сверточным слоем, а затем тонко настраивают их на HRA (Human Rights Awareness) для создания базовых моделей СНС.

Transfer learning используется для внедрения технологий из других методов путем развертывания весов и параметров из предобученной сети к новой.

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

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

Network architecture for high-level feature extraction

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

Результаты

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

Perfomance metric

На рисунке 3 показаны наилучшим образом предсказанные результаты, выполненные HRA-CNN, VGG19. Конечно, метод не дает возможность отличить, было ли нарушение прав человека совершено в последний момент или задолго до того, как были сделана фотографии или снято видео. Будущее развитие базы данных HRA будет зависеть от того, насколько четко исследователи смогут научить нейросеть выявлять нарушения в автоматическом режиме. В противном случае, без экспертной оценки все равно не обойтись, но круг материалов будет снижен.

Датасет HRA создается с изображениями in-the-wild, содержащими действия, которые нарушают права человека. Современные алгоритмы глубокого обучения решают проблемы распознавания нарушений прав человека, используя этот датасет и двухфазную схему с переносом. Технология, способная выявлять нарушения прав человека так же точно, как люди, автоматизирует работу комиссий по делам о нарушениях прав человека.

Перевод — Айсылу Фарвазова