时间:2025-07-29 作者:游乐小编
本项目测试YOLOv3模型鲁棒性,利用PaddleDetection库,在COCO2017数据集上训练模型,其对dog.jpg检测精确率达98%。通过添加椒盐噪声生成对抗样本dog2.png,再次检测时,正确率大幅下降,部分目标甚至消失,以此展示对抗样本对模型检测能力的攻击效果。
本项目主要展示PaddleDetection的一键式训练、预测以及python端通过Paddle预测库预测图像和视频的示例。 根据大佬提供的对抗样本生成经验应用到目标检测的实验环境中
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
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
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贴在图上,跟原图相差不大并且使分类器分类失误。
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
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()
2021-11-05 11:52
手游攻略2021-11-19 18:38
手游攻略2021-10-31 23:18
手游攻略2022-06-03 14:46
游戏资讯2025-06-28 12:37
单机攻略