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

本项目主要展示PaddleDetection的一键式训练、预测以及python端通过Paddle预测库预测图像和视频的示例。 根据大佬提供的对抗样本生成经验应用到目标检测的实验环境中
PaddleDetection下载
可以通过如下git clone命令下载PaddleDetection目标检测库,由于在AIStudio上通过git clone下载比较慢,本项目在work目录下提供下载好的PaddleDetection压缩包,也可直接解压使用。
%cd data !unzip -o /home/aistudio/data/data63328/PaddleDetection.zip
%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
PaddleDetection提供了COCO、VOC等数据集下载脚本如dataset/coco/download.py,通过此脚本可自动下载对应数据集。但由于COCO数据集下载比较耗时,本项目已上传COCO2017数据集,可直接解压获取。
COCO的train数据集较大,解压比较耗时,本项目仅使用val数据集。
# ! 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
! python tools/train.py -c ../../work/yolov3_darknet.yml --eval # 启动模型训练
# ! 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
%matplotlib inlineimport matplotlib.pyplot as plt
import cv2
infer_img = cv2.imread("output/dog.jpg")
plt.figure(figsize=(15,10))
plt.imshow(cv2.cvtColor(infer_img, cv2.COLOR_BGR2RGB))
plt.show()<Figure size 1080x720 with 1 Axes>
传统的对抗攻击就是在原图的基础上加入肉眼不可见的噪音干扰分类器,用数学的方式定义就是,给定分类器[公式],其中[公式] 为样本,[公式] 为样本自身的类别,假设我们需要误判为的目标类别为[公式] ,想要找到一个与[公式] 相近的[公式] 最大化 [公式] , 相近的约束表示为存在一个 [公式]误差满足 [公式].
通俗点讲,就是把Patch贴在图上,跟原图相差不大并且使分类器分类失误。
1.定义添加椒盐噪声的函数。
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)import numpy as npimport numpy.random as random
np.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 NoiseImg
img2 = 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
<Figure size 432x288 with 1 Axes>
! 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
%matplotlib inlineimport matplotlib.pyplot as plt
import cv2
infer_img = cv2.imread("output/dog2.png")
plt.figure(figsize=(15,10))
plt.imshow(cv2.cvtColor(infer_img, cv2.COLOR_BGR2RGB))
plt.show()<Figure size 1080x720 with 1 Axes>
以上就是针对目标检测的对抗攻击的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号