博主简介
AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8优化创新,轻松涨点和模型轻量化;2)目标检测、语义分割、OCR、分类等技术孵化,赋能智能制造,工业项目落地经验丰富;
**原创自研系列,**2024年计算机视觉顶会创新点
23年最火系列,内涵80+优化改进篇,涨点小能手,助力科研,好评率极高
应用系列篇:
💡💡💡本文主要内容:详细介绍了船舶目标检测 系统,在介绍算法原理的同时,给出Pytorch的源码、训练数据集以及PyQt6的UI界面。在界面中可以选择各种图片、视频进行检测识别,可进行置信度、Iou阈值设定,结果可视化等。
1.数据集介绍
数据集大小一共7000张,,按照8:1:1进行训练集、验证集、测试集随机区分。
一共有六类船只,分别是bulk cargo carrier、container ship、ore carrier、general cargo ship、fishing ship、passenger ship
细节图:
5据统计共有六种物体类别,具体数据如下:
各类标签的数量分别为:
ore carrier: 2199
passenger ship: 474
container ship: 901
bulk cargo carrier: 1952
general cargo ship: 1505
fishing boat: 2190
2.基于YOLOv8的船舶目标检测
2.1 修改seaships.yaml
path: ./data/seaships # dataset root dir
train: train.txt # train images (relative to 'path') 118287 images
val: val.txt # val images (relative to 'path') 5000 images
# number of classes
nc: 6
# class names
names:
0: ore carrier
1: passenger ship
2: container ship
3: bulk cargo carrier
4: general cargo ship
5: fishing boat
2.2 开启训练
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('ultralytics/cfg/models/v8/yolov8.yaml')
model.train(data='data/seaships/seaships.yaml',
cache=False,
imgsz=640,
epochs=100,
batch=16,
close_mosaic=10,
workers=0,
device='0',
optimizer='SGD', # using SGD
project='runs/train',
name='exp',
)
3.训练结果分析
YOLOv8 summary (fused): 168 layers, 3006818 parameters, 0 gradients, 8.1 GFLOPs
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 60/60 [01:30<00:00, 1.51s/it]
all 1890 2526 0.959 0.949 0.981 0.766
ore carrier 1890 580 0.962 0.955 0.986 0.754
passenger ship 1890 136 0.909 0.941 0.972 0.746
container ship 1890 237 0.991 0.966 0.987 0.833
bulk cargo carrier 1890 546 0.941 0.958 0.982 0.769
general cargo ship 1890 391 0.979 0.97 0.991 0.784
fishing boat 1890 636 0.97 0.903 0.969 0.711
Speed: 0.1ms preprocess, 1.9ms inference, 0.0ms loss, 1.8ms postprocess per image
F1_curve.png:F1分数与置信度(x轴)之间的关系。F1分数是分类的一个衡量标准,是精确率和召回率的调和平均函数,介于0,1之间。越大越好。
TP:真实为真,预测为真;
FN:真实为真,预测为假;
FP:真实为假,预测为真;
TN:真实为假,预测为假;
精确率(precision)=TP/(TP+FP)
召回率(Recall)=TP/(TP+FN)
F1=2*(精确率*召回率)/(精确率+召回率)
PR_curve.png :PR曲线中的P代表的是precision(精准率) ,R代表的是recall(召回率),其代表的是精准率与召回率的关系。
R_curve.png :召回率与置信度之间关系
results.png
mAP_0.5:0.95表示从0.5到0.95以0.05的步长上的平均mAP.
预测结果:
4. 船舶目标检测系统设计
4.1 PySide6介绍
受益于人工智能的崛起,Python语言几乎以压倒性优势在众多编程语言中异军突起,成为AI时代的首选语言。在很多情况下,我们想要以图形化方式将我们的人工智能算法打包提供给用户使用,这时候选择以python为主的GUI框架就非常合适了。
PySide是Qt公司的产品,PyQt是第三方公司的产品,二者用法基本相同,不过在使用协议上却有很大差别。PySide可以在LGPL协议下使用,PyQt则在GPL协议下使用。
PySide目前常见的有两个版本:PySide2和PySide6。PySide2由C++版的Qt5开发而来.,而PySide6对应的则是C++版的Qt6。从PySide6开始,PySide的命名也会与Qt的大版本号保持一致,不会再出现类似PySide2对应Qt5这种容易混淆的情况。
4.2 安装PySide6
pip install --upgrade pip
pip install pyside6 -i https://mirror.baidu.com/pypi/simple
基于PySide6开发GUI程序包含下面三个基本步骤:
- 设计GUI,图形化拖拽或手撸;
- 响应UI的操作(如点击按钮、输入数据、服务器更新),使用信号与Slot连接界面和业务;
- 打包发布;
4.3 船舶目标检测系统设计
运行
python main.py