#tensorflow #face-recognition #cleverhans
#tensorflow #распознавание лиц #cleverhans
Вопрос:
Я пытаюсь следить за этим блогомhttps://brunolopezgarcia.github.io/2018/05/09/Crafting-adversarial-faces.html для создания состязательных изображений лиц в Facenet. Код здесьhttps://github.com/tensorflow/cleverhans/tree/master/examples/facenet_adversarial_faces и работает отлично! Мой вопрос в том, как я могу экспортировать эти состязательные изображения. Этот вопрос слишком простой, поэтому в блоге он не упоминается, а показаны только некоторые примеры изображений.
Я подумал, что это не сложная проблема, поскольку я знаю, что сгенерированные состязательные образцы находятся в «adv». Но это adv (float32) пришло из faces1 после предварительного отбеливания и нормализации. Чтобы восстановить изображения int8 из adv (float32), я должен отменить процесс нормализации и предварительного отбеливания. Похоже, что если мы хотим вывести некоторые изображения из facenet, мы должны выполнить этот процесс.
Я новичок в Facenet и Cleverhans, я не уверен, лучший ли это способ сделать это, или это обычный способ (например, функции) для людей экспортировать изображения из Facenet.
В facenet_fgsm.py мы, наконец, получили состязательные образцы. Мне нужно экспортировать adv в простые изображения int. adv = sess.run(adv_x, feed_dict=feed_dict)
В set_loader.py . Есть своего рода нормализация.
def load_testset(size):
# Load images paths and labels
pairs = lfw.read_pairs(pairs_path)
paths, labels = lfw.get_paths(testset_path, pairs, file_extension)
# Random choice
permutation = np.random.choice(len(labels), size, replace=False)
paths_batch_1 = []
paths_batch_2 = []
for index in permutation:
paths_batch_1.append(paths[index * 2])
paths_batch_2.append(paths[index * 2 1])
labels = np.asarray(labels)[permutation]
paths_batch_1 = np.asarray(paths_batch_1)
paths_batch_2 = np.asarray(paths_batch_2)
# Load images
faces1 = facenet.load_data(paths_batch_1, False, False, image_size)
faces2 = facenet.load_data(paths_batch_2, False, False, image_size)
# Change pixel values to 0 to 1 values
min_pixel = min(np.min(faces1), np.min(faces2))
max_pixel = max(np.max(faces1), np.max(faces2))
faces1 = (faces1 - min_pixel) / (max_pixel - min_pixel)
faces2 = (faces2 - min_pixel) / (max_pixel - min_pixel)
В facenet.py функция load_data, есть предварительный процесс.
nrof_samples = len(image_paths)
images = np.zeros((nrof_samples, image_size, image_size, 3))
for i in range(nrof_samples):
img = misc.imread(image_paths[i])
if img.ndim == 2:
img = to_rgb(img)
if do_prewhiten:
img = prewhiten(img)
img = crop(img, do_random_crop, image_size)
img = flip(img, do_random_flip)
images[i,:,:,:] = img
return images
Я надеюсь, что какой-нибудь эксперт может указать мне какую-нибудь скрытую функцию в facenet или cleverhans, которая может напрямую экспортировать изображения adv, в противном случае обратная нормализация и процесс предварительного отбеливания кажутся неправильными. Большое вам спасибо.
Ответ №1:
Я мало что знаю о коде Facenet. Из вашего обсуждения кажется, что вам придется сохранить значения функции min_pixel,
max_pixel to reverse the normalization, and then look at the
prewhiten`, чтобы посмотреть, как вы можете ее отменить. Я отправлю Бруно электронное письмо, чтобы узнать, есть ли у него какие-либо дополнительные комментарии, которые могли бы вам помочь.
Ответ №2:
РЕДАКТИРОВАТЬ: Теперь экспорт изображений включен в пример Facenet для Cleverhans: https://github.com/tensorflow/cleverhans/commit/08f6fb9cf2a7f199467d5ed60179fc3ae9140458