我有超过一百万张我想用作训练数据的图像。如何在不损害安全性的情况下免费提供这些数据?
我希望用户能够快速将其用于培训目的,而又不给黑客提供机会从开源数据重建图像。同时,我不希望培训质量受到任何影响。
换句话说,我如何安全地开源图像?
例如此代码生成numpy数组。在这种情况下,我只想让从ndarray“ x”重建原始图像变得非常困难。
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
i = load_img('some_image.jpg' )
x = img_to_array(i)
x = x.reshape((1,) + x.shape)
一旦我知道黑客无法使用数据并创建相同的映像,我就可以共享数组x。
答案 0 :(得分:6)
如果您打算发布开源图片,那么一个很好的开始就是了解WikiCommons的工作方式。他们曾经并且必须面对许多挑战,那里有很多东西可以学习。
如果您的听众需要提供完整的图片来使他们的模型正常工作,那么无论您如何尝试使包含数据的数组都变得模糊不清。具有足够时间和创造力的聪明人将能够重建原始图片。这不是一个可行的解决方案,只能提供一种错误的安全感。
如果您选择破坏性的方法,而不是提供实际的图片,而是对其进行一些摘要/哈希/指纹处理,那么您可能会降低重建原始图片的风险(请注意,有非常聪明的人具有很强的加密技能)。但是随后您的听众将无法从图片本身中学习,因此您可能无法实现目标。
破坏性较小,可能不符合您的要求:增加噪音。它不会阻止敏感材料的泄漏(人眼和大脑在某种程度上可以很好地进行分类),并且是AI confusion的一种众所周知的技术。也不是一个好的解决方案。
无论如何,如果您在没有护理的情况下提供了不适合开源的敏感材料,那么您可能会给自己和其他人带来麻烦。这不是一个好选择。
我的建议
答案 1 :(得分:0)
所有机器学习算法都会拍摄真实图像,并将图像转换为张量,然后分批处理(一次处理多个图像)。
为您提供的选项组合:
但是在所有这些情况下,不想要的人都可以以某种方式猜测您的程序/混淆。
理想的做法是根据您的图像创建机器学习模型(例如VGG,ResNet,Inception),然后分发您的模型,以便从图像中学习计划。
最重要的是,在ML中,您需要图像来向他们学习一些东西,而不是图像本身。
从这个document可以看到,隐私确实是一个问题,涉及版权如何导致公共数据集的衰败。
由于隐私确实很重要,因此没有很多解决方案。但是,带有GANs的想法可能令人鼓舞。
如果您不使用GAN,则很难说出您需要进行哪些正确的转换才能摆脱隐私政策的顾虑。
仅当您尝试翻转图像,缩放图像,删除元数据,对其进行规范化或变换一个像素是不够的。您需要使它们与原件没有区别。