逆向工程以查找 python 库中给定操作的执行位置

Reverse Engineering to find where a given operation in a python library is executed

https://github.com/Trusted-AI/adversarial-robustness-toolbox/blob/main/notebooks/expectation_over_transformation_classification_rotation.ipynb 上有一个有趣的笔记本,可以在图像也旋转时执行对抗性攻击。

但是,我想编辑转换以包括 其他转换。

从代码中可以看出,为旋转导入了以下class:

from art.preprocessing.expectation_over_transformation import EoTImageRotationTensorFlow

eot_rotation = EoTImageRotationTensorFlow(nb_samples=eot_samples,
                                      clip_values=clip_values,
                                      angles=eot_angle)

然后,攻击使用有关 EOTImageRotationTensorflow class 的信息来攻击图像

classifier_eot = TensorFlowV2Classifier(model=model,
                                    nb_classes=nb_classes,
                                    loss_object=loss,
                                    preprocessing=preprocessing,
                                    preprocessing_defences=[eot_rotation],
                                    clip_values=clip_values,
                                    input_shape=input_shape)

attack_eot = ProjectedGradientDescent(estimator=classifier_eot,
                                  eps=eps,
                                  max_iter=num_steps,
                                  eps_step=eps_step,
                                  targeted=True)

当我在/usr/local/lib/python3.8/dist-packages/art/preprocessing/expectation_over_transformation/image_rotation/tensorflow.py中检查这样一个class时,我看到有一个执行旋转的函数。

def _transform(
    self, x: "tf.Tensor", y: Optional["tf.Tensor"], **kwargs
) -> Tuple["tf.Tensor", Optional["tf.Tensor"]]:
    """
    Transformation of an input image and its label by randomly sampled rotation.

    :param x: Input samples.
    :param y: Label of the samples `x`.
    :return: Transformed samples and labels.
    """
    import tensorflow as tf  # lgtm [py/repeated-import]
    import tensorflow_addons as tfa

    # pylint: disable=E1120,E1123
    angles = tf.random.uniform(shape=(), minval=self.angles_range[0], maxval=self.angles_range[1])
    angles = angles / 360.0 * 2.0 * np.pi
    x_preprocess = tfa.image.rotate(images=x, angles=angles, interpolation="NEAREST", name=None)  
    x_preprocess = tf.clip_by_value(
        t=x_preprocess, clip_value_min=-self.clip_values[0], clip_value_max=self.clip_values[1], name=None
    )
    return x_preprocess, y

理论上,我可以简单地更改 _transform() 函数来进行我想要的转换。

但是,这样的功能不是用来旋转图像的,我什至可以删除重新运行算法没有任何反应的功能我什至创建了一个 python for 循环来打开艺术库中的所有 python 文件 并搜索关键字 rotate 但甚至 评论这些条目算法运行没有问题

因此,我相信旋转发生在某个地方,我根本不知道它在哪里。。这是我进行逆向工程并找到执行旋转的确切位置的任何方式吗?

一种选择是在函数中添加一个故意的错误,例如 0/0(除以零)。这会告诉你它是否被调用,以及来自哪里...