X光安检是目前在城市轨交、铁路、机场、物流业广泛使用的物检手段。使用人工智能技术,辅助一线安检员进行X光安检判图,可以有效降低因为安检员经验、能力或工作状态造成的错漏检问题。在实际场景中,因待检测物品的多样性、成像角度、重叠遮挡等问题,X光安检图像检测算法研究存在一定挑战。
数据集来源:科大讯飞的X光安检图像检测挑战赛。
数据用于学习和研究,标注文件中的类别为8类,包括:
刀(knife)、剪刀(scissors)、打火机(lighter)、优盘(USBFlashDisk)、压力容器(pressure)、带喷嘴塑料瓶(plasticBottleWithaNozzle)、公章(seal)、电池(battery)。
8个类别
部分数据
环境配置:PaddleDetection安装# 克隆PaddleDetection仓库
git clone https://GitHub.com/PaddlePaddle/PaddleDetection.git
# 安装其他依赖
cd PaddleDetection
pip install -r requirements.txt
# 编译安装paddledet
python setup.py install
安装后确认测试通过:
python ppdet/modeling/tests/test_architectures.py
测试通过后会提示如下信息:
.......
----------------------------------------------------------------------
Ran 7 tests in 12.816s
OK
PP-YOLOE模型
是基于PP-YOLOv2的卓越的单阶段Anchor-free模型,超越了多种流行的YOLO模型。PP-YOLOE有一系列的模型,即s/m/l/x,可以通过width multiplier和depth multiplier配置。PP-YOLOE避免了使用诸如Deformable Convolution或者Matrix NMS之类的特殊算子,以使其能轻松地部署在多种多样的硬件上。详细介绍请看官网文档。
准备数据集(VOC格式)#划分和生成train.txt,val.txt
import os
import random
data_path = 'data/train'
datalst=[]
for subpath in os.listdir(data_path):
img_path = os.path.join(data_path, subpath)
if os.path.isfile(img_path):
continue
xml_path = os.path.join(subpath, 'XML')
for img_name in os.listdir(img_path):
if not os.path.isfile(os.path.join(img_path, img_name)):
continue
img_file = os.path.join(subpath, img_name)
xml_file = os.path.join(xml_path, img_name.replace('.jpg', '.xml'))
f.write(img_file ' ' xml_file '\n')
txt=img_file ' ' xml_file
datalst.append(txt)
#乱序
random.shuffle(datalst)
with open(os.path.join(data_path, 'train.txt'), 'w') as f:
for d in datalst[:int(len(datalst)*0.8)]:
f.write(d "\n")
with open(os.path.join(data_path, 'val.txt'), 'w') as f:
for d in datalst[int(len(datalst)*0.8):]:
f.write(d "\n")
模型参数配置
1、修改ppyoloe_crm_s_300_coco.yml:数据集格式为voc.yml,学习率:0.01
2、修改optimizer_300e.yml: epoch:50
3、修改ppyoloe_reader.yml:去掉数据增强RandomExpand,去掉512以下target_size
4、修改voc.yml:num_classes:8,训练集和验证集的文件路径
模型训练
python tools/train.py -c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml
#部分训练过程:
……
[08/06 10:17:32] ppdet.engine INFO: Epoch: [45] [ 0/250] learning_rate: 0.000955 loss: 2.220671 loss_cls: 1.143309 loss_iou: 0.235187 loss_dfl: 0.966013 loss_l1: 0.426869 eta: 0:12:02 batch_cost: 0.5925 data_cost: 0.1385 ips: 27.0056 images/s
[08/06 10:18:49] ppdet.engine INFO: Epoch: [45] [100/250] learning_rate: 0.000882 loss: 2.219530 loss_cls: 1.131274 loss_iou: 0.233677 loss_dfl: 0.984781 loss_l1: 0.443764 eta: 0:11:04 batch_cost: 0.5928 data_cost: 0.1405 ips: 26.9917 images/s
[08/06 10:20:08] ppdet.engine INFO: Epoch: [45] [200/250] learning_rate: 0.000812 loss: 2.242256 loss_cls: 1.146362 loss_iou: 0.237596 loss_dfl: 0.988855 loss_l1: 0.445064 eta: 0:10:07 batch_cost: 0.5997 data_cost: 0.1165 ips: 26.6794 images/s
[08/06 10:20:44] ppdet.utils.checkpoint INFO: Save checkpoint: output/ppyoloe_crn_s_300e_coco
……
训练模型
模型预测python tools/infer.py -c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml -o weights=output/ppyoloe_crn_s_300e_coco/model_latest.pdparams --infer_img=001324.jpg
单张预测结果
导出推理模型python tools/export_model.py -c configs/ppyoloe/ppyoloe_crn_s_300e_coco.yml --output_dir=output_inference -o weights=outpu
推理模型
如何使用推理模型进行推理预测,可以参看:。
本文主要通过一个实例来简单的介绍,如何使用飞桨的PaddleDetection来实现目标检测项目。
部分参考:GitHub - PaddlePaddle/PaddleDetection
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved