《往期经典回顾》
项目名称 | 项目名称 | 项目名称 |
---|---|---|
1.口罩佩戴检测系统 | 2.人员抽烟检测系统 | 3.火焰烟雾检测系统 |
4.交通车辆检测系统 | 5.人员跌倒检测系统 | 6. 安全帽检测系统 |
7.河道漂浮物检测系统 | 8.钢铁缺陷检测系统 | 9. 骑行守护检测系统 |
10.无人机巡航目标检测系统 |
一、系统概述和展示🎄
1.1 摘要 🎈
无人机巡航小目标实时检测系统通过先进的图像处理和人工智能技术,实时检测无人机场景下小目标的情况,促进安全出行。本文基于YOLOv10算法框架,通过7444张真实无人机场景的训练图片(其中6471张训练集,973张验证集),训练出一个可用于检测无人机场景下人和不同车型【包含行人、自行车、汽车、面包车、卡车、三轮车、遮阳三轮车、公交车、摩托车共计9类目标】情况的有效模型。此外,为更好地展示算法效果,基于此模型开发了一款带GUI界面的基于YOLOv10的无人机巡航小目标实时检测系统,可用于实时检测人、两轮车、三轮车及四轮车情况,以及时告警。该系统是基于Python和Pyside6开发,并支持以下功能特性:
- 系统背景和系统标题更换
- 模型权重导入和初始化
- 检测置信度和IOU调节
- 检测目标的信息展示
- 检测用时的统计展示
- 检测结果和原图结果更换
- 图片导入、检测、导出、结果展示
- 视频导入、检测、暂停、导出、结果展示
- 摄像头导入、检测、结果展示
初始化界面
检测结果界面
下面将对部分核心功能进行简单展示
1. 更换背景和标题演示
- 用户可通过点击更换背景,选择想要更换背景的图片,系统便会自动更换壁纸;
- 用户可通过点击更换标题,然后在文字输入栏中输入想要更换的标题,然后点击确定,即可更改系统标题。
2. 模型选择和初始化演示
- 用户可通过点击模型选择,选择想要加载的系统模型;然后点击权重初始化即可完成模型的准备工作。
3. 图片检测演示
- 用户可通过点击图片中的选择,选择想要加载的图片文件;然后点击检测,等待弹出图片检测完成的提示框,再点击展示即可将对应的目标框展示在原始图片上,完成展示后,用户可手动点击导出将图片保存到指定位置,最后点击结束关闭图片展示区域。
- 相关展示信息,如耗时、检测目标数量、位置信息等可在检测信息一栏查看。
4. 视频和摄像头检测演示
- 用户可通过点击图片中的选择,选择想要加载的图片文件;然后点击检测,等待弹出图片检测完成的提示框,再点击展示即可将对应的目标框展示在原始图片上,完成展示后,用户可手动点击导出将图片保存到指定位置,最后点击结束关闭图片展示区域。
- 相关展示信息,如耗时、检测目标数量、位置信息等可在检测信息一栏查看。
- 对于摄像头检测模块和视频检测模块原理类似。
- 注意:摄像头检测会自动调用电脑摄像头来进行检测任务。
二、一站式使用教程🎄
第一步:安装Anaconda Prompt、Pycharm(或者vscode),参考:anaconda点击 pycharm点击
第二步:创建python环境
conda create -n YOLOv10_My python=3.8.1
第三步:激活环境
conda activate YOLOv10_My
第四步:安装ultralytics和pytorch
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install ultralytics huggingface-hub -i https://pypi.tuna.tsinghua.edu.cn/simple
第五步:安装图形化界面库
pip install pyside6==6.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
第六步:打开系统界面
python base_camera.py
注意:此环境可同时满足YOLOv8的训练以及系统的运行
三、YOLOv10原理剖析🎄
3.1 YOLOv10背景和技术原理🎈
论文题目:《YOLOv10:毫秒级实时端到端目标检测开源模型》
论文链接:https://arxiv.org/pdf/2405.14458
项目链接:https://github.com/THU-MIG/yolov10
YOLOv10诞生背景
在过去的几年里,YOLO已经成为在实时目标检测领域的主要范例,由于其有效的计算成本和检测性能之间的平衡。研究人员已经探索了YOLO的架构设计,优化目标,数据增强策略等,取得了显着的进展。然而,依赖于非最大抑制(NMS)进行后处理阻碍了端到端部署的YOLO和不利影响的推理延迟。此外,YOLO中各个组件的设计缺乏全面和彻底的检查,导致明显的计算冗余,限制了模型的能力。它呈现出次优的效率,沿着具有相当大的性能改进潜力。在这项工作中,我们的目标是从后处理和模型架构两个方面进一步推进YOLO的性能效率边界。为此,我们首先提出了一致的双重分配的NMS自由训练的YOLO,这带来了竞争力的性能和低推理延迟的同时。此外,我们介绍了整体的效率-精度驱动的模型设计策略的YOLO。我们从效率和准确性两个角度全面优化了YOLO的各个组件,这大大降低了计算开销,提高了性能。我们努力的成果是新一代的YOLO系列,用于实时端到端对象检测,称为YOLOv10✅
YOLOv10技术特点
YOLOv10架构特点:
- Backbone:采用了深度可分离卷积和逐点卷积的组合,通过1×1的逐点卷积调节通道数,再通过3×3的深度卷积进行空间下采样。这种设计在降低计算成本的同时,最大限度地保留了信息。此外,YOLOv10还引入了C2fCIB结构,其中CIB(Compact Inverted Bottleneck)替换了原本C2f中的Bottleneck,进一步提高了计算效率。
- Neck:总体上还是基于PaNet结构,但进行了一些简单的模块替换。例如,SCDown(Spatial-channel decoupled downsampling)替代了一个CBS(Convolutional Block with Shuffle),而C2fCIB替代了两个C2f。这些改进旨在提高特征融合的效果和计算效率1。
- Head:YOLOv10采用了双头架构,其中一个使用一对多分配,另一个使用一对一分配。这种设计使得模型在训练期间能够利用丰富的监督信号,而在推理期间则使用一对一分配的预测结果,从而实现无NMS的高效推理。此外,YOLOv10还引入了PSA(Positional Self-Attention)模块,这是一种高效的局部自注意力机制,用于增强特征表示能力1。
- 样本分配策略:YOLOv10的样本分配策略包括一对一分配和一对多分配。一对一分配是指仅一个预测框被分配给一个真实物体标签,这种方式避免了NMS,但由于监督信号较弱,容易导致收敛速度慢和性能欠佳。而一对多分配则是在训练期间,多个预测框被分配给一个真实物体标签,这种方法在训练阶段提供了更丰富的监督信号,有助于提高模型的检测性能1。
- Loss:YOLOv10采用了自适应的损失函数,该损失函数能够根据样本的难易程度自动调整权重,从而更好地平衡不同类别和不同大小目标的检测效果。这种自适应损失函数的设计使得YOLOv10在处理复杂场景时具有更强的鲁棒性和更高的检测精度1。
四、模型训练、评估和推理🎄
4.1 数据集介绍🎈
本文使用的是无人机角度小目标检测数据集,按照九类目标【行人、自行车、汽车、面包车、卡车、三轮车、遮阳三轮车、公交车、摩托车】进行定位与分类标注并转换成YOLO格式,并对此数据集进行了划分,可直接用于训练。此数据集共包含7444张图片,本文实验使用的训练集6471张,验证集1973张。部分数据集及标注可视化信息如下:
图片数据集的存放格式如下,在项目目录中新建datasets目录,同时将YOLO格式数据集images和labels放入指定目录下,然后修改”yolov10\my_file\object_detection\dataset_cfg”下的data.yaml文件中的path路径指向datasets文件夹(绝对路径)。
datasets:
- images
- train(此文件夹全是图片)
- val(此文件夹全是图片)
- labels
- train(此文件夹全是txt文件)
- val(此文件夹全是txt文件)
4.2 模型训练🎈
数据准备完成后,通过调用detection_train.py文件进行模型训练,data参数用于加载数据集的配置文件,epochs参数用于调整训练的轮数,workers参数用于调整系统的并发能力,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:
from ultralytics import YOLOv10
import os
os.environ["GIT_PYTHON_REFRESH"] = "quiet"
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
if __name__ == '__main__':
model = YOLOv10('weights/yolov10s.pt')
result = model.train(data="data/data.yaml", epochs=100, workers=8, batch=16, imgsz=416, amp=False, device="0")
################################################################################### 恢复训练代码,注释掉上面的部分
# model = YOLOv10("runs/det/train/weights/best.pt") # 指定想要恢复训练的pt文件
# if __name__ == '__main__':
# model.train(data="data/data.yaml", resume=True, imgsz=416, batch=16, workers=4, epochs=100, amp=False, project="runs/det") # 恢复训练模型
4.3 结果评估🎈
在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况,避免过拟合和欠拟合现象。YOLOv8训练过程及结果文件保存在runs/det/目录下,我们可以在训练结束后进行查看,结果如下所示:
本文训练结果如下
4.4 模型推理🎈
模型训练结束后,我们可在runs/det/目录下可以得到一个最新且最佳的训练结果模型best.pt文件,在runs/det/train/weights目录下。我们可使用该文件进行后续的推理检测。
模型推理代码如下
import os
from ultralytics import YOLOv10
current_path = os.path.dirname(os.path.realpath(__file__))
root_path = os.path.abspath(os.path.join(current_path, "../.."))+"/"
model = YOLOv10(root_path + 'runs/det/train/weights/best.pt') # load a custom trained# Export the model
if __name__ == '__main__':
# 可自行选择想要检测的图片,如这里的bus.jpg
model.predict(root_path + 'ultralytics/assets/test1.jpg', save=True, imgsz=416, conf=0.5)
图片推理结果如下
五、项目完整目录及获取方式介绍🎄
5.1 项目完整目录🎈
本文涉及到的完整的程序文件:包括环境配置文档说明(训练和系统环境都适用)、模型训练源码、数据集、系统完整代码、系统UI文件、测试图片视频等,获取方式见文末。
模型训练代码如下
系统完整代码如下
5.2 项目获取方式🎈
获取链接:见bilibili视频置顶评论 (https://www.bilibili.com/video/BV1DBtNe8Exr/?spm_id_from=333.999.0.0)
5.3 作者介绍🎈
哈喽大家好, AI应用视界工作室致力于深入探索人工智能算法与应用开发的交互,涵盖目标分类、检测、分割、跟踪、人脸识别等关键领域,以及系统架构的创新设计与实现。我们的目标是为广大人工智能研究者提供一个丰富、权威的参考资源,同时也期待与您共同交流,推动人工智能技术的进步。如有相关算法交流学习和技术需求,请关注下方公众号(或者搜索 AI应用视界)可与我们取得联系。
微信公众号搜索方式:1.AI应用视界;2.可根据CSDN下方名片进行搜索