【毕业设计】深度学习卫星遥感图像检测与识别系统(目标检测)

news2024/11/24 20:41:15

文章目录

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


0 前言

🔥 Hi,大家好,这里是丹成学长的毕设系列文章!

🔥 对毕设有任何疑问都可以问学长哦!

这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是

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

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

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

🧿 选题指导, 项目分享:

https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md

在这里插入图片描述

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 最后

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

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

相关文章

LeetCode-44-通配符匹配

1、递归 具体思路同LeetCode-剑指19-正则表达式匹配,但在本题中由于字符串长度过长会导致超时。 在这里插入代码片class Solution { public:bool isMatch(string s, string p) {if (p.empty()) return s.empty();bool first_match !s.empty() && (s[0] …

Gradle修改镜像库 ,初始启动配置 init.gradle

目录 ■前言 ■代码放置位置 ■具体代码 代码建议: ■Gradle 的 更多知识(私密) ■前言 默认镜像库太慢了,在【初始启动配置(init.d)】中,添加xxx.gradle (init.gradle) 文件,指…

网络自动化运维(NetDevOps)创作者推荐

前言: 随着NetDevOps技术登上了历史舞台,越来越多的从业者开始利用NetDevOps简化网络的运维,并进行了技术分享,将蛋糕越做越大。在这里,仅代表个人对这些无私奉献的网络、运维工程师们表达由衷的敬意。 此外&#xff…

用户身份验证的令牌—Token教程

一、什么是Token? 1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应…

学习二十大奋进新征程线上知识答题小程序登录技术点分析与实现

学习二十大奋进新征程线上知识答题小程序登录技术点分析与实现 在最新搭建的知识答题小程序,遇到了微信授权登录上的技术难点,所以对于以往的那套登录框架不能使用了,需要搭建一套新的注册登录流程框架。 不得不做出调整,为此&a…

json交叉编译并移植到嵌入式开发板

1、解压:tar -xvf json-c-0.9.tar.gz 默认解压在当前目录 2、进入解压后的目录:$ cd cd json-c-0.9/ 3、执行: sudo ./configure CCaarch64-linux-gnu-gcc --hostarm-linux --prefix/opt/json-c-0.9/ 说明:CC赋值为嵌入式开发环…

Java之线程详解(二)——线程安全概述、synchronized锁

一、线程安全概述 什么是线程安全问题? 当多个线程共享同一个全局变量,做写的操作时(即修改该全局变量),可能会受到其他的线程干扰,发生线程安全问题。 eg: public class Thread01 implemen…

丝裂原活化蛋白激酶TaMPK3抑制植物对ABA的反应

文章信息 题目:Mitogen-activated protein kinase TaMPK3 suppresses ABA response by destabilising TaPYL4 receptor in wheat 刊名:New Phytologist 作者:Ying Liu,You-Zhi Ma, Zhao-Shi Xu et al. 单位:Instit…

【Linux】如何在Linux下提交代码到gittee

文章目录使用 git 命令行创建项目三板斧第一招: git add三板斧第二招: git commit三板斧第三招: git push其他几个重要的命令git pull(将远端同步到本地)git rm(删除)git log(查看提交日志)使用 git 命令行…

GPT语言模型

GPT:GPT采用了大量的无监督的数据进行预训练(Pre-training),并在有监督的数据上进行微调(Fine-tuning)来做具体的NLP的任务。结构:GPT使用了12层12头,单向transformer的decoder部分&…

2001-2020年全国31省城镇居民人均可支配收入/居民实际收入水平

1、时间区间为:2001-2020年 2、范围包括:全国31省 3、基期:以2001年为基期 4、来源:国家统计J 5、指标包括: 城市居民消费价格指数(上年100)、城镇居民人均可支配收入(元)、实际可支配收入(2001年为基…

LabVIEW开发LabVIEW类

LabVIEW开发LabVIEW类 从概念上来说,LabVIEW面向对象编程和其它面向对象编程语言相似。但由于LabVIEW是数据流图形化编程环境,LabVIEW对类数据的操作和交互,以及LabVIEW类代码的调试方法和其它语言有所不同。 LabVIEW中的对象由值来传递&a…

02【SpringMVC的工作流程】

文章目录二、SpringMVC的工作流程2.1 SpringMVC的三大组件2.1.1 HandlerMapping:2.1.2 HandlerAdapter:2.1.3 ViewResolver:2.2 SpringMVC源码分析2.2.1 准备工作2.2.2 查看DispatcherServlet的继承体系:2.2.3 通过映射器获取执行…

工业机械设备设计与艺术设计

众所周知,外观设计是目前工业设计的一种,也是展示产品外观性能的最佳途径。如果外观设计做得好,产品可以在第一时间吸引顾客。说到外观设计,我们不得不说,工业机械的外观设计,因为机械工业是工业设计的主要…

Java客户关系系统(含源码+论文+答辩PPT等)

该项目采用技术Struts2代理注解反射MyBatisjqueryjscss等技术,项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍: 系统管理:用户登录、用户退出 员工管理:主要实现对员工的增、删、查、改功能 客户信…

ZMQ之面向服务的可靠队列(管家模式)

管家模式协议(MDP)在扩展PPP协议时引入了一个有趣的特性:client发送的每一个请求都有一个“服务名称”,而worker在像队列装置注册时需要告知自己的服务类型。MDP的优势在于它来源于现实编程,协议简单,且容易…

孩子到底是食物过敏?还是食物不耐受?

虾蟹过敏,牛奶过敏,鸡蛋过敏,甚至花生过敏……近年来,儿童食物过敏的发病率逐年上升。食物过敏对儿童危害很大,其临床症状会使儿童患病,影响身心健康;长期禁食,影响均衡营养摄入&…

Segger RTT深度使用说明-移植-Jlink rtt viewer显示-输出到Secure CRT

简介 RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响MCU的实…

重磅消息:Lazada和Shopee通过中国执照就可以开通本地店铺,享受更多的流量和资源扶持

目前Lazada平台是可以做跨境店和本地店铺的,跨境店铺指的是中国卖家通过国内的营业执照开店,本地店指的是东南亚本地的商家提供个人身份证或当地的营业执照开的店铺,那么有什么区别和优劣势 1.跨境店/本地店开店所需资料 跨境店&#xff1a…

横向的Excel输出为pdf自动分成两页怎么办?不分页,铺满整张纸的方法来了

我们工作中有时候会需要把Excel转换成pdf,一般我们用WPS的“输出为pdf”功能就可以转了。但是有些横向的Excel转换的时候,会自动分成两页,这并不是我们想要的效果。怎么才能不分成两页呢? 首先我们有一个Excel: 使用…