★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>

1. 前言

手把手教你用PPyolo实现公共场所武器检测

1.1 项目背景:

  • 公共场所存在的危险物品是一个严重的社会问题。这些危险物品包括易燃、易爆、有毒、有害等物质,一旦被不当使用或处理,就可能引发火灾、爆炸、中毒等严重事故,给人们的生命财产安全造成极大的威胁。

  • 针对这一问题,公共场所危险物品检测项目应运而生。本项目旨在通过先进的技术手段,对公共场所存在的危险物品进行快速、准确地检测,以避免事故的发生,保障公众的安全。

  • 公共场所危险物品检测项目具有以下特点:

  1. 快速:采用高效的检测技术,能够在短时间内完成检测。
  2. 准确:采用先进的检测仪器和技术,能够准确识别危险物品。
  3. 全面:能够对多种类型的危险物品进行检测,包括易燃、易爆、有毒、有害等物质。
  4. 安全:检测过程严格遵循安全规范,确保检测过程的安全性。
  • 公共场所危险物品检测项目对保障公共安全、维护社会稳定具有重要意义。通过本项目的实施,可以有效预防事故的发生,降低人员伤亡和财产损失,提高公共场所的安全水平。

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

定义数据处理流程,其中训练和测试需分别定义,训练过程包括了部分测试过程中不需要的数据增强操作,如在本示例中,训练过程使用了MixupImageRandomDistortRandomExpandRandomCropRandomHorizontalFlip共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查看训练过程中的指标变化

  1. 点击左边菜单图标的『可视化』;
  2. 设置logdir,logdir的路径为训练代码中save_dir指定的目录下的vdl_log目录,例如output/yolov3_darknet53/vdl_log
  3. 点击下方『启动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 关于作者:徐嘉祁 成都锦城学院飞桨领航团团长

喜欢点个❤呀!

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐