本项目测试YOLOv3模型鲁棒性,利用PaddleDetection库,在COCO2017数据集上训练模型,其对dog.jpg检测精确率达98%。通过添加椒盐噪声生成对抗样本dog2.png,再次检测时,正确率大幅下降,部分目标甚至消失,以此展示对抗样本对模型检测能力的攻击效果。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

背景
对抗样本是各种机器学习系统需要克服的一大障碍。对抗样本的存在表明模型倾向于依赖不可靠的特征来最大化性能,如果特征受到干扰,那么将造成模型误分类,可能导致灾难性的后果。对抗样本的非正式定义:以人类不可感知的方式对输入进行修改,使得修改后的输入能够被机器学习系统误分类,尽管原始输入是被正确分类的。本项目旨在测试目标检测最受欢迎的模型之一YOLOv3的鲁棒性,通过设计对抗样本达到对模型攻击使其降低检测能力。
1.基本介绍
本项目主要展示PaddleDetection的一键式训练、预测以及python端通过Paddle预测库预测图像和视频的示例。 根据大佬提供的对抗样本生成经验应用到目标检测的实验环境中
实验模型:YOLOv3原始图片:dog.jpg对抗样本:dog2.png
2.环境准备
PaddleDetection下载
可以通过如下git clone命令下载PaddleDetection目标检测库,由于在AIStudio上通过git clone下载比较慢,本项目在work目录下提供下载好的PaddleDetection压缩包,也可直接解压使用。
In [1]
%cd data!unzip -o /home/aistudio/data/data63328/PaddleDetection.zip
安装PaddleDetection依赖库
通过如下方式安装PaddleDetection依赖,并设置环境变量。
In [2]
%cd /home/aistudio/data/PaddleDetection!pip install -r requirements.txt # requirements.txt列出了PaddleDetection的所有依赖库!pip install Cython pycocotools%env PYTHONPATH=.:$PYTHONPATH%env CUDA_VISIBLE_DEVICES=0
3.数据准备
PaddleDetection提供了COCO、VOC等数据集下载脚本如dataset/coco/download.py,通过此脚本可自动下载对应数据集。但由于COCO数据集下载比较耗时,本项目已上传COCO2017数据集,可直接解压获取。
COCO的train数据集较大,解压比较耗时,本项目仅使用val数据集。
In [4]
# ! python dataset/coco/download_coco.py # coco数据集下载脚本! unzip -q /home/aistudio/data/data7122/annotations_trainval2017.zip -d dataset/coco # 解压数据集! unzip -q /home/aistudio/data/data7122/val2017.zip -d dataset/coco# ! unzip /home/aistudio/data/data7122/train2017.zip -d dataset/coco
In [27]
! python tools/train.py -c ../../work/yolov3_darknet.yml --eval # 启动模型训练
In [3]
# ! python tools/infer.py -c ../../../work/yolov3_darknet53_100e_cocoval.yml --infer_img=../../work/dog.jpg! python tools/infer.py -c ../../work/yolov3_darknet.yml --infer_img=../../work/dog.jpg -o weights=https://paddlemodels.bj.bcebos.com/object_detection/yolov3_darknet.tar
4.通过YOLOv3训练COCO2017数据集后可以精准的识别出dog.jpg中所包含的物品,精确率达到98%
In [29]
%matplotlib inlineimport matplotlib.pyplot as plt import cv2infer_img = cv2.imread("output/dog.jpg")plt.figure(figsize=(15,10))plt.imshow(cv2.cvtColor(infer_img, cv2.COLOR_BGR2RGB))plt.show()
传统的对抗攻击就是在原图的基础上加入肉眼不可见的噪音干扰分类器,用数学的方式定义就是,给定分类器[公式],其中[公式] 为样本,[公式] 为样本自身的类别,假设我们需要误判为的目标类别为[公式] ,想要找到一个与[公式] 相近的[公式] 最大化 [公式] , 相近的约束表示为存在一个 [公式]误差满足 [公式].
通俗点讲,就是把Patch贴在图上,跟原图相差不大并且使分类器分类失误。
5.对抗样本生成
1.定义添加椒盐噪声的函数。
In [5]
import cv2import numpy as npfrom matplotlib import pyplot as plt%matplotlib inline## [Load an image from a file]img = cv2.imread("/home/aistudio/dog.jpg")img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
In [6]
import numpy as npimport numpy.random as randomnp.random.seed(2020)def addsalt_pepper(src,percetage): NoiseImg=src NoiseNum=int(percetage*src.shape[0]*src.shape[1]) for i in range(NoiseNum): randX=random.random_integers(0,src.shape[0]-1) randY=random.random_integers(0,src.shape[1]-1) if random.random_integers(0,1)<=0.5: NoiseImg[randX,randY]=0 else: NoiseImg[randX,randY]=255 return NoiseImgimg2 = addsalt_pepper(img, 0.1)img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)plt.imshow(img)## 输出效果图cv2.imwrite("/home/aistudio/dog2.png", img2, [int(cv2.IMWRITE_PNG_COMPRESSION), 0])
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/ipykernel_launcher.py:8: DeprecationWarning: This function is deprecated. Please call randint(0, 575 + 1) instead /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/ipykernel_launcher.py:9: DeprecationWarning: This function is deprecated. Please call randint(0, 767 + 1) instead if __name__ == '__main__':/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/ipykernel_launcher.py:10: DeprecationWarning: This function is deprecated. Please call randint(0, 1 + 1) instead # Remove the CWD from sys.path while we load stuff.
True
6.当我们再次使用YOLOv3模型进行目标检测时,可以发现正确率由原先的0.98,0.96,0.85下降到0.63,0.51,自行车直接消失
In [33]
! python tools/infer.py -c ../../work/yolov3_darknet.yml --infer_img=../../dog2.png -o weights=https://paddlemodels.bj.bcebos.com/object_detection/yolov3_darknet.tar
In [34]
%matplotlib inlineimport matplotlib.pyplot as plt import cv2infer_img = cv2.imread("output/dog2.png")plt.figure(figsize=(15,10))plt.imshow(cv2.cvtColor(infer_img, cv2.COLOR_BGR2RGB))plt.show()
以上就是针对目标检测的对抗攻击的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/49514.html
微信扫一扫
支付宝扫一扫