After I've built the docker image and run it, I've discovered some problems with keras library which is required by fawkes. I'm not sure, but maybe it could be fixed by specifying specific keras package version in reuirements.txt
.
Then it start to work.
Traceback (most recent call last):
File "/usr/local/bin/fawkes", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/fawkes/protection.py", line 201, in main
separate_target=args.separate_target, debug=args.debug, no_align=args.no_align)
File "/usr/local/lib/python3.7/site-packages/fawkes/protection.py", line 92, in run_protection
image_paths, loaded_images = filter_image_paths(image_paths)
File "/usr/local/lib/python3.7/site-packages/fawkes/utils.py", line 119, in filter_image_paths
img = load_image(p)
File "/usr/local/lib/python3.7/site-packages/fawkes/utils.py", line 109, in load_image
image_array = image.img_to_array(img)
AttributeError: module 'keras.preprocessing.image' has no attribute 'img_to_array'
Traceback (most recent call last):
File "/usr/local/bin/fawkes", line 8, in <module>
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/fawkes/protection.py", line 201, in main
separate_target=args.separate_target, debug=args.debug, no_align=args.no_align)
File "/usr/local/lib/python3.7/site-packages/fawkes/protection.py", line 128, in run_protection
protected_images = generate_cloak_images(self.protector, original_images)
File "/usr/local/lib/python3.7/site-packages/fawkes/protection.py", line 30, in generate_cloak_images
cloaked_image_X = protector.compute(image_X, target_emb)
File "/usr/local/lib/python3.7/site-packages/fawkes/differentiator.py", line 169, in compute
target_imgs[idx:idx + self.batch_size] if target_imgs is not None else None)
File "/usr/local/lib/python3.7/site-packages/fawkes/differentiator.py", line 248, in compute_batch
optimizer.apply_gradients(zip(grad, [self.modifier]))
File "/usr/local/lib/python3.7/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1140, in apply_gradients
return super().apply_gradients(grads_and_vars, name=name)
File "/usr/local/lib/python3.7/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 634, in apply_gradients
iteration = self._internal_apply_gradients(grads_and_vars)
File "/usr/local/lib/python3.7/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1169, in _internal_apply_gradients
grads_and_vars,
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/distribute/merge_call_interim.py", line 51, in maybe_merge_call
return fn(strategy, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1217, in _distributed_apply_gradients_fn
var, apply_grad_to_update_var, args=(grad,), group=False
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py", line 2637, in update
return self._update(var, fn, args, kwargs, group)
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py", line 3710, in _update
return self._update_non_slot(var, fn, (var,) + tuple(args), kwargs, group)
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py", line 3716, in _update_non_slot
result = fn(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/tensorflow/python/autograph/impl/api.py", line 595, in wrapper
return func(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 1213, in apply_grad_to_update_var
return self._update_step(grad, var)
File "/usr/local/lib/python3.7/site-packages/keras/optimizers/optimizer_experimental/optimizer.py", line 217, in _update_step
f"The optimizer cannot recognize variable {variable.name}. "
KeyError: 'The optimizer cannot recognize variable Variable:0. This usually means you are trying to call the optimizer to update different parts of the model separately. Please call `optimizer.build(variables)` with the full list of trainable variables before the training loop or use legacy optimizer `tf.keras.optimizers.legacy.{self.__class__.__name__}.'