作者:欧新宇(Xinyu OU)
当前版本:Release v1.0
开发平台:Paddle 2.3.2
运行环境:Intel Core i7-7700K CPU 4.2GHz, nVidia GeForce GTX 1080 Ti
本教案所涉及的数据集仅用于教学和交流使用,请勿用作商用。
最后更新:2022年2月4日
本实验使用 口罩检测(Face)数据集
完成,目的是利用PaddleDetection工具包训练口罩检测模型,判断给定的人物图片是否正确佩戴口罩,该数据集包含with_mask、without_mask、mask_weared_incorrect三个目标类别,共计853张图片。本数据集已经按照7:1:2的比例进行划分, 其中训练验证集样本681个(80%),训练集样本595个(70%), 验证集样本86个(10%), 测试集样本172个(20%), 共计853个。
数据集下载地址:https://aistudio.baidu.com/aistudio/datasetdetail/127209
下面给出几个样图:
上图给出了5个人的检测结果,其中4个人佩戴了口罩(with_mask),1个人未佩戴口罩(without_mask)。
上图给出了5个人的检测结果,其中1个人佩戴了口罩(with_mask),2个人未佩戴口罩(without_mask),2个人佩戴不正确(mask_weared_incorrect)。由于模型并非很完善,因此被认定为佩戴不正确(mask_weared_incorrect)的人,同时也被检测为未佩戴(without_mask)口罩。
所有作业均在AIStudio上进行提交,提交时包含源代码和运行结果
【实验要求】 完成下列三个模型的训练,并完成下面的实验结果统计表(任务一);
序号 | 模型名称 | Backbone主干网络 | 初始学习率 | test mAP | FPS | with_mask | without_mask | mask_weared_incorred |
---|---|---|---|---|---|---|---|---|
A | faster_rcnn_r34_fpn_1x_voc | ResNet34 | 0.001 | 0.859 | 12.98 | 0.929 | 0.868 | 0.78 |
B | ppyolo_mbv3_small_voc | MobileNetv3 | 0.001 | 0.375 | 31.99 | 0.629 | 0.374 | 0.123 |
C | yolov3_mobilenet_v3_large_ssld_36e_voc | MobileNetv3 | 0.001 | 0.347 | 26.45 | 0.618 | 0.273 | 0.15 |
【实验要求】 编写python代码,使用【任务一】中训练获得的模型中的一个,实现对下列三幅图片的推理(infer.py),并在本notebook中进行可视化。(图片可直接从本页面另存到本地)
####### 导入依赖库 import os import matplotlib.pyplot as plt import cv2 ####### 设置PaddleDetection工作路径 workspace = 'D:\\Workspace\\MyProjects\\PaddleDetection-release-2.3' os.chdir(workspace) ####### 1. 执行预测Inference # 1.1 设置图片路径 img_root = r'D:/WorkSpace/DeepLearning/WebsiteV2/Data/Projects/Project015FaceMaskDetection/' img_file = ['demo1.png', 'demo2.png', 'demo3.png'] # 1.2 设置模型路径 model_template1 = 'faster_rcnn_r34_fpn_1x_voc' model_template2 = 'ppyolo_mbv3_small_voc' model_template3 = 'yolov3_mobilenet_v3_large_ssld_36e_voc' model_template = model_template1 # 1.3 设置Inference图像的输出和读取路径 infer_path = os.path.join(workspace, 'output', 'FaceMask') # 1.4 执行预测脚本 for img in img_file: img_path = os.path.join(img_root, img) !python tools/infer.py -c configs/FaceMask/{model_template}.yml -o --infer_img={img_path} --output_dir={infer_path} ####### 2. 可视化Inference结果 plt.figure(figsize=(30,12)) ax1 = plt.subplot(1,3,1) infer_img_path1 = os.path.join(infer_path, img_file[0]) infer_img1 = cv2.imread(infer_img_path1) ax1.set_title('Demo1') plt.imshow(cv2.cvtColor(infer_img1, cv2.COLOR_BGR2RGB)) ax2 = plt.subplot(1,3,2) infer_img_path2 = os.path.join(infer_path, img_file[1]) infer_img2 = cv2.imread(infer_img_path2) ax2.set_title('Demo2') plt.imshow(cv2.cvtColor(infer_img2, cv2.COLOR_BGR2RGB)) ax3 = plt.subplot(1,3,3) infer_img_path3 = os.path.join(infer_path, img_file[2]) infer_img3 = cv2.imread(infer_img_path3) ax3.set_title('Demo3') plt.imshow(cv2.cvtColor(infer_img3, cv2.COLOR_BGR2RGB))
[02/05 00:23:28] ppdet.utils.checkpoint INFO: Finish loading model weights: output/FaceMask/faster_rcnn_r34_fpn_1x_voc/best_model.pdparams [02/05 00:23:29] ppdet.engine INFO: Model FLOPs : 169.055587G. (image shape is [1, 3, 800, 1216]) [02/05 00:23:29] ppdet.engine INFO: Detection bbox results save in D:\Workspace\MyProjects\PaddleDetection-release-2.3\output\FaceMask\demo1.png W0205 00:23:26.623592 16568 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 11.1, Runtime API Version: 10.2 W0205 00:23:26.638058 16568 device_context.cc:465] device: 0, cuDNN Version: 7.6. [02/05 00:23:36] ppdet.utils.checkpoint INFO: Finish loading model weights: output/FaceMask/faster_rcnn_r34_fpn_1x_voc/best_model.pdparams [02/05 00:23:38] ppdet.engine INFO: Model FLOPs : 164.610672G. (image shape is [1, 3, 800, 1184]) [02/05 00:23:38] ppdet.engine INFO: Detection bbox results save in D:\Workspace\MyProjects\PaddleDetection-release-2.3\output\FaceMask\demo2.png W0205 00:23:35.230280 21532 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 11.1, Runtime API Version: 10.2 W0205 00:23:35.237262 21532 device_context.cc:465] device: 0, cuDNN Version: 7.6. [02/05 00:23:46] ppdet.utils.checkpoint INFO: Finish loading model weights: output/FaceMask/faster_rcnn_r34_fpn_1x_voc/best_model.pdparams [02/05 00:23:47] ppdet.engine INFO: Model FLOPs : 151.260478G. (image shape is [1, 3, 800, 1088]) [02/05 00:23:47] ppdet.engine INFO: Detection bbox results save in D:\Workspace\MyProjects\PaddleDetection-release-2.3\output\FaceMask\demo3.png W0205 00:23:44.671244 18848 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 11.1, Runtime API Version: 10.2 W0205 00:23:44.678225 18848 device_context.cc:465] device: 0, cuDNN Version: 7.6.
<matplotlib.image.AxesImage at 0x1a37bb7e670>
【实验要求】 提交模型的训练日志,直接将训练日志粘贴到如下 Markdown Cell 中【诚信考查】 注意每次训练结果均不可能完全一样
(任务二)
【模型一】faster_rcnn_r34_fpn_1x_voc
【模型二】ppyolo_mbv3_small_voc
【模型三】yolov3_mobilenet_v3_large_ssld_36e_voc