当前位置: 首页 > news >正文

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

文章目录

  • 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 paramsself.S = 7  # cell sizeself.B = 2  # boxes_per_cellself.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 threholdself.iou_threshold = 0.4#  the maximum number of boxes to be selected by non max suppressionself.max_output_size = 10self.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 directorywdir = log_dir / 'weights'  # weights directoryos.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 settingswith 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)# Configurecuda = device.type != 'cpu'init_seeds(2 + rank)with open(opt.data) as f:data_dict = yaml.load(f, Loader=yaml.FullLoader)  # data dictwith torch_distributed_zero_first(rank):check_dataset(data_dict)  # checktrain_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, namesassert len(names) == nc, '%g names found for nc=%g dataset in %s' % (len(names), nc, opt.data)  # check# Modelpretrained = weights.endswith('.pt')if pretrained:with torch_distributed_zero_first(rank):attempt_download(weights)  # download if not found locallyckpt = torch.load(weights, map_location=device)  # load checkpointif 'anchors' in hyp and hyp['anchors']:ckpt['model'].yaml['anchors'] = round(hyp['anchors'])  # force autoanchormodel = Model(opt.cfg or ckpt['model'].yaml, ch=3, nc=nc).to(device)  # createexclude = ['anchor'] if opt.cfg else []  # exclude keysstate_dict = ckpt['model'].float().state_dict()  # to FP32state_dict = intersect_dicts(state_dict, model.state_dict(), exclude=exclude)  # intersectmodel.load_state_dict(state_dict, strict=False)  # loadlogger.info('Transferred %g/%g items from %s' % (len(state_dict), len(model.state_dict()), weights))  # reportelse:model = Model(opt.cfg, ch=3, nc=nc).to(device)  # create# Freezefreeze = ['', ]  # 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# Optimizernbs = 64  # nominal batch sizeaccumulate = max(round(nbs / total_batch_size), 1)  # accumulate loss before optimizinghyp['weight_decay'] *= total_batch_size * accumulate / nbs  # scale weight_decaypg0, pg1, pg2 = [], [], []  # optimizer parameter groupsfor k, v in model.named_parameters():v.requires_grad = Trueif '.bias' in k:pg2.append(v)  # biaseselif '.weight' in k and '.bn' not in k:pg1.append(v)  # apply weight decayelse:pg0.append(v)  # all else

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

5 最后

🧿 更多资料, 项目分享:

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

相关文章:

  • 场景驱动的 AI 体验设计:如何让智能 IDE 赋能遗留系统重写
  • 键盘快捷键工具Keyboard Maestro mac中文版介绍
  • ECharts 实例2
  • ssm租房小程序-计算机毕设 附源码42196
  • 国科大数据挖掘期末复习——聚类分析
  • ModuleNotFoundError: No module named ‘unstructured‘
  • 易航网址引导系统 v1.9 源码:去除弹窗功能的易航网址引导页管理系统
  • [NISACTF 2022]join-us
  • 15 Go的并发
  • 02-微服务的拆分规则和基于RestTemplate的远程调用
  • DAY60 84.柱状图中最大的矩形
  • U4_1:图论之DFS/BFS/TS/Scc
  • 【鸿蒙应用ArkTS开发系列】- 灌水区,鸿蒙ArkTs开发有问题可以在该帖中反馈
  • 【深入理解Typescript】—— 第一章:为什么要使用Typescript
  • Me-and-My-Girlfriend-1
  • chrome扩展demo1-小时钟
  • Django 博客开发教程 16 - 统计文章阅读量
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • gops —— Go 程序诊断分析工具
  • Java读取Properties文件的六种方法
  • js ES6 求数组的交集,并集,还有差集
  • ng6--错误信息小结(持续更新)
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SQLServer之创建显式事务
  • vue-cli3搭建项目
  • 百度地图API标注+时间轴组件
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 时间复杂度与空间复杂度分析
  • 微服务核心架构梳理
  • const的用法,特别是用在函数前面与后面的区别
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​香农与信息论三大定律
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $ git push -u origin master 推送到远程库出错
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2015)JS ES6 必知的十个 特性
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)球球大作战
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (待修改)PyG安装步骤
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • .Mobi域名介绍
  • .Net - 类的介绍
  • .NET : 在VS2008中计算代码度量值
  • .net core webapi 大文件上传到wwwroot文件夹
  • .Net Core 中间件与过滤器
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net网站发布-允许更新此预编译站点
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [5] CUDA线程调用与存储器架构
  • [ai笔记4] 将AI工具场景化,应用于生活和工作