计算机设计大赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测

news2024/11/18 4:30:21

文章目录

  • 0 前言
  • 1 课题背景
  • 2 实现效果
  • 3 Yolov5算法
  • 4 数据处理和训练
  • 5 最后

0 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 **深度学习卫星遥感图像检测与识别 **

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:5分

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

在这里插入图片描述

1 课题背景

近年来,世界各国大力发展航空航天事业,卫星图像的目标检测在各行各业的应用得到了快速的发展,特别是军事侦查、海洋船舶和渔业管理等领域。由于卫星图像中有价值的信息极少,卫星图像数据规模巨大,这迫切需要智能辅助工具帮助相关从业人员从卫星图像中高效获取精确直观的信息。
本文利用深度学习技术,基于Yolov5算法框架实现卫星图像目标检测问题。

2 实现效果

实现效果如下:可以看出对船只、飞机等识别效果还是很好的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 Yolov5算法

简介
下图所示为 YOLOv5 的网络结构图,分为输入端,Backbone,Neck 和 Prediction 四个部分。其中,
输入端包括 Mosaic 数据增强、自适应图片缩放、自适应锚框计算,Backbone 包括 Focus 结构、CSP
结 构,Neck 包 括 FPN+PAN 结 构,Prediction 包 括GIOU_Loss 结构。
在这里插入图片描述
相关代码

class Yolo(object):
    def __init__(self, weights_file, verbose=True):
        self.verbose = verbose
        # detection params
        self.S = 7  # cell size
        self.B = 2  # boxes_per_cell
        self.classes = ["aeroplane", "bicycle", "bird", "boat", "bottle",
                        "bus", "car", "cat", "chair", "cow", "diningtable",
                        "dog", "horse", "motorbike", "person", "pottedplant",
                        "sheep", "sofa", "train","tvmonitor"]
        self.C = len(self.classes) # number of classes
        # offset for box center (top left point of each cell)
        self.x_offset = np.transpose(np.reshape(np.array([np.arange(self.S)]*self.S*self.B),
                                              [self.B, self.S, self.S]), [1, 2, 0])
        self.y_offset = np.transpose(self.x_offset, [1, 0, 2])

        self.threshold = 0.2  # confidence scores threhold
        self.iou_threshold = 0.4
        #  the maximum number of boxes to be selected by non max suppression
        self.max_output_size = 10

        self.sess = tf.Session()
        self._build_net()
        self._build_detector()
        self._load_weights(weights_file)

4 数据处理和训练

数据集
本项目使用 DOTA 数据集,原数据集中待检测的目标如下
在这里插入图片描述
原数据集中的标签如下
在这里插入图片描述
图像分割和尺寸调整
YOLO 模型的图像输入尺寸是固定的,由于原数据集中的图像尺寸不一,我们将原数据集中的图像按目标分布的位置分割成一个个包含目标的子图,并将每个子图尺寸调整为
1024×1024。分割前后的图像如所示。
分割前
在这里插入图片描述
分割后
在这里插入图片描述
模型训练
在 yolov5/ 目录,运行 train.py 文件开始训练:

python train.py --weight weights/yolov5s.pt --batch 16 --epochs 100 --cache

其中的参数说明:

  • weight:使用的预训练权重,这里示范使用的是 yolov5s 模型的预训练权重
  • batch:mini-batch 的大小,这里使用 16
  • epochs:训练的迭代次数,这里我们训练 100 个 epoch
  • cache:使用数据缓存,加速训练进程

相关代码

#部分代码
def train(hyp, opt, device, tb_writer=None):
    logger.info(f'Hyperparameters {hyp}')
    log_dir = Path(tb_writer.log_dir) if tb_writer else Path(opt.logdir) / 'evolve'  # logging directory
    wdir = log_dir / 'weights'  # weights directory
    os.makedirs(wdir, exist_ok=True)
    last = wdir / 'last.pt'
    best = wdir / 'best.pt'
    results_file = str(log_dir / 'results.txt')
    epochs, batch_size, total_batch_size, weights, rank = \
        opt.epochs, opt.batch_size, opt.total_batch_size, opt.weights, opt.global_rank

    # Save run settings
    with open(log_dir / 'hyp.yaml', 'w') as f:
        yaml.dump(hyp, f, sort_keys=False)
    with open(log_dir / 'opt.yaml', 'w') as f:
        yaml.dump(vars(opt), f, sort_keys=False)

    # Configure
    cuda = device.type != 'cpu'
    init_seeds(2 + rank)
    with open(opt.data) as f:
        data_dict = yaml.load(f, Loader=yaml.FullLoader)  # data dict
    with torch_distributed_zero_first(rank):
        check_dataset(data_dict)  # check
    train_path = data_dict['train']
    test_path = data_dict['val']
    nc, names = (1, ['item']) if opt.single_cls else (int(data_dict['nc']), data_dict['names'])  # number classes, names
    assert len(names) == nc, '%g names found for nc=%g dataset in %s' % (len(names), nc, opt.data)  # check

    # Model
    pretrained = weights.endswith('.pt')
    if pretrained:
        with torch_distributed_zero_first(rank):
            attempt_download(weights)  # download if not found locally
        ckpt = torch.load(weights, map_location=device)  # load checkpoint
        if 'anchors' in hyp and hyp['anchors']:
            ckpt['model'].yaml['anchors'] = round(hyp['anchors'])  # force autoanchor
        model = Model(opt.cfg or ckpt['model'].yaml, ch=3, nc=nc).to(device)  # create
        exclude = ['anchor'] if opt.cfg else []  # exclude keys
        state_dict = ckpt['model'].float().state_dict()  # to FP32
        state_dict = intersect_dicts(state_dict, model.state_dict(), exclude=exclude)  # intersect
        model.load_state_dict(state_dict, strict=False)  # load
        logger.info('Transferred %g/%g items from %s' % (len(state_dict), len(model.state_dict()), weights))  # report
    else:
        model = Model(opt.cfg, ch=3, nc=nc).to(device)  # create

    # Freeze
    freeze = ['', ]  # parameter names to freeze (full or partial)
    if any(freeze):
        for k, v in model.named_parameters():
            if any(x in k for x in freeze):
                print('freezing %s' % k)
                v.requires_grad = False

    # Optimizer
    nbs = 64  # nominal batch size
    accumulate = max(round(nbs / total_batch_size), 1)  # accumulate loss before optimizing
    hyp['weight_decay'] *= total_batch_size * accumulate / nbs  # scale weight_decay

    pg0, pg1, pg2 = [], [], []  # optimizer parameter groups
    for k, v in model.named_parameters():
        v.requires_grad = True
        if '.bias' in k:
            pg2.append(v)  # biases
        elif '.weight' in k and '.bn' not in k:
            pg1.append(v)  # apply weight decay
        else:
            pg0.append(v)  # all else

训练开始时的日志信息
在这里插入图片描述
在这里插入图片描述

5 最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1462428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ps:灰度模式

Ps菜单:图像/模式/灰度 Image/Mode/Grayscale 灰度 Grayscale模式是一种特定的色彩模式,用于处理没有彩色信息的图像。 在灰度模式下,图像不包含颜色,只显示黑色、白色及其间的灰色阶。 这种模式对于需要强调光影、纹理和形状而不…

速卖通跨境智星批量注册账号所需要的资源介绍

在寻找批量注册速卖通买家账号的道路上,我们发现了一个强大的工具——速卖通跨境智星。但在使用它之前,我们需要准备以下关键资源: 邮箱:注册买家号必不可少的资源之一。我们推荐使用国外的邮箱服务,比如outlook、Hot…

不破不立,那些年错过的Python

随着OpenAI的发展,Python的重要性不言而喻。不知你是否和我一样,不知道曾经说过多少次我要学Python,都没有执行起来… 近期我在知识库中更新了一波Python教程,选取了这一篇分享给大家。 前言 很多时候我们需要让程序变成交互性的…

【LeetCode】升级打怪之路 Day 01:二分法

今日题目: 704. 二分查找35. 搜索插入位置34. 在排序数组中查找元素的第一个和最后一个位置 目录 今日总结Problem 1: 二分法LeetCode 704. 二分查找 【easy】LeetCode 35. 搜索插入位置 ⭐⭐⭐⭐⭐LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 【medi…

类和对象 01【C++】

目录 一、 类的引入1. 类的定义2. 类的访问限定符及封装(1) 访问限定符(2) 封装 3. 类的实例化4. 类对象模型(1) 计算类对象的大小(2) 类对象的存储方式 5. this指针 二、 类的6个默认成员函数1. 构造函数2. 析构函数3. 拷贝构造函数4. 赋值运算符重载5. 取地址重载6. const取地…

gem5学习(23):经典缓存——Classic Caches

目录 一、Interconnects 1、Crossbars 二、Debugging 官网教程:gem5: Classic caches 默认缓存是一个带有MSHR(未命中状态保持寄存器)和WB(写缓冲区)的非阻塞缓存,用于读取和写入未命中。缓存还可以启用…

常用驱动适配总结

I2C驱动 I2C中主要包含5个管脚,包括:复位信号,中断信号,I2C时钟信号,I2C数据信号,触摸屏供电信号(我的电路供电没有控制信号)。设备树相对简单了很多。 SCL和SDA管脚是需要在i2c的…

WebRTC最新版报错解决:city.wav:missing and no known rule to make it (二十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

Chrome关闭时出现弹窗runtime error c++R6052,且无法关闭

环境: Chrome 版本121 Win10专业版 问题描述: Chrome关闭时出现弹窗runtime error cR6052,且无法关闭 解决方案: 1.任务管理器打开,强制结束进程 2.再次打开谷歌浏览器,打开设置关于Chrome&#xff0…

Chrome插件精选 — 缓存清理

Chrome实现同一功能的插件往往有多款产品,逐一去安装试用耗时又费力,在此为某一类型插件挑选出比较好用的一款或几款,尽量满足界面精致、功能齐全、设置选项丰富的使用要求,便于节省一个个去尝试的时间和精力。 1. Chrome清理大师…

MySQL|MySQL基础(求知讲堂-学习笔记【详】)

MySQL基础 目录 MySQL基础一、 MySQL的结构二、 管理数据库1)查询所有的数据库2)创建数据库3)修改数据库的字符编码4)删除数据库5)切换操作的数据库 三、表的概念四、字段的数据类型4.1 整型4.2 浮点型(float和double)…

机试笔记-害死人不偿命的(3n+1)猜想

来自 “胡凡《算法笔记》” 比较容易理解的题目 应该要想到用while()循环,因为题设中给出了当 n 1的时候脱离计算的要求,所以以后计算的过程中应该想到用while()的循环作为测试条件

【linux】【Shell】Linux基础命令集

目录 一、常用操作命令 二、编辑命令 三、挂载磁盘命令 一、常用操作命令 1、cd :更改文件目录命令 1.切换到主目录cd2.切换到目录/tmpcd /tmp3.切换到当前目录 dir目录cd dir4.切换到根目录cd /5.切换到上一级目录cd ..6.切换到二级目录cd ../..7.切换到主目录&#xff0…

打造纯Lua组件化开发模式:Unity xLua框架详解

在传统的Unity开发中,通常会使用C#来编写游戏逻辑和组件。但是,随着Lua在游戏开发中的应用越来越广泛,我们可以将游戏逻辑和组件完全用Lua来实现,实现纯Lua的组件化开发模式。这样做的好处是可以更加灵活地修改游戏逻辑&#xff0…

【算法与数据结构】1020、130、LeetCode飞地的数量 被围绕的区域

文章目录 一、1020、飞地的数量二、130、被围绕的区域三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、1020、飞地的数量 思路分析:博主认为题目很抽象,非常难理解。想了好久,要理解…

行测:国考省考行测:图形推理,四面体,正六面体的图形推理方法,箭头唯一法

国考省考行测:图形推理 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和行测的重要知识点 遇到…

(十二)【Jmeter】线程(Threads(Users))之tearDown 线程组

简述 操作路径如下: 作用:在正式测试结束后执行清理操作,如关闭连接、释放资源等。配置:设置清理操作的采样器、执行顺序等参数。使用场景:确保在测试结束后应用程序恢复到正常状态,避免资源泄漏或对其他测试的影响。优点:提供清理操作,确保测试环境的整洁和可重复性…

水经注下载注记地图, mars3d加载底图

使用 水经微图 (公司提供的,需付费,我也没有这个东西)下载注记地图; 1、选择下载 选择区域: 根据需求进行选择,两边都可以选择,看个人喜欢;这里以澳门为演示 选择地图…

从零开始手写mmo游戏从框架到爆炸(二十一)— 战斗系统二

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 上一章(从零开始手写mmo游戏从框架到爆炸(二十)— 战斗系统一-CSDN博客)我们只是完成了基本的战斗,速度属性并没有…

学习数仓工具 dbt

DBT 是一个有趣的工具,它通过一种结构化的方式定义了数仓中各种表、视图的构建和填充方式。 dbt 面相的对象是数据开发团队,提供了如下几个最有价值的能力: 支持多种数据库通过 select 来定义数据,无需编写 DML构建数据时&#…