У меня есть модель keras (CNN с окончательным softmax), которая является классификатором изображений RGB.На выходе модели представлены 5 возможных категорий для входных изображений (в горячем виде).Я пытаюсь сгенерировать состязательные изображения для моей модели керас с помощью Cleverhans ( Библиотека тензорного потока ).
Упрощенная версия моего кода, которая генерирует одно состязательное изображение:следующее:
# model is the CNN keras model
wrap = KerasModelWrapper(model)
fgsm = FastGradientMethod(wrap, sess=session)
fgsm_params = {'eps': 16. / 256,
'clip_min': 0.,
'clip_max': 1.
}
x = tf.placeholder(tf.float32, shape=(None, img_rows, img_cols,
nchannels))
adv_x = fgsm.generate(x, **fgsm_params)
# original image is a tensor containing only one RGB image, shape=(1,48,48,3)
adv_image = adv_x.eval(session=session, feed_dict={x: original_image})
Глава 1, eps
Насколько я понимаю, 'eps' FGM-параметр - это шаг изменения ввода (минимумизменить на одно значение изображения / пиксель).
Я заметил, что окончательный результат сильно зависит от eps , иногда мне нужно высокое значение eps , чтобы получитьэффективное состязательное изображение, изображение, которое эффективно меняет метку категории по отношению к исходному изображению.
При низком eps иногда FGM не может получить рабочее изображение соперника, т. Е. Имея изображение O с меткой l O FGM не может создать изображение соперника O 'сl O '! = l O , например, для l O = [0,0,1,0,0] мы по-прежнему получаем l O ' = [0,0,1,0,0], не удалось сгенерировать изображение соперника с другой меткой.
Вопросы (извините, проблема требует набора вопросов):
- Всегда ли FGM обнаруживает рабочее изображение соперника?т. е. это нормально, что FGM дает сбой?
- Есть ли способ получить оценочное качество сгенерированного состязательного изображения (без прогнозирования с помощью модели)?
- Почему значение шага eps такважно?
- Самое важное: Есть ли способ сообщить FGM, чтобы он пытался более тщательно искать изображение соперника (например, несколько шагов)?
Глава 2, y, y_target
Я также экспериментировал с параметрами y и y_target .Можете ли вы также объяснить мне, каковы параметры 'y'
, 'y_target'
?
Я думал, что 'y_target'
говорит о том, что мы хотим создать изображение соперника, которое нацелено на определенную категорию.Например, я думал, что y_target = [[0,1,0,0,0]]
в feed_dict
должно заставить генерировать состязательное изображение, которое классифицируется по 2-му классу из модели.
- Я прав?.. или
- я что-то пропустил?
Ps: моя проблема в том, что установка y_target не дает изображения для состязаний.
, пожалуйста, дайте мне несколько советов ..;-) С уважением