【发布时间】:2019-01-12 21:28:53
【问题描述】:
我会尽力在这里提供一个可重现的例子。
我有一张图片:
这张 Aaron Eckhart 的图片是(150, 150)
我的目标是通过对像素进行数学运算来扰乱该图像的 ROI,但是,问题是数学必须作为张量流张量来完成,因为要完成的数学运算是将张量乘以它的缩放梯度(也是一个大小为 (row_pixels, column_pixels, 3) 的张量)
所以这是我想象的过程:
-
在图像中读取为 numpy 数组 RGB 大小:(1, 150, 150, 3) (1 是批处理 大小)
w, h = img.shaperet = np.empty((w, h, 3), dtype=np.uint8)ret[:, :, 0] = ret[:, :, 1] = ret[:, :, 2] = img -
使像素值介于 0 和 1 之间
img = (faces1 - min_pixel) / (max_pixel - min_pixel) for i in range(steps):
(a) 提取图像的ROI 这是我不明白怎么做的部分
(b) 计算较小img ROI张量损失的梯度
loss = utils_tf.model_loss(y, preds, mean=False)
grad, = tf.gradients(loss, x)
(c) 将 img ROI 张量乘以损失梯度
scaled_grad = eps * normalized_grad
adv_img = img + scaled_grad
(d) 将这个新扰动的 ROI 张量放回原来张量中的相同位置这是我不明白该怎么做的另一部分
这将导致图像中只有一些像素值受到干扰,其余的保持不变
【问题讨论】:
-
我假设您的意思是感兴趣区域 (ROI)。几行就不容易回答了。直接在 Tensorflow 中查看 github.com/deepsense-ai/roi-pooling 中的一些示例。我在 TF 中没有这样做,但在 OpenCV 中它相当简单。如果你想要一个例子,请告诉我
-
@geekonedge 是的,我的意思是感兴趣的区域。不幸的是,我认为我需要将其作为张量来执行,否则它会大大降低算法的速度。因为要使用openCV来做到这一点,我想我必须将张量转换为numpy数组,然后应用openCV ROI,然后转换回张量,进行渐变,应用变换,再次转换回numpy数组,将其放回图像中,然后转换回张量
-
不幸的是,我不知道您当前的管道,但我怀疑它需要那么复杂。如果你有原始图像格式,你总是可以在 opencv 处理后将区域存储在文本文件中,并将其作为数据的特征,一旦作为张量导入,你就不必进行任何转换。万事如意!
标签: python tensorflow image-processing