Yes, the name image2 gets assigned a new tensor (the result of the computation on the rhs).
If you want to keep the gradient, you would need to use an inplace operation (with all that entails) à la
with torch.no_grad():
  image2.copy_(image + epsilon*sign_data_grad)

(or add_ or += if you actually want to only add to image2).
Best regards
Thomas