Мой пост в прошлом месяце объяснил задачу Facebook по обнаружению дипфейков и создал новые рамки лица с помощью OpenCV и GAN (генератора и дискриминатора).
Все пошло быстро!

Планирование следующих шагов

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

Один актер, одна сцена

Сцена снимается перед дверью и имеет шесть альтернативных лиц. Задача связана с двумя методами дипфейка (названными Методом А и Методом Б), и один из альтернативных вариантов присутствует в обоих методах.

Я решил использовать OpenCV, чтобы обрезать область вокруг головы актера. Я выбираю разные 240 кадров исходного видео и 80 последующих кадров трех фальшивых лиц, поэтому обучающие данные будут сбалансированы и не будут иметь идентичных кадров для сравнения.

Я сделал двоичный классификатор, который, по словам TensorFlow, был очень точным, но инструмент изображения, который я использовал, ожидал многоклассового вывода от ImageNet. После попытки подделать вывод ImageNet я подумал о переходе на ELI5, но у него возникли трудности с работой с разными слоями из TensorFlow и Keras.

Начните с конвейера, который работает

Я хочу перенести изображения в двоичный классификатор и вывести прогноз из некоторой структуры объяснимого ИИ. Я наткнулся на shap для значений Шепли. Я начал с их примера Imagenet, который работает, как и было обещано:

Следующим моим шагом было поменять местами мои видеокадры в качестве исходных данных. Imagenet ожидает входное изображение 224x224, поэтому я изменил размер одного кадра из оригинального и поддельного источников.
Image.open("./mlin/training/originals/face38.jpg").resize((224, 224), Image.ANTIALIAS)

В стране Imagenet эти изображения соответствовали «абайе» или другим предметам одежды.

Обучение пользовательского классификатора изображений

Я искал классификатор изображений Keras и нашел это руководство.
Вставив эту модель в наш существующий код, я сначала был впечатлен — данные обучения точны на 75–85%! Затем я увидел, что кадры проверки были не такими точными.

Выборка из двух проверочных кадров (исходное лицо слева, дипфейк справа) намекает на две проблемы:

  1. Положение двери и свет вокруг головы актера включены в качестве важных данных о пикселях.
  2. Классификатор ожидает, что лицо находится в постоянном положении, вероятно, из первых кадров видео.

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

Разнообразие пикселей

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

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

Идти вперед

Текущий код находится здесь (блокнот CoLab плохо делится) https://gist.github.com/mapmeld/0730b9e3e9a7baf68b937c30ff04e9a9

Я нашел конвейер для обучения нейронной сети и объяснения результатов с помощью карты изображений SHAP. Это позволит мне подтвердить, что окончательный детектор дипфейков проверяет лица пользователей, а не постороннюю информацию на фоне. Как бы то ни было, я не уверен, что мои тренировочные рамки были достаточно разнообразны. Иногда я смотрю на слой 7 или 8 с моей картой изображений SHAP, и он выглядит по-другому. Иногда я перезапускаю код и не могу создать красочную карту изображений. В будущем я постараюсь больше понять, что там происходит внутри. Я сделаю больше кадров для будущего обучения и проверки.