![cover](https://img-blog.csdnimg.cn/img_convert/c745e273743088ef46e75b6cbdbf9883.png)
AI 安防小助手!YOLOv3实现公共场所武器检测
使用Paddle的YOLOv3模型实现公共场所武器检测(危险物品)
★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
1. 前言
手把手教你用PPyolo实现公共场所武器检测
1.1 项目背景:
-
公共场所存在的危险物品是一个严重的社会问题。这些危险物品包括易燃、易爆、有毒、有害等物质,一旦被不当使用或处理,就可能引发火灾、爆炸、中毒等严重事故,给人们的生命财产安全造成极大的威胁。
-
针对这一问题,公共场所危险物品检测项目应运而生。本项目旨在通过先进的技术手段,对公共场所存在的危险物品进行快速、准确地检测,以避免事故的发生,保障公众的安全。
-
公共场所危险物品检测项目具有以下特点:
- 快速:采用高效的检测技术,能够在短时间内完成检测。
- 准确:采用先进的检测仪器和技术,能够准确识别危险物品。
- 全面:能够对多种类型的危险物品进行检测,包括易燃、易爆、有毒、有害等物质。
- 安全:检测过程严格遵循安全规范,确保检测过程的安全性。
- 公共场所危险物品检测项目对保障公共安全、维护社会稳定具有重要意义。通过本项目的实施,可以有效预防事故的发生,降低人员伤亡和财产损失,提高公共场所的安全水平。
1.2 数据集简介:
本项目基于公共场所的危险物品以及常见物品,开发危险武器检测项目
- 数据集介绍:本数据集中的物品分为六类,分别为tarjeta、smartphone、pistol、monedero、billete、knife。由xml(voc)标注,符合PaddleDetection所使用的数据集格式,也可用于EasyDL开发。(数据源于kaggle开源)
English | 中文名 |
---|---|
tarjeta | 卡片 |
smartphone | 智能手机 |
pistol | 手枪 |
monedero | 钱包 |
billete | 钱 |
knife | 刀 |
2. 用yolov3实现公共场所武器检测
2.1 安装PaddleX & 数据集准备
#paddlex==1.3.10 版本相对稳定 不要用其他的哈,跑不动不怪我
! pip install "paddlex==1.3.10" -i https://mirror.baidu.com/pypi/simple
#第一次运行时执行
#创建一个新的文件夹放解压后的文件
!mkdir /home/aistudio/data/datasets
!unzip data/data219503/Weapon.zip -d /home/aistudio/data/datasets
2.2 模型训练
2.2.1配置GPU
# 设置使用0号GPU卡(如无GPU,执行此代码后仍然会使用CPU训练模型)
import matplotlib
matplotlib.use('Agg')
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import paddlex as pdx
import paddle.fluid as fluid
2.2.2 定义图像处理流程transforms
定义数据处理流程,其中训练和测试需分别定义,训练过程包括了部分测试过程中不需要的数据增强操作,如在本示例中,训练过程使用了MixupImage
、RandomDistort
、RandomExpand
、RandomCrop
和RandomHorizontalFlip
共5种数据增强方式,更多图像预处理流程transforms的使用可参见paddlex.det.transforms。
from paddlex.det import transforms
train_transforms = transforms.Compose([
transforms.MixupImage(),
transforms.RandomDistort(),
transforms.RandomExpand(),
transforms.RandomCrop(),
transforms.Resize(),
transforms.RandomHorizontalFlip(),
transforms.Normalize(),
])
eval_transforms = transforms.Compose([
transforms.Resize(),
transforms.Normalize(),
])
2.2.3 定义数据集Dataset
目标检测可使用VOCDetection
格式和COCODetection
两种数据集,此处由于数据集为VOC格式,因此采用pdx.datasets.VOCDetection
来加载数据集,该接口的介绍可参见文档paddlex.datasets.VOCDetection。
train_dataset = pdx.datasets.VOCDetection(
data_dir='data/datasets/Weapon',
file_list='data/datasets/Weapon/train.txt',
label_list='data/datasets/Weapon/labels.txt',
transforms=train_transforms,
shuffle=True)
eval_dataset = pdx.datasets.VOCDetection(
data_dir='data/datasets/Weapon',
file_list='data/datasets/Weapon/val.txt',
label_list='data/datasets/Weapon/labels.txt',
transforms=eval_transforms)
2.2.4 开始炼丹!
使用本数据集在P40上训练,可自定义epoch和learning rate,根据需要进行调优。更多训练模型的参数可参见文档paddlex.det.YOLOv3。模型训练过程每间隔save_interval_epochs轮会保存一次模型在save_dir目录下,同时在保存的过程中也会在验证数据集上计算相关指标,具体相关日志参见文档。
AIStudio使用VisualDL查看训练过程中的指标变化
- 点击左边菜单图标的『可视化』;
- 设置logdir,logdir的路径为训练代码中
save_dir
指定的目录下的vdl_log目录,例如output/yolov3_darknet53/vdl_log
- 点击下方『启动VisualDL服务按钮』,再『打开VisualDL』即可
num_classes = len(train_dataset.labels)
model = pdx.det.YOLOv3(num_classes=num_classes, backbone='DarkNet53')
model.train(
num_epochs=100,
train_dataset=train_dataset,
train_batch_size=32,#根据自己的显卡配置,不然会爆炸的哦
eval_dataset=eval_dataset,
learning_rate=0.0005,
lr_decay_epochs=[210, 240],
save_interval_epochs=10,#每迭代十次保存一次
save_dir='output/yolov3',
use_vdl=True)
#转为可训练模型,随时可以用!
!paddlex --export_inference --model_dir=./output/yolov3/best_model --save_dir=./inference_model
2.3 模型预测
使用模型进行预测,同时使用pdx.det.visualize
将结果可视化,可视化结果将保存到./output/yolov3_mobilenetv1
下,其中threshold
代表Box的置信度阈值,将Box置信度低于该阈值的框过滤不进行可视化。
让我们来看看最终的模型效果吧!
#开始预测
import paddlex as pdx
#把预测的图片保存在predict中
!mkdir predict ./
model = pdx.load_model('inference_model')
image_name = '001.jpg'
result = model.predict(image_name)
pdx.det.visualize(image_name, result, threshold=0.5, save_dir='predict')
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import cv2
# 读取原始图片
origin_pic = cv2.imread('001.jpg')
origin_pic = cv2.cvtColor(origin_pic, cv2.COLOR_BGR2RGB)
plt.imshow(origin_pic)
plt.axis('on') # 显示坐标轴
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQveO1wI-1685245379633)(output_17_0.png)]
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import cv2
# 读取预测图片
origin_pic = cv2.imread('predict/visualize_001.jpg')
origin_pic = cv2.cvtColor(origin_pic, cv2.COLOR_BGR2RGB)
plt.imshow(origin_pic)
plt.axis('on') # 显示坐标轴
print(result)
# 显示坐标轴
print(result)
plt.show()
[{'category_id': 5, 'bbox': [528.0416259765625, 429.2747497558594, 176.86474609375, 212.08224487304688], 'score': 0.6911877989768982, 'category': 'knife'}]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbEnWzoc-1685245379634)(output_18_1.png)]
3. 总结
3.1 本节项目主要介绍公共场所武器检测识别的技术领域、如何使用YOLOv3实现武器检测等等。当然,公共场所武器检测项目对保障公共安全、维护社会稳定具有重要意义。通过本项目的实施,可以有效预防事故的发生,降低人员伤亡和财产损失,提高公共场所的安全水平。
3.2 关于作者:徐嘉祁 成都锦城学院飞桨领航团团长
喜欢点个❤呀!
此文章为搬运
原项目链接
更多推荐
所有评论(0)