Обзор и понимание статьи «Фоукс: защита конфиденциальности от несанкционированных моделей глубокого обучения» для защиты от несанкционированного распознавания лиц.

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

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

Чтобы понять, как работает эта система, нам нужно понять, как работает наивная система распознавания лиц.

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

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

Как работает Фоукс?

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

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

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

Насколько хорошо это работает?

Исследователи протестировали свою систему с помощью Microsoft Azure Face API, Amazon Rekognition и Face ++, где они смогли добиться 100% защиты, если все изображения, присутствующие в наборе данных, были замаскированы. Однако точность падает примерно до 15%, если только 40% изображений были замаскированы.

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

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

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

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

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

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

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

Они открыли исходный код своего кода в этом репозитории GitHub, а также имеют веб-сайт проекта с более подробной информацией.

Как использовать?

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

pip install fawkes
fawkes -d /content/imgs --mode high 
#change mode with min, low, med, or high as per requirement

Играя вокруг

Я также измерил PSNR и SSIM исходного изображения и замаскированного изображения, используя следующий код:

import cv2
from skimage.metrics import structural_similarity as SSIM
psnr = cv2.PSNR(orig, cloak, 255)
ssim = SSIM(orig, cloak, multichannel=True)

Результаты, достижения:

Minimum cloak - PSNR: 44.033, SSIM: 0.995
Low cloak - PSNR: 43.012, SSIM: 0.994
Medium cloak - PSNR: 41.699, SSIM: 0.992
High Cloak - PSNR: 38.933, SSIM: 0.989

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

import cv2
import numpy as np
orig = cv2.imread('Paris.jpg')
cloak = cv2.imread('Paris_low_cloaked.png')
orig = orig.astype(np.int16)
cloak = cloak.astype(np.int16)
r = abs(cloak[:, :, 2] - orig[:, :, 2])
g = abs(cloak[:, :, 1] - orig[:, :, 1])
b = abs(cloak[:, :, 0] - orig[:, :, 0])
diff_color = abs(cloak - orig)
ret, diff_color = cv2.threshold(diff_color, 1, 225, cv2.THRESH_BINARY)
ret, r = cv2.threshold(r, 1, 225, cv2.THRESH_BINARY)
ret, g = cv2.threshold(g, 1, 225, cv2.THRESH_BINARY)
ret, b = cv2.threshold(b, 1, 225, cv2.THRESH_BINARY)
orig = orig.astype(np.uint8)
cloak = cloak.astype(np.uint8)
r = r.astype(np.uint8)
g = g.astype(np.uint8)
b = b.astype(np.uint8)
diff_color = diff_color.astype(np.uint8)
diff_bw = cv2.bitwise_or(r, g)
diff_bw = cv2.bitwise_or(diff_bw, b)

Это показывает, что основные изменения происходят вблизи области лица, поэтому давайте выясним PSNR и SSIM для области лица. Я буду использовать SSD-детектор, доступный с модулем DNN OpenCV, чтобы найти лица. Обсуждение этого выходит за рамки данной статьи. Чтобы узнать больше об этом или его коде, вы можете обратиться к статье, указанной ниже, или взглянуть на этот репозиторий GitHub.



Minimum cloak - PSNR: 38.184, SSIM: 0.979
Low cloak - PSNR: 36.553, SSIM: 0.972
Medium cloak - PSNR: 34.759, SSIM: 0.960
High Cloak - PSNR: 32.077, SSIM: 0.944

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

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