保姆级教程:以SAR图像目标检测为例

news2024/11/24 2:24:14

一、项目出发点

AI Studio为我们提供了免费的GPU资源,当我们在NoteBook环境中把代码调试成功后,通常一个训练任务耗时较长,而Notebook离线运行有时长限制,一不小心就容易被kill掉。

如何解决这一问题?

后台任务帮到你!有关什么是后台任务,以及如何起一个后台任务,官方已经出了相关教程。

本次分享将基于笔者的一个任务需求-SAR图像目标检测,带领大家从0到1跑通一个检测任务的后台训练,希望能为有类似需求的同学提供一点帮助。

二、Notebook离线调试

2.1 数据集准备

这一步是为模型训练做好准备

数据集获取有两种方式:

  • 在AI Studio平台-数据集中搜索是否有自己需要的数据集;
  • 如果是自己收集的数据,首先需要制作成为VOC 或者 COCO 格式的数据,这里笔者已经把一个SAR图像目标检测数据集SSDD制作好了,然后上传到了AI Studio平台SSDD遥感SAR目标检测数据集-COCO格式

2.2 新建Notebook任务

新建一个Notebook任务, AI Studio平台注册账号后,点击创建项目-选择NoteBook任务,然后添加上一步的数据集,参考下图操作(注意数据集选用SSDD遥感SAR目标检测数据集-COCO格式),完成项目创建。

2.3 环境准备

本次任务我们将采用PaddleDetection框架完成训练任务,为此需要先将PaddleDetection下载到本地:

git clone https://github.com/PaddlePaddle/PaddleDetection.git
# 如果下载失败,换成gitee源
git clone https://gitee.com/PaddlePaddle/PaddleDetection.git

安装环境依赖:

cd PaddleDetection
pip install -r requirements.txt
# 编译安装paddledet
python setup.py install

测试是否安装成功:

python ppdet/modeling/tests/test_architectures.py

如果出现下图,说明安装成功:

2.4 准备任务调试

为了完成训练任务,我们需要准备两个配置文件:

  • 数据集配置文件
在`PaddleDetection/configs/datasets`中新建coco_detection_ssdd.yml
其中写入:
metric: COCO
num_classes: 1

TrainDataset:
  name: COCODataSet
  image_dir: JPEGImages
  anno_path: train.json
  dataset_dir: /home/aistudio/datasets/ssdd/
  data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']

EvalDataset:
  name: COCODataSet
  image_dir: JPEGImages
  anno_path: val.json
  dataset_dir: /home/aistudio/datasets/ssdd/
  allow_empty: true

TestDataset:
  name: ImageFolder
  anno_path: val.json # also support txt (like VOC's label_list.txt)
  dataset_dir: /home/aistudio/datasets/ssdd/ # if set, anno_path will be 'dataset_dir/anno_path'
  • 模型配置文件 选择一个检测模型,这里我们以选用picodet为例,在PaddleDetection/configs/picodet/中找到picodetl640cocolcnet.yml并复制一份,命名为picodetl640ssddlcnet.yml,修改其中对应的数据集配置文件即可:
_BASE_: [
  '../datasets/coco_detection_ssdd.yml',
  ...
]

这时就可以开启训练任务了:

# 注意:这里需要使用GPU环境,cpu环境训练跑不起来
# --eval 代表训练时在验证集上测试训练效果
python tools/train.py -c configs/picodet/picodet_l_640_ssdd_lcnet.yml --eval

如果没问题的话,可以看到训练日志,接下来就可以创建后台任务,将这个训练任务放到后台去跑了。

三、后台任务创建

3.1 主文件准备

后台任务对上传文件数量和大小都有限制,为此我们不能将dataset和PaddleDetection都上传,这时就需要我们在NoteBook中手动下载需要的数据,并进行必要的操作完成环境准备。这里我们以新建main.ipynb为例,在cell中写入如下代码,主要分为以下几个步骤:

  • 解压数据
!mkdir -p /home/aistudio/datasets/
!unzip -qo /home/aistudio/data/data264241/ssdd.zip -d /home/aistudio/datasets/
  • 环境配置
!git clone https://gitee.com/PaddlePaddle/PaddleDetection.git
%cd PaddleDetection/
!pip install -r requirements.txt
!python setup.py install
!python ppdet/modeling/tests/test_architectures.py
  • 开启训练

注意:这里需要将上一步中新建的配置文件cocodetectionssdd.ymlpicodetl640ssddlcnet.yml放到下载的PaddleDetection文件夹中

!cp /home/aistudio/coco_detection_ssdd.yml /home/aistudio//configs/datasets/
!cp /home/aistudio/picodet_l_640_ssdd_lcnet.yml /home/aistudio/PaddleDetection/configs/picodet/
!python tools/train.py -c configs/picodet/picodet_l_640_ssdd_lcnet.yml --eval

3.2 版本构建

创建后台任务之前,需要我们将用到的代码新建一个版本,比如这里我们只需要上传三份代码:

  • main.ipynb
  • coco_detection_ssdd.yml
  • picodet_l_640_ssdd_lcnet.yml

点击项目栏左侧 版本->版本管理+ ,参考下图勾选需要的文件,点击生成版本即可:

3.3 任务构建

完成项目版本创建后,就可以创建后台任务了,点击项目栏左侧 任务->后台任务+,如下图所示,选择刚刚构建的项目版本,并指定执行文件main.ipynb

点击下一步,就可以看到任务状态已经改变了:

当状态变更为运行中,可以在右侧查看日志,如果有报错,需要对应排除掉bug后再重新按照上述流程提交任务。

如果运行成功,可以看到如下日志,这里显示大约40min后任务会完成:

3.4 下载输出

训练完成后,可以到任务后台下载输出,里面保留有训练好的模型权重,便于后续进行模型测试和部署推理。

四、模型预测推理

下载下来的模型权重文件位于PaddleDetection\output\picodet_l_640_ssdd_lcnet,将得到的模型参数文件,上传到我们的项目文件夹中,通过如下代码我们在验证集上评估一下:

python tools/eval.py -c configs/picodet/picodet_l_640_ssdd_lcnet.yml -o weights=output/model_final.pdparams

PicoDet通过100个epoch的训练,在验证集上的mAP@0.5达到了0.965,这个结果已经比很多Paper中报告的结果要好了!

感兴趣的同学可以把它当成你的baseline,继续开始你的炼丹之旅吧!

此外,我们还可以通过如下命令打印一张图片的预测结果出来:

python tools/infer.py -c configs/picodet/picodet_l_640_ssdd_lcnet.yml -o weights=output/model_final.pdparams --infer_img=../datasets/ssdd/JPEGImages/000031.jpg

输出结果保存在:output/000031.jpg 让我们打开预测结果看看:👇👇👇

五、总结

  • 本项目通过计算机视觉领域中最基础的任务之目标检测,带领大家熟悉如何启动一个AI Studio后台任务,来完成自己的训练任务。
  • 案例选自地球科学领域,有现实场景应用需求,本系列的后续文章将沿袭这一思路,继续分享更多采用Paddle深度学习框架服务更多产业应用的案例。

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

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

相关文章

1782java英语陪学记词系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java英语陪学记词系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

鸿蒙嵌入式设备开发之hello world

1. 环境搭建 目前鸿蒙设备的开发环境,可以分为2个部分:Windows调试环境,和Linux编译环境。 其中, Linux环境负责编译代码,并生成鸿蒙的包。Windows环境负责连接设备,进行烧录和调试。 特别注意&#xf…

draw.io 如何设置图形圆角?

draw.io 如何设置图形圆角呢? draw.io 是一款强大的,免费的开源工具,我经常用它来画流程图,但是我发现 draw.io 对于图形圆角的设置,只提供了一个设置选项,如下图: 当你选中某个图形&#xff0…

JustAuth Illegal state xx问题

排查 起因 服务上线生产环境后使用飞书登录有些时候会登录失败,查看日志出现以上错误Illegal state [FEISHU],但是测试环境没有出现这个情况 排查 经过排查发现是JustAuth 报的错 分析出现原因 在JustAuth找到出现原因和解决方案 原文地址:异常相关问题 | JustAuth 异常…

用大模型实现PPT可视化几种思路

https://zhuanlan.zhihu.com/p/700685802 背景 前面一篇文章已经介绍了如何根据用户输入,用大模型实现内容检索、分析、脑图可视化的链路。然而往往投研团队需要针对重要新闻做组内分析解读,需要用ppt的方式来展现;那么优美可能让大模型直…

【全开源】Java同城服务同城信息同城任务发布平台小程序APP公众号源码

📢 连接你我,让任务触手可及 🌟 引言 在快节奏的现代生活中,我们时常需要寻找一些便捷的方式来处理生活中的琐事。同城任务发布平台系统应运而生,它为我们提供了一个高效、便捷的平台,让我们能够轻松发布…

【最新鸿蒙应用开发】——沙箱机制是什么?作用?场景?

沙箱机制 1. 什么是沙箱机制? 1.1. 概念 在操作系统当中,沙箱机制(Sandboxing)是一种安全机制,用于限制程序代码的访问权限,防止恶意软件对系统造成破坏。在沙箱环境中,程序只能访问特定的资…

Docker 学习总结(83)—— 配置文件daemon.json介绍及优化建议

一、daemon.json 文件概述 daemon.json是Docker守护进程的配置文件,它允许系统管理员自定义Docker守护程序的行为。此文件通常位于/etc/docker/目录下。通过修改daemon.json,可以调整Docker守护进程的多种设置,包括网络配置、日志记录、存储驱动等。 二、daemon.json 文件结…

YoloV8改进策略:Block篇|MobileNetV4——移动生态系统的通用模型

文章目录 摘要1、引言2、相关工作3、硬件无关的帕累托效率4、通用反向瓶颈5、Mobile MQA6、MNv4模型设计6.1、精炼NAS以增强架构6.2、MNv4模型的优化 7、结果7.1、ImageNet分类 8、增强蒸馏方案9、结论10、致谢A、搜索空间细节B、基准测试方法论C、ImageNet-1k分类任务的训练设…

Linux之线程及线程安全详解

前言:在操作系统中,进程是资源分配的基本单位,那么线程是什么呢?线程是调度的基本单位,我们该怎么理解呢? 目录 一,线程概念理解 二,Linux里面的线程原理 三,为什么要…

哈夫曼树的构造,哈夫曼树的存在意义--求哈夫曼编码

一:哈夫曼树的构造 ①权值,带权路径长度。 ②一组确定权值的叶子节点可以构造多个不同的二叉树,但是带权路径长度min的是哈夫曼树 ③算法基本思想及其实操图片演示 注:存储结构和伪代码 1 初始化: 构造2n-1棵只有一个根节点的二叉树,parent=rchild=lchild=-1; 其中…

忆恒创源国产系列新品 —— PBlaze7 7A40 取得 PCI-SIG 兼容性认证

在此前报道中,我们曾预告了忆恒创源国产系列 PCIe 5.0 SSD 新品 —— PBlaze7 7A40,今天,这款 SSD 已经顺利通过 PCI-SIG 的严格测试并出现在 Integrators List 集成商列表当中,标志着距离 PBlaze7 7A40 的正式发布又近了一步。 正…

Spring Boot框架基础

文章目录 1 Spring Boot概述2 Spring Boot入门2.1 项目搭建2.2 入门程序 3 数据请求与响应3.1 数据请求3.2 数据响应 4 分层解耦4.1 三层架构4.2 控制反转4.3 依赖注入 5 参考资料 1 Spring Boot概述 Spring是Java EE编程领域的一个轻量级开源框架,是为了解决企业级…

乐高小人分类项目

数据来源 LEGO Minifigures | Kaggle 建立文件目录 BASE_DIR lego/star-wars-images/ names [YODA, LUKE SKYWALKER, R2-D2, MACE WINDU, GENERAL GRIEVOUS ] tf.random.set_seed(1)# Read information about dataset if not os.path.isdir(BASE_DIR train/):for name in …

Edge 工作区是什么?它都有哪些作用?

什么是工作区 Edge 工作区是什么?它是微软 Edge 浏览器中的一个功能,在帮助用户更好地组织和管理他们的浏览会话。通过工作区,用户可以创建多个独立的浏览环境,每个工作区内包含一组相关的标签页和浏览器设置。这使得用户能够根据…

asp.net core使用httpclient

主要讲解常见的get请求和post请求 GET var client new HttpClient(); //3秒钟不响应就超时 client.TimeoutTimeSpan.FromSeconds(3); using HttpResponseMessage response await client.GetAsync("todos/3"); var jsonResponse await response.Content.ReadAsSt…

变压器绕线完成之后要做的事

1 调整感量:测主绕组电感量,通过磨气隙或垫气隙,测得感量没错以后,用胶带封装磁芯 2 测验同名端是否正确:两绕组首尾相连,测试连接后的总感量,是否比感量大的那个绕组还大。如果是,…

Allegro热风焊盘制作教程

阿里狗热风焊盘制作教程 打开PCB Editor,新建Flash symbol,最好保存在与Pad文件同一个路径 点击Setup–>Design Parameter Editor,设置mm单位,在设置画布,把原点提上去,点击Apply和OK 把视野调整到原点 点击Setup–…

vue面试题2-根据以下问题回答

以下是针对提供的关于Vue的问题的回答: Vue的基本原理: Vue.js是一个流行的JavaScript框架,用于构建用户界面和单页面应用。其基本原理包括响应式数据、模板、组件系统、指令、生命周期钩子和虚拟DOM。 双向数据绑定的原理: Vue通…

咖啡机器人如何精准控制液位流量

在如今快节奏的生活中,精确控制液位流量的需求愈发迫切,特别是在咖啡机器人等精密设备中。为了满足这一需求,工程师们不断研发出各种先进的技术,以确保液体流量的精准控制。其中,霍尔式流量计和光电式流量计就是两种常…