基于YOLOv8的船舶目标检测系统(Python源码+Pyqt6界面+数据集)

                                                                博主简介

AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8优化创新,轻松涨点和模型轻量化;2)目标检测、语义分割、OCR、分类等技术孵化,赋能智能制造,工业项目落地经验丰富;

原创自研系列, 2024年计算机视觉顶会创新点

YOLOv8原创自研》

YOLOv5原创自研》

YOLOv7原创自研》 

 

23年最火系列,内涵80+优化改进篇,涨点小能手,助力科研,好评率极高

YOLOv8魔术师》 

 《YOLOv7魔术师》

YOLOv5/YOLOv7魔术师》

《RT-DETR魔术师》

 

应用系列篇:

YOLO小目标检测》

深度学习工业缺陷检测》 

YOLOv8-Pose关键点检测》 

 

💡💡💡本文主要内容:详细介绍了船舶目标检测系统,在介绍算法原理的同时,给出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

 


http://www.niftyadmin.cn/n/5354684.html

相关文章

MySQL索引原理以及SQL优化

案例 struct index_failure_t{int id;string name;int cid;int score;string phonenumber;}Map<int,index_failure>; 熟悉C的同学知道&#xff0c;上述案例中&#xff0c;我们map底层是一颗红黑树&#xff0c;一个节点存储了一对kv&#xff08;键值对&#xff09;&…

10 Controller和RestController

Controller: 用途&#xff1a; Controller 用于定义一个传统的Spring MVC控制器。它通常用于构建传统的Web应用&#xff0c;其中页面渲染和视图呈现是重要的。 返回类型&#xff1a; 方法通常返回一个视图名称&#xff0c;该视图名称用于告诉Spring MVC渲染哪个视图。 默认情…

fetch和axios的区别

概念不同 Fetch是一种新的获取资源的接口方式&#xff0c;可以直接使用Axios是一个基于XMLHttpRequest封装的工具包&#xff0c;需要引入才可以使用 传递数据的方式不同 Fetch则是需要放在body属性中&#xff0c;以字符串的方式进行传递Axios是放到data属性里&#xff0c;以对象…

安卓主板_紫光展锐T820安卓主板方案定制

安卓主板采用了性能强劲的紫光展锐T820八核处理器&#xff0c;搭载了Android 13系统&#xff0c;为用户带来更加顺畅的操作体验。该主板不仅采用了6nm工艺&#xff0c;更加强大的算力和优越的性能&#xff0c;能够轻松实现多任务运行&#xff0c;不会出现卡顿现象。 此外&#…

算法随想录第四十八天打卡| 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

详细布置 今天就是打家劫舍的一天&#xff0c;这个系列不算难&#xff0c;大家可以一口气拿下。 198.打家劫舍 视频讲解&#xff1a;动态规划&#xff0c;偷不偷这个房间呢&#xff1f;| LeetCode&#xff1a;198.打家劫舍_哔哩哔哩_bilibili 代码随想录 class Solution(…

Pytest测试用例参数化

pytest.mark.parametrize(参数名1,参数名2...参数n, [(参数名1_data1,参数名2_data1...参数名n_data1),(参数名1_data2,参数名2_data2...参数名n_data2)]) 场景&#xff1a; 定义一个登录函数test_login,传入参数为name,password&#xff0c;需要用多个账号去测试登录功能 # …

【issue-halcon例程学习】lines_gauss.hdev

例程功能 代码如下 dev_close_window () read_image (Angio, angio-part) get_image_size (Angio, Width, Height) dev_open_window (0, 0, 3 * Width / 2, 3 * Height / 2, black, WindowID) dev_display (Angio) dev_set_color (blue) MaxLineWidth : 8 Contrast : 12 calc…

Jmeter分布式场景

Jmeter分布式 1. 为什么使用Jmter分布式测试 1.1 需求 对学院接口(查询学院-所有)进行1000用户并发访问&#xff0c;测试服务器处理批量请求能力1.2 现状 我们单台电脑由于配置(CPU、内存)问题&#xff0c;最模拟500用户时&#xff0c;就出现卡死现象按照一般的压力机配置&…