8.1.3 对比度和亮度对鲁棒性的影响
8.1.3 对比度和亮度对鲁棒性的影响
在处理图像时,通过对像素值大小的适当调整也可以达到类似效果。采用按像素的方式改变图像对比度和亮度,公式如下:
f(x')=αf(x)+β
其中α调整的是对比度,值越大对比度越大;β调整的是亮度,值越大亮度越大。下面我们结合实际的例子来介绍对比度和亮度对鲁棒性的影响,对应的代码路径为:
https://github.com/duoergun0729/adversarial_examples/blob/master/code/8-
case3-cw.ipynb
下面我们调整对抗样本的亮度,调整范围为–200到+200,每次增加10,并记录下亮度调整值和对抗样本预测为熊猫及定向攻击目标的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#验证亮度对于对抗样本的影响
std_range = range(-200,200,10)
adv_288_pro = []
adv_388_pro = []
for i in std_range:
#记录下亮度调整值和对抗样本预测为熊猫及定向攻击目标的概率
brightness_adv_img=np.clip((adv.copy()+i),0,255)
pro_388=infer_img(brightness_adv_img.copy(),388)
pro_288=infer_img(brightness_adv_img.copy(),288)
print("std={} pro[388]={} pro[288]={}".format(i,pro_388,pro_288))
adv_288_pro += [pro_288]
adv_388_pro += [pro_388]
#横轴代表亮度调整值,纵轴代表预测概率
#实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_288_pro), 'b--', label=
'probability of class 288')
ax.plot(np.array(std_range), np.array(adv_388_pro), 'r', label='probability
of class 388')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('brightness change range')
plt.ylabel('probability')
plt.show()
如图8-11所示,横轴代表亮度调整值,纵轴代表预测概率,实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率。我们假设概率大于50%时,分类结果可信,可见在该案例中,亮度调整范围小于–25或者大于25时,对抗样本定向攻击失效。当亮度调整范围小于–50或者大于50时,对抗样本预测为定向攻击目标的概率几乎为0。当亮度调整范围大于–125并且小于25时,模型可以把对抗样本识别为熊猫,没有被欺骗。
下面我们调整原始图像和对抗样本的亮度,调整范围为–200到+200,每次增加10,并记录下亮度调整值和预测为熊猫对应标签的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#综合分析亮度对于对抗样本和正常图片分类的影响
std_range = range(-200,200,10)
original_pro = []
adv_pro = []
for i in std_range:
brightness_adv_img=np.clip((adv.copy()+i),0,255)
pro_388=infer_img(brightness_adv_img.copy(),388)
adv_pro+= [pro_388]
brightness_img=np.clip((orig.copy()+i),0,255)
pro=infer_img(brightness_img.copy(),388)
original_pro += [pro]
print("std={} adv_pro[388]={} original_pro[388]={}".format(i,pro_388,pro))
#横轴代表亮度调整值,纵轴代表预测概率
#实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_pro), 'b--', label='probability
of adversarial')
ax.plot(np.array(std_range), np.array(original_pro), 'r', label='probability
of original')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('brightness change range')
plt.ylabel('probability')
plt.show()
图8-11 亮度对于对抗样本的鲁棒性影响示例(cw算法)
如图8-12所示,横轴代表亮度调整值,纵轴代表预测概率,实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率。我们假设概率大于80%时,分类结果可信,可见在该案例中,亮度调整范围大于–100且小于–25时,可以抵御对抗样本攻击,把原始图片和对抗样本均识别为熊猫。
图8-12 亮度对于对抗样本和原始图片的鲁棒性影响示例(cw算法)
下面我们调整对抗样本的对比度,调整范围为0.1到+2.0,每次增加0.1,并记录下对比度调整值和对抗样本预测为熊猫及定向攻击目标的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#验证对比度对于对抗样本的影响
std_range = np.arange(0.1,2.0,0.1)
adv_288_pro = []
adv_388_pro = []
#调整范围为0.1到+2.0,每次增加0.1
for i in std_range:
contrast_adv_img=np.clip((adv.copy()*i),0,255)
pro_388=infer_img(contrast_adv_img.copy(),388)
pro_288=infer_img(contrast_adv_img.copy(),288)
print("std={} pro[388]={} pro[288]={}".format(i,pro_388,pro_288))
adv_288_pro += [pro_288]
adv_388_pro += [pro_388]
#横轴代表对比度调整值,纵轴代表预测概率
#实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_288_pro), 'b--', label=
'probability of class 288')
ax.plot(np.array(std_range), np.array(adv_388_pro), 'r', label='probability
of class 388')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('contrast change range')
plt.ylabel('probability')
plt.show()
如图8-13所示,横轴代表对比度调整值,纵轴代表预测概率,实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率。我们假设概率大于50%时,分类结果可信,可见在该案例中,对比度调整范围小于0.75或者大于1.25时,对抗样本定向攻击失效。当亮度调整范围小于–0.5或者大于1.5时,对抗样本预测为定向攻击目标的概率几乎为0。
图8-13 对比度对于对抗样本的鲁棒性影响示例(cw算法)
下面我们调整原始图像和对抗样本的对比度,调整范围为0.1到2.0,每次增加0.1,并记录下对比度调整值和预测为熊猫对应标签的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#综合分析对比度对于对抗样本和正常图片分类的影响
std_range = np.arange(0.1,2.0,0.1)
original_pro = []
adv_pro = []
#调整范围为0.1到2.0,每次增加0.1
for i in std_range:
contrast_adv_img=np.clip((adv.copy()*i),0,255)
pro_388=infer_img(contrast_adv_img.copy(),388)
adv_pro+= [pro_388]
contrast_img=np.clip((orig.copy()*i),0,255)
pro=infer_img(contrast_img.copy(),388)
original_pro += [pro]
print("std={} adv_pro[388]={} original_pro[388]={}".format(i,pro_388,pro))
#横轴代表对比度调整值,纵轴代表预测概率
#实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_pro), 'b--', label='probability
of adversarial')
ax.plot(np.array(std_range), np.array(original_pro), 'r', label='probability
of original')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('contrast change range')
plt.ylabel('probability')
plt.show()
如图8-14所示,横轴代表对比度调整值,纵轴代表预测概率,实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率。我们假设概率大于50%时,分类结果可信,可见在该案例中,无法做到同时兼顾对抗样本和正常图片的识别。
图8-14 对比度对于对抗样本和原始图片的鲁棒性影响示例(cw算法)
在处理图像时,通过对像素值大小的适当调整也可以达到类似效果。采用按像素的方式改变图像对比度和亮度,公式如下:
f(x')=αf(x)+β
其中α调整的是对比度,值越大对比度越大;β调整的是亮度,值越大亮度越大。下面我们结合实际的例子来介绍对比度和亮度对鲁棒性的影响,对应的代码路径为:
https://github.com/duoergun0729/adversarial_examples/blob/master/code/8-
case3-cw.ipynb
下面我们调整对抗样本的亮度,调整范围为–200到+200,每次增加10,并记录下亮度调整值和对抗样本预测为熊猫及定向攻击目标的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#验证亮度对于对抗样本的影响
std_range = range(-200,200,10)
adv_288_pro = []
adv_388_pro = []
for i in std_range:
#记录下亮度调整值和对抗样本预测为熊猫及定向攻击目标的概率
brightness_adv_img=np.clip((adv.copy()+i),0,255)
pro_388=infer_img(brightness_adv_img.copy(),388)
pro_288=infer_img(brightness_adv_img.copy(),288)
print("std={} pro[388]={} pro[288]={}".format(i,pro_388,pro_288))
adv_288_pro += [pro_288]
adv_388_pro += [pro_388]
#横轴代表亮度调整值,纵轴代表预测概率
#实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_288_pro), 'b--', label=
'probability of class 288')
ax.plot(np.array(std_range), np.array(adv_388_pro), 'r', label='probability
of class 388')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('brightness change range')
plt.ylabel('probability')
plt.show()
如图8-11所示,横轴代表亮度调整值,纵轴代表预测概率,实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率。我们假设概率大于50%时,分类结果可信,可见在该案例中,亮度调整范围小于–25或者大于25时,对抗样本定向攻击失效。当亮度调整范围小于–50或者大于50时,对抗样本预测为定向攻击目标的概率几乎为0。当亮度调整范围大于–125并且小于25时,模型可以把对抗样本识别为熊猫,没有被欺骗。
下面我们调整原始图像和对抗样本的亮度,调整范围为–200到+200,每次增加10,并记录下亮度调整值和预测为熊猫对应标签的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#综合分析亮度对于对抗样本和正常图片分类的影响
std_range = range(-200,200,10)
original_pro = []
adv_pro = []
for i in std_range:
brightness_adv_img=np.clip((adv.copy()+i),0,255)
pro_388=infer_img(brightness_adv_img.copy(),388)
adv_pro+= [pro_388]
brightness_img=np.clip((orig.copy()+i),0,255)
pro=infer_img(brightness_img.copy(),388)
original_pro += [pro]
print("std={} adv_pro[388]={} original_pro[388]={}".format(i,pro_388,pro))
#横轴代表亮度调整值,纵轴代表预测概率
#实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_pro), 'b--', label='probability
of adversarial')
ax.plot(np.array(std_range), np.array(original_pro), 'r', label='probability
of original')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('brightness change range')
plt.ylabel('probability')
plt.show()
图8-11 亮度对于对抗样本的鲁棒性影响示例(cw算法)
如图8-12所示,横轴代表亮度调整值,纵轴代表预测概率,实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率。我们假设概率大于80%时,分类结果可信,可见在该案例中,亮度调整范围大于–100且小于–25时,可以抵御对抗样本攻击,把原始图片和对抗样本均识别为熊猫。
图8-12 亮度对于对抗样本和原始图片的鲁棒性影响示例(cw算法)
下面我们调整对抗样本的对比度,调整范围为0.1到+2.0,每次增加0.1,并记录下对比度调整值和对抗样本预测为熊猫及定向攻击目标的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#验证对比度对于对抗样本的影响
std_range = np.arange(0.1,2.0,0.1)
adv_288_pro = []
adv_388_pro = []
#调整范围为0.1到+2.0,每次增加0.1
for i in std_range:
contrast_adv_img=np.clip((adv.copy()*i),0,255)
pro_388=infer_img(contrast_adv_img.copy(),388)
pro_288=infer_img(contrast_adv_img.copy(),288)
print("std={} pro[388]={} pro[288]={}".format(i,pro_388,pro_288))
adv_288_pro += [pro_288]
adv_388_pro += [pro_388]
#横轴代表对比度调整值,纵轴代表预测概率
#实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_288_pro), 'b--', label=
'probability of class 288')
ax.plot(np.array(std_range), np.array(adv_388_pro), 'r', label='probability
of class 388')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('contrast change range')
plt.ylabel('probability')
plt.show()
如图8-13所示,横轴代表对比度调整值,纵轴代表预测概率,实线代表对抗样本预测为熊猫的概率,虚线代表对抗样本预测为定向攻击目标的概率。我们假设概率大于50%时,分类结果可信,可见在该案例中,对比度调整范围小于0.75或者大于1.25时,对抗样本定向攻击失效。当亮度调整范围小于–0.5或者大于1.5时,对抗样本预测为定向攻击目标的概率几乎为0。
图8-13 对比度对于对抗样本的鲁棒性影响示例(cw算法)
下面我们调整原始图像和对抗样本的对比度,调整范围为0.1到2.0,每次增加0.1,并记录下对比度调整值和预测为熊猫对应标签的概率,对抗样本使用cw算法生成,定向攻击目标标签为288,要求概率大于80%。
#综合分析对比度对于对抗样本和正常图片分类的影响
std_range = np.arange(0.1,2.0,0.1)
original_pro = []
adv_pro = []
#调整范围为0.1到2.0,每次增加0.1
for i in std_range:
contrast_adv_img=np.clip((adv.copy()*i),0,255)
pro_388=infer_img(contrast_adv_img.copy(),388)
adv_pro+= [pro_388]
contrast_img=np.clip((orig.copy()*i),0,255)
pro=infer_img(contrast_img.copy(),388)
original_pro += [pro]
print("std={} adv_pro[388]={} original_pro[388]={}".format(i,pro_388,pro))
#横轴代表对比度调整值,纵轴代表预测概率
#实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率
fig, ax = plt.subplots()
ax.plot(np.array(std_range), np.array(adv_pro), 'b--', label='probability
of adversarial')
ax.plot(np.array(std_range), np.array(original_pro), 'r', label='probability
of original')
legend = ax.legend(loc='best', shadow=true, fontsize='large')
legend.get_frame().set_facecolor('#ffffff')
plt.xlabel('contrast change range')
plt.ylabel('probability')
plt.show()
如图8-14所示,横轴代表对比度调整值,纵轴代表预测概率,实线代表原始图片预测为熊猫的概率,虚线代表对抗样本预测为熊猫的概率。我们假设概率大于50%时,分类结果可信,可见在该案例中,无法做到同时兼顾对抗样本和正常图片的识别。
图8-14 对比度对于对抗样本和原始图片的鲁棒性影响示例(cw算法)