针对目标检测的对抗攻击

P粉084495128
发布: 2025-07-29 11:02:31
原创
848人浏览过
本项目测试YOLOv3模型鲁棒性,利用PaddleDetection库,在COCO2017数据集上训练模型,其对dog.jpg检测精确率达98%。通过添加椒盐噪声生成对抗样本dog2.png,再次检测时,正确率大幅下降,部分目标甚至消失,以此展示对抗样本对模型检测能力的攻击效果。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

针对目标检测的对抗攻击 - php中文网

背景

  1. 对抗样本是各种机器学习系统需要克服的一大障碍。对抗样本的存在表明模型倾向于依赖不可靠的特征来最大化性能,如果特征受到干扰,那么将造成模型误分类,可能导致灾难性的后果。对抗样本的非正式定义:以人类不可感知的方式对输入进行修改,使得修改后的输入能够被机器学习系统误分类,尽管原始输入是被正确分类的。
  2. 本项目旨在测试目标检测最受欢迎的模型之一YOLOv3的鲁棒性,通过设计对抗样本达到对模型攻击使其降低检测能力。

1.基本介绍

本项目主要展示PaddleDetection的一键式训练、预测以及python端通过Paddle预测库预测图像和视频的示例。 根据大佬提供的对抗样本生成经验应用到目标检测的实验环境中

  1. 实验模型:YOLOv3
  2. 原始图片:dog.jpg
  3. 对抗样本: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依赖,并设置环境变量。

标书对比王
标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

标书对比王58
查看详情 标书对比王
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 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贴在图上,跟原图相差不大并且使分类器分类失误。 针对目标检测的对抗攻击 - php中文网        

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 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>
登录后复制
               

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 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中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号