赛事背景

X光安检是目前在城市轨交、铁路、机场、物流业广泛使用的物检手段。使用人工智能技术,辅助一线安检员进行X光安检判图,可以有效降低因为安检员经验、能力或工作状态造成的错漏检问题。在实际场景中,因待检测物品的多样性、成像角度、重叠遮挡等问题,X光安检图像检测算法研究存在一定挑战。

比赛链接:http://challenge.xfyun.cn/topic/info?type=Xray-2022&ch=ds22-dw-zmt05

赛事任务

本赛事的任务是:基于科大讯飞提供的真实X光安检图像集构建检测模型,对X光安检图像中的指定类别的物品进行检测。

评审规则

数据说明

此次比赛提供带标注的训练数据,即待检测物品在包裹中的X光图像及其标注文件。

本次比赛标注文件中的类别为8类,包括:

刀(knife)、剪刀(scissors)、打火机(lighter)、优盘(USBFlashDisk)、压力容器(pressure)、带喷嘴塑料瓶(plasticBottleWithaNozzle)、公章(seal)、电池(battery)。

待识别物品的X光成像示意图如图所示。

比赛提供的X光图像及其矩形框标注的文件按照数据来源存放在不同的文件夹中,图像文件采用jpg格式,标注文件采用xml格式,各字段含义参照voc数据集。voc各字段含义对应表为:

  • filename 文件名

  • size 图像尺寸

    • width 图像宽度

    • height 图像高度

    • depth 图像深度

  • object 图像中的目标,可能有多个

    • name 该目标的标签名称

    • bndbox 该目标的标注框

    • xmin 该目标的左上角宽度方向坐标

    • ymin 该目标的左上角高度方向坐标

    • xmax 该目标的右下角宽度方向坐标

    • ymax 该目标的右下角高度方向坐标

评估指标

评测方式采用计算mAP(IoU = 0.5)的方式。首先计算每个类的AP:

  • 根据预测框和标注框的IoU是否达到阈值0.5判断该预测框是真阳性还是假阳性;

  • 每个预测框的置信度进行从高到低排序;

  • 计算精确率和召回率,计算PR值;

  • 绘制PR曲线并计算AP值。

  • 然后计算mAP:把所有类的AP值求平均得到mAP。

作品提交要求

选手需要提交json格式文件,详情见示例。其中,坐标值必须为大于0的正数且不能超过图像的宽高。

按照赛题数据页面2022gamedatasettest1.txt里面的顺序组织json

提交文件需按序排列,首先按图片顺序排列,然后按类别顺序排列,置信度顺序随意。图片顺序,请按照图片编号顺序。

(b) 类别顺序,请参照下列顺序:{'knife': 1, 'scissors': 2, 'lighter': 3, 'USBFlashDisk': 4, 'pressure': 5, 'plasticBottleWithaNozzle': 6, 'seal': 7, 'battery': 8}

初赛结束后进入决赛的选手需要提交模型文件和详细的实验过程说明文档。其中,模型大小不能超过600MB,鼓励使用模型压缩和轻量化方法,并酌情加分;提交的模型须为单模型,禁止使用多模型融合方法;说明文档须实事求是、清晰明了,本领域研究者可据此复现结果。建议参赛者在参加初赛过程中记录实验过程。

数据下载

文件名 下载
X光安检图像检测挑战赛2022一阶段公开数据.zip 点击下载
2022gamedatasettest1.txt 点击下载

解题过程

赛题是一个典型的物体检测赛题,接下来我们讲解具体的训练和解题过程。我们选择使用YOLOV5来训练和进行预测。

步骤1:读取并转换数据集

首先我们需要读取所有的图片路径,并尝试将图片转换为YOLO格式。

train_anns = glob.glob('讯飞研究院-X光安检图像检测挑战赛2022公开数据/训练集/*/XML/*.xml')
train_paths = glob.glob('讯飞研究院-X光安检图像检测挑战赛2022公开数据/训练集/*/*.jpg')

Yolo标注格式保存在.txt文件中,一共5个数据,用空格隔开,举例说明如下图所示:

假设图像的高和宽分别为h, w,bbox的左上角坐标为(x1, y2),右下角坐标为(x2, y2),则可求得bbox中心坐标(x_c, y_c)为:

假设Yolo的5个数据分别为:, , , , ,则有对应关系:

具体的从XML转换为Yolo格式的代码为:

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
from os import getcwdclasses = ["knife", 'scissors', 'lighter', 'USBFlashDisk', 'pressure', 'plasticBottleWithaNozzle', 'seal', 'battery']   # 改成自己的类别
abs_path = os.getcwd()
print(abs_path)def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(in_path, out_path):in_file = open(in_path, encoding='UTF-8')out_file = open(out_path, 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):cls = obj.find('name').textif cls not in classes:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

存储的数据文件夹参考:

- xray-image- train#存放训练图片- x.jpg- val##存放验证图片-label- train#存放训练label- x.txt- val#存放验证label

步骤2:定义yaml

在Yolo中数据集(需要提前下载https://github.com/ultralytics/yolov5)配置通过yaml格式给出,可以参考如下的格式:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/xray  # dataset root dir
train: images/train  # train images (relative to 'path') 128 images
val: images/val  # train images (relative to 'path') 128 images# Classes
nc: 8  # number of classes
names: ["knife", 'scissors', 'lighter', 'USBFlashDisk', 'pressure', 'plasticBottleWithaNozzle', 'seal', 'battery']  # class names

注意此时的yaml里面的path需要xray文件夹写为相对路径。

步骤3:训练模型

  • batch:训练时batch size

  • epoch:训练轮数

  • data:yaml文件路径

python3 train.py --img 640 --batch 2 --epochs 30 --data data/xunfei-xray2022.yaml --weights yolov5x.pt

步骤4:模型预测

save-txt:表示将预测结果写为txt

python3 detect.py --weights runs/train/exp7/weights/best.pt --source test1/domain1/ --save-txt

最终将预测结果转换为比赛需要的json格式即可,比赛的json格式为制定文件顺序,并在每个文件的列表内部写每个类别的预测结果。

往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码

【深度学习】从0学习YOLOV5:科大讯飞X光安检检测相关推荐

  1. 2021科大讯飞-X光安检图像识别赛Top1方案!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:宋志龙.王威,啄云智能GOAT战队 大家好,我们是来自浙江啄云智能 ...

  2. 深度学习论文: TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head 及其PyTorch实现

    深度学习论文: TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Dro ...

  3. 资源下载| 深度学习Pytoch1.0如何玩?这一门含900页ppt和代码实例的深度学习课程带你飞

    本文来自专知 近日,在NeurIPS 2018 大会上,Facebook 官方宣布 PyTorch 1.0 正式版发布了.如何用Pytorch1.0搞深度学习?对很多小白学生是个问题.瑞士非盈利研究机 ...

  4. halcon 深度学习标注_HALCON深度学习工具0.4 早鸟版发布了

    原标题:HALCON深度学习工具0.4 早鸟版发布了 HALOCN深度学习工具在整个深度学习过程中扮演着重要的作用,而且在将来将扮演更重要的辅助作用,大大加快深度学习的开发流程,目前发布版本工具的主要 ...

  5. halcon显示坐标_HALCON深度学习工具0.4 早鸟版发布了

    HALOCN深度学习工具在整个深度学习过程中扮演着重要的作用,而且在将来将扮演更重要的辅助作用,大大加快深度学习的开发流程,目前发布版本工具的主要作用是图像数据处理和目标检测和分类中的标注. 标注训练 ...

  6. twitter如何以图搜图_没有完整图时,如何使用图深度学习?你需要了解流形学习2.0版本...

    原标题:没有完整图时,如何使用图深度学习?你需要了解流形学习版本 流形学习,自 2000 年在著名的科学杂志<Science>被首次提出以来,已成为信息科学领域的研究热点.可能很多人会问, ...

  7. PyTorch深度学习-跟着小土堆学习

    目录 学习视频链接 一些问题 P4:Python/PyTorch学习中两大法宝函数-dir().help() P5:PyCharm及Jupyter使用及对比 P6:PyTorch加载数据初认识 P7: ...

  8. asp.net2.0学习历程 菜鸟到中级程序员的飞跃【月儿原创】

    asp.net2.0学习历程 菜鸟到中级程序员的飞跃 --30本好书点评 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.1 ...

  9. 《预训练周刊》第39期: 深度模型、提示学习

    No.39 智源社区 预训练组 预 训 练 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<预训练周刊>已经开启"订阅功能",以后我们会向您自动推送最新版的&l ...

最新文章

  1. 融资 6 亿美元后,商汤发布 5 大 AI 产品
  2. 《像计算机科学家一样思考Python(第2版)》——2.6 字符串操作
  3. 一份非常详尽的 Objective-C 到 Swift 的迁移指南
  4. It is not allowed to rename or repackage the original archive “sapjco3.jar“
  5. Mybatis-Helloword
  6. iOS之从N个数里面取M个数的组合算法
  7. 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(2)
  8. python中list和numpy的array的转换
  9. 网卡82546驱动linux,英特尔网卡驱动 Intel PRO100/1000/10GbE Win7/Win8/2
  10. HP 暗影精灵4 黑苹果 完美_HP_omen_15dc_hackintash
  11. 怎么用命令提示符打开浏览器_从您当前的命令提示符/终端目录打开文件浏览器...
  12. 【时间序列】时间序列数据的缺失填补方法总结
  13. 学信号处理要理解均值、平均偏差、标准差、方差
  14. 自己的旧手机做html服务器,旧手机改座机_怎么将手机改成为座机
  15. 让你的专属博客更加漂亮
  16. untiy Socket通信一篇通
  17. Kewail-短信接口接入流程
  18. Ubuntu下U盘没有不能新建粘贴文件 报错 [sdf] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
  19. java饥荒,我的世界1.7.10饥荒整合包
  20. Android webview支持H5页面通过js实现文件上传、图片上传

热门文章

  1. 大数据的技术生态?Hadoop、Hive、Spark之间是什么关系?
  2. vivo手机无法获取日志的问题
  3. 疫情当下:APP创业能否成为蓝海
  4. CET4翻译词汇之“四大”
  5. 关于Win10系统无法安装.NET Framework 3.5(包括.NET 2.0 和 3.0) 关于 错误代码:0x800F0950
  6. 我们需要什么样的移动开发者大会?
  7. 火雷噬嗑:去其糟粕;山火贲:取其精华
  8. 程序员转行之开一间快递驿站能挣多少钱
  9. 互感确定同名端的方法
  10. 多因子模型之因子(信号)测试平台----alphalens(一)