yolov3训练讯飞安检图像数据集记录

2023-10-27

前言

最近在做安检图像特定目标检测方面的工作,由于相关的数据还没有到位,前期尝试使用yolov3算法检测讯飞安检图像数据中的危险物品练练手,以下是本次工作的实录,做回顾之用。

前置工作

数据集

使用讯飞初赛提供的安检图像数据,以下摘录数据集标签的详细解释:
危险物品种类
数据集标注解释

yolov3配置

下载yolov3项目代码

git clone https://github.com/pjreddie/darknet
cd darknet

修改Makefile文件并编译

vim Makefile # 文件地址:darknet/Makefile
GPU=1               # 使用GPU训练
CUDNN=0
OPENCV=0
OPENMP=0
DEBUG=0
CC=gcc
CPP=g++
NVCC=/usr/local/cuda-9.0/bin/nvcc # 配置本地CUDA路径
AR=ar
make

实验

准备数据集

将手边的数据集转换为PASCAL VOC的格式。首先在darknet/scripts目录下创建如下形式的文件目录:

VOCdevkit
--VOC2020
----Annotations # 放入所有的xml文件(labels)
----ImageSets
------Main     # 放入train.txt, val.txt文件
----JPEGImages # 放入所有的图片文件(data)

ps:在Main文件夹中,train.txt是训练集,val.txt是验证集,test.txt是测试集,trainval.txt是训练和验证集,本次实验只准备了训练集和验证集文本
Main文件夹中txt文件只写文件名,例如

# 图像路径
darkent/scripts/VOCdevkit/VOC2020/JPEGImages/100001.jpg
# train.txt中对应条目
100001   # 对应100001.jpg图像
100002

修改darknet/scripts/voc_label.py。作用:根据Main中txt里的文件名生成相应的txt。

sets = [('2020', 'train'), ('2020', 'val')]  #同Main中txt文件一致

classes = ["knife", "scissors", "lighter", "zippooil", "pressure", "slingshot", "handcuffs", "nailpolish", "powerbank", "firecrackers"]  # 标签类别

os.system("cat 2020_train.txt 2020_val.txt > train.txt") # 将生成的文件合并
python voc_label.py  # 保存后运行

运行后会生成2020_train.txt, 2020_val.txt, train.txt,如图:
文件目录展示

下载Imagenet上预先训练的权重

wget https://pjreddie.com/media/files/darknet53.conv.74

修改darknet/cfg/voc.data

classes=10 # 训练样本集的类别总数
train=scripts/2020_train.txt # 训练样本集所在路径
valid=scripts/2020_val.txt   # 验证样本集所在路径
names=data/voc.names
backup=backup  # 权重文件备份

修改darknet/data/voc.name

knife
scissors
lighter
zippooil
pressure
slingshot
handcuffs
nailpolish
powerbank
firecrackers

修改darknet/cfg/yolov3-voc.cfg

[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=64
subdivisions=16

首先在普通模式下使用vim命令:/yolo 检索关键词,n 切换下一个匹配

[convolutional]
size=1
stride=1
pad=1
filters=45             # 修改为3*(classes+5)即3*(10+5)= 45
activation=linear

[yolo]
mask = 6,7,8
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=10            # 修改为标签类别个数,10类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1             # 如果显存很小,将random设置为0,关闭多尺度训练
[convolutional]
size=1
stride=1
pad=1
filters=45          # 修改为3*(classes+5)即3*(10+5)= 45
activation=linear

[yolo]
mask = 0,1,2
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=10         # 修改为标签类别个数,10类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1          # 如果显存很小,将random设置为0,关闭多尺度训练
[convolutional]
size=1
stride=1
pad=1
filters=45       # 修改为3*(classes+5)即3*(10+5)= 45
activation=linear

[yolo]
mask = 3,4,5
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=10      # 修改为标签类别个数,10类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=1        # 如果显存很小,将random设置为0,关闭多尺度训练

开始训练

在目录darknet/下执行命令,注意各参数文件的目录是否正确。

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/darknet53.conv.74

测试识别

训练后使用darknet/backup目录下的权重文件进行测试识别

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_20000.weights data/100010.jpg

测试图片:
测试图片

测试结果:
测试结果-1
测试结果-2

yolov3训练过程中输出参数详解

在这里插入图片描述

  • Region XX 表示不同尺度上检测的结果。在darknet中,所有训练图片中的一个batch又被分成subdivision份来进行计算。
  • Region XX Avg IOU: 表示在当前subdivision内的图片的平均IOU(预测矩形框同真值矩形框的交集与并集之比)。越大越好,最大为1。
  • Class: 标注物体分类的正确率。越大越好,最大为1。
  • Obj:越接近1越好。
  • No Obj:期望该值越小越好,但不为零。
  • .5R:同ground true的IOU值大于0.5为正样本时的recall/count,是当前模型在所有subdivision图片中检测出的正样本与实际的样本的比值。全部正样本被正确的检测到时为1。
  • .75R:同ground true的IOU值大于0.75为正样本时的recall/count。count:所有当前subdivision图片中包含正样本的图片的数量。

在这里插入图片描述

  • 当前训练的迭代次数
  • 总体的Loss
  • 平均Loss(此数值低于0.060730 avg即可终止训练)
  • 当前的学习率
  • 当前batch训练花费的总时间
  • 到目前为止参与训练的图片的总量==迭代次数 * batch

后续工作

使用yolo算法对安检图像中的目标进行识别的准确率不高,由于许多目标非专业人士一般都识别不出来(我真看不出来打火机之类的),后续尝试在这方面继续研究,提升安检图像识别的准确率。

引用

[1] https://blog.csdn.net/weixin_42731241/article/details/81352013
[2] https://blog.csdn.net/tintinetmilou/article/details/88877039

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

yolov3训练讯飞安检图像数据集记录 的相关文章

  • 理解attention的image to caption(图片的文字描述)

    更多查看 https github com B C WANG AI Storage 4 1 理解attention的image to caption 图片的文字描述 4 1 1 一 一个简单模型 Encoder 使用预训练的CNN进行fin
  • [Transformer]TNASP: A Transformer-based NAS Predictor with a Self-evolution Framework

    TNASP 基于Transformer和自进化的的NAS Predictor Abstract Section I Introduction Section II Related Work Training based network pe
  • 使用 OpenVINO™及实际应用场景数据集加强已训练好的AI模型 - TensorFlow

    作者 Stewart Christie Ragesh Hajela及李翊玮 机器学习要求我们拥有现有数据 并非应用在运行时将使用的数据 而是要从中学习的数据库 实际上 你需要大量的真实数据 越多越好 您提供的示例越多 计算机应能够学习得越好
  • 半监督目标检测(三)

    目录 ISMT 动机 1 Overview 2 Pseudo Labels Fusion 3 Interactive Self Training 4 Mean Teacher Unbiased Teacher 动机 1 Overview 2
  • [NAS]MCUNet: Tiny Deep Learning on IoT Devices

    MCUNet 在 IoT设备上的微型深度学习 Abstract Section I Introduction Section II Background Section III System Algorithm Co Design Part
  • 基于pytorch训练图像识别

    1 准备数据集 2 清洗图片 3 划分训练测试数据 4 训练模型 5 保存模型 6 使用模型预测 报错 OSError Unrecognized data stream contents when reading image file 稍微
  • python交通信号灯检测yolov5交通信号灯识别,红绿灯检测,左转右转识别

    python交通信号灯检测yolov5交通信号灯识别 红绿灯检测 左转右转识别 交通信号灯的检测与识别是无人驾驶与辅助驾驶必不可少的一部分 其识别精度直接关乎智能驾驶的安全 一般而言 在实际的道路场景中采集的交通信号灯图像具有复杂的背景 且
  • 对一个文件夹下的图片进行批量缩放(resize)处理

    文章目录 问题背景 环境配置 完整代码 代码解释 另一种更简单的写法 问题背景 使用GPU训练时 有时出现了图片太大 导致处理起来速度慢或内存不够崩掉的情况 因此需要对原图片进行缩放 本文介绍了批量处理的方法 成功将一个文件下的所有图片 较
  • 轻松理解转置卷积(transposed convolution)或反卷积(deconvolution)

    本译文很大程度上保留了原文原貌 并添加了细节便于理解 各种指代 在CNN中 转置卷积是一种上采样 up sampling 的常见方法 如果你不清楚转置卷积是怎么操作的 那么就来读读这篇文章吧 本文的notebook代码在Github 上采样
  • Vulkan 与 OpenGL 对比

    Vulkan 与 OpenGL 对比 Vulkan与OpenGL相比 可以更详细的向显卡描述你的应用程序打算做什么 从而可以获得更好的性能和更小的驱动开销 Vulkan的设计理念与Direct3D 12和Metal基本类似 但Vulkan作
  • seed+transformer+finetune+图文融合+VLP+Prompt Learning整合

    1 Seed 在神经网络中 参数默认是进行随机初始化的 不同的初始化参数往往会导致不同的结果 如果不设置的话每次训练时的初始化都是随机的 导致结果不确定 当得到比较好的结果时我们通常希望这个结果是可以复现的 如果设置初始化 则每次初始化都是
  • 精美简历生成器(Nice_Resume_Builder)

    文章目录 前言 功能演示 后记 前言 写简历有时候是个比较麻烦的事情 不管是用Word还是用别的设计工具 如果内容经常需要修改的话 那么修改后通常有需要花时间去调整格式排版 这个过程令我烦躁 毫无意义的浪费时间 所以稍微花点时间弄了这个东西
  • CUDA编程 基础与实践 学习笔记(十)

    线程束 warp 一个GPU由多个SM组成 一个SM上可以放多个线程块 不同线程块之间并行或顺序执行 一个线程块分为多个线程束 一个线程束由32个线程 有连续的线程号 组成 从更细粒度来看 一个SM以一个线程束为单位产生 管理 调度 执行线
  • 论文阅读(21 AAAI)Mind-the-Gap Unsupervised Domain Adaptation for Text-Video Retrieval

    Task 视频文本检索 Setting Unsupervised Domain Adaptation 所使用的数据集 ActivityNet Captions MSR VTT LSMDC MSVD 经验风险最小化面临着两种类型的domain
  • Python报错No module named 'cv2'

    import cv2 Python运行过程中报错No module named cv2 Traceback most recent call last File Users congjam PycharmProjects Jam Test
  • yolov3项目实战——基于PyTorch实现的目标检测项目实战(附代码)

    一 数据准备 数据准备见 使用精灵标注助手制作yolov3训练数据集 附解析xml代码 本篇文章为项目实战部分 理论部分简析见 YoLov1 YoLov3演变历程 思维导图 二 项目代码部分 1 cfg py CLASS NUM 10 an
  • YOLOv5 Focus C3 各模块详解及代码实现

    目录 yolov5s yaml yolov5s yaml基本参数含义 一些基本参数 BackBone Head Focus 一 Focus模块的作用 Focus的参数量 Yolov3和Yolov5的改进对比 关于Focus的补充 网络结构图
  • windows10进行Colmap配置

    colmap下载 https demuc de colmap 新的colmap按照官网的编译方式仅需要预装好CMake Boost QT5 CUDA和CGAL 1 CMake CMake安装最简单 去官网下载好压缩包解压即可 建议下载新版
  • Layer Norm

    参考ConvNeXt中的Layer Normalization LN 海斌的文章 知乎 https zhuanlan zhihu com p 481901798 Layer Norm本来是一个样本norm自己 如图所示 也就是说 在 C H
  • 指针式仪表的自动读数与识别

    指针式仪表的自动读数与识别 前言 概述 步骤概括 1 仪表图像预处理 2 刻度线提取 2 1轮廓查找 2 2面积筛选 长宽比 距离 2 3刻度线轮廓拟合直线 3 指针轮廓提取 3 1 霍夫直线检测原理 4 结果 5 Pyqt5 5 1功能

随机推荐

  • Android Studio使用lombok插件

    1 使用android studio 在插件中检索lombok下载安装 2 build gradle导入依赖 implementation org projectlombok lombok 1 18 8 annotationProcesso
  • 使用PostMan测试接口的时候如何在Header中添加token验证

    前提 由于业务要求 每次接口请求都是post方式 且头部需要在自定义字段中定义token字段 做法 在Authorization中添加APIKey 然后添加token和token的值 因为这里只是简单的开发个测试接口 所以不能通过登录验证去
  • #Java 拆分数字123456为[1,2,3,4,5,6]

    原题目 有int num 123456 如何在不转字符串并且不使用split 方法的情况下将其拆分为 1 2 3 4 5 6 解答 int num 1233456 int fac 10 算术因子 ArrayList
  • $.ajax()post方式请求参数无法传递,request.getParameter()无法获取

    ajax post方式请求参数无法传递 request getParameter 无法获取 在前台页面中 ajax url ctx rediscluster delete do data rname rname type post data
  • vue使用高德地图报错:AMap.DistrictSearch is not a constructor问题解决

    这个问题说的 是没有初始化 解决如下 参考 https blog csdn net shidaping article details 78537730
  • 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.

    问题 from flask restful reqparse 自定义的help内容无法显示 代码如下 from flask restful import reqparse class EquipmentStaticView views Me
  • Unity Android手机触屏事件

    一 下面先说经常用的三个事件 手指按下 手指移动 手指松开 1 手指按下 if input touchCount 1 if input touches 0 phase TouchPhase Beagn 手指按下时 要触发的代码 2 手指在屏
  • 监控系统 服务器配置,监控系统服务器配置

    监控系统服务器配置 内容精选 换一换 简要介绍Mesos是一个集群管理器 提供了有效的 跨分布式应用或框架的资源隔离和共享 可以管理Hadoop MPI Hypertable Spark等集群 语言 C C 一句话描述 集群管理器开源协议
  • docker 报错 Container is not running

    我在运行docker exec it 56b90db5253e bin bash报错 出现这个问题 是因为Container容器之前已经启动过了 需要执行docker start 56b90db5253e就可以解决了
  • 转:前端 100 问:能搞懂80%的请把简历给我

    前端 100 问 能搞懂80 的请把简历给我 引言 半年时间 几千人参与 精选大厂前端面试高频 100 题 这就是 壹题 在 2019 年 1 月 21 日这天 壹题 项目正式开始 在这之后每个工作日都会出一道高频面试题 主要涵盖阿里 腾讯
  • 【工具】谷歌浏览器禁用JS

    操作 F12 进入调试窗口 ctrl shift p 调出命令行工具 输入 disable javascript 选中后回车执行 反之 enable javascript 启用JS 或者直接关闭调试窗口 好处 绕开JS校验 可以直接复制代码
  • java导入csv格式文件之身份证格式处理

    一 出现的问题 csv中的身份证号如下图 导到数据库中的结果 因此怎样导入才能使身份证能够正常导入呢 2 解决方案 第一步 选中身份证那一列 第二步 右键选择 设置单元格格式 第三步 数字列中 选择 特殊 gt 邮政编码 点击确定
  • MySql基础教程(二):数据类型

    MySql基础教程 二 数据类型 MySQL 中定义数据字段的类型对你数据库的优化是非常重要的 MySQL 支持多种类型 大致可以分为三类 数值 日期 时间和字符串 字符 类型 数值类型 MySQL 支持所有标准 SQL 数值数据类型 这些
  • 【C++11】随机数引擎与随机数类

    文章目录 随机数引擎与伪随机数 获取 真随机数 静态随机数引擎 随机数种子 std random device 服从均匀分布的整型随机数 服从均匀分布的实型随机数 服从标准正态分布的随机数 服从二项分布的随机结果 随机数引擎与伪随机数 C
  • 【CSDN竞赛】第八期解题报告

    文章目录 感想 关于自己 关于平台 第一题 难度 入门但是不完全入门 题目描述 90分做法 100分做法 第二题 难度 中等 题目描述 100分做法 第三题 难度 简单 中等 题目描述 100分做法 第四题 难度 中等 题目描述 100分做
  • 使用Qt开发俄罗斯方块游戏(1)

    使用Qt开发俄罗斯方块游戏 可能大家都比较感兴趣吧 那么就快看下面的详细讲解吧 其实在Qt Creator中已经有了俄罗斯方块的例子 大家可以在帮助中搜索Tetrix进行查看 其内容如下 但是对于初学者 这个例子并不是那么容易就能看懂 所以
  • 【图卷积神经网络】1-入门篇:为什么使用图神经网络(下)

    为什么使用图神经网络 在本书中 我们将重点介绍图学习技术中的深度学习家族 通常称为图神经网络 GNNs是一种新的深度学习架构类别 专门设计用于处理图结构化数据 与主要用于文本和图像的传统深度学习算法不同 GNNs明确地用于处理和分析图数据集
  • CSS中line-height属性

    line height CSS 属性用于设置多行元素的空间量 如多行文本的间距 对于块级元素 它指定元素行盒 line boxes 的最小高度 对于非替代的 inline 元素 它用于计算行盒 line box 的高度 CSS Demo l
  • Latex中插入多张图片,实现并排排列或者多行多列排列

    最近需要用latex插入多张图片 达到这么一个效果 但是我原来只插入过一张图片 图片内容来源于网络 是国漫一人之下的宝儿姐 强推这部国漫 代码如下 效果如图 begin figure centering includegraphics he
  • yolov3训练讯飞安检图像数据集记录

    yolov3训练讯飞安检图像数据集记录 前言 前置工作 数据集 yolov3配置 下载yolov3项目代码 修改Makefile文件并编译 实验 准备数据集 下载Imagenet上预先训练的权重 修改darknet cfg voc data