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

一、项目出发点

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深度学习框架服务更多产业应用的案例。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索智慧农业系统架构的设计与应用

随着科技的不断进步和农业现代化的推进,智慧农业正逐渐成为农业发展的重要趋势。智慧农业系统架构的设计与应用,将农业生产与信息技术相结合,为农业生产提供了新的思路和解决方案。本文将深入探讨智慧农业系统架构的设计与应用,从…

2021JSP普及组第二题:插入排序

2021JSP普及组第二题 题目: 思路: 题目要求排序后根据操作进行对应操作。 操作一需要显示某位置数据排序后的位置,所以需要定义结构体数组储存原数据的位置和数据本身排序后所得数据要根据原位置输出排序后的位置,所以建立一个新…

android中调用onnxruntime框架

创建空白项目 安装Android Studio及创建空白项目参考:【安卓Java原生开发学习记录】一、安卓开发环境的搭建与HelloWorld(详细图文解释)_安卓原生开发-CSDN博客 切记:build configuration language 一定选择Groovy!官…

mysql报错 Duplicate entry

在MySQL中,当你尝试执行插入(INSERT)或更新(UPDATE)操作时,如果目标表中存在唯一索引(包括主键索引、唯一约束索引等),并且你要插入或更新的数据在该索引列上的值与表中已…

电机控制系列模块解析(28)—— 其他功能概述

其他功能概述 软件侧:观测器估计发散保护、时序异常检测 主电路侧:IGBT结温估算、直流母线电容容值估算 电机侧:电机温度估计、轴承异常估计、电机退磁检测 负载侧:负载不平衡检测、掉载检测、负载惯量自适应 上述各项功能&a…

Diffusers代码学习: IP-Adapter Inpainting

IP-Adapter还可以通过Inpainting自动管道和蒙图方式生成目标图片。 # 以下代码为程序运行进行设置,使用Inpainting 的自动管道, import os os.environ["HF_ENDPOINT"] "https://hf-mirror.com"from diffusers import AutoPipelin…

【React】vscode 中 React 自动补齐标签设置

1.打开设置 2.搜索 includeLanguages 3. 在Emmet 下,点击“添加项”,添加一项 javascript --> javascriptreact 4. 重启vs code

学习笔记——路由网络基础——汇总静态路由

4、汇总静态路由 (1)定义 静态路由汇总:多条静态路由都使用相同的送出接口或下一跳 IP 地址。(将多条路由汇总成一条路由表示) (2)目的 1.减少路由条目数量,减小路由表,加快查表速度 2.增加网络稳定性 (3)路由黑洞以及路由环路的产生…

循环语句大揭秘:while、do-while、for、foreach你都掌握了吗?

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

idm2024最新完美破解版免费下载 idm绿色直装版注册机免费分享 idm永久激活码工具

IDM 2024破解版重新开发了调度程序和MMS协议支持、重新设计和增强的下载引擎、与所有最新浏览器的独特高级集成、改进的工具栏以及大量其他改进和新功能,这一全新的更新,使得IDM下载器更加完美。值得一提的是,它可以借助油猴浏览器的脚本&…

GAN网络理论和实验(二)

文章目录 一、说明二、什么是生成对抗网络?三、判别模型与生成模型四、生成对抗网络的架构五、你的第一个 GAN六、准备训练数据七、实现鉴别器八、实现生成器九、训练模型十、检查 GAN 生成的样本十一、使用 GAN 生成手写数字十二、准备训练数据十三、实现鉴别器和生…

【机器学习】XGBoost: 强化学习与梯度提升的杰作

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 XGBoost: 强化学习与梯度提升的杰作引言1. XGBoost概览1.1 什么是XGBoost&#…

玄机平台应急响应—apache日志分析

1、前言 apache的日志一共有两个,一个是access.log,这个日志记录了所有对Web服务器的访问,被入侵时重点排查这个。另一个是error.log,错误日志记录了服务器运行期间遇到的各种错误,以及一些普通的诊断信息&#xff0c…

Java——IO流(一)-(1/8):File、IO流概述、File文件对象的创建(介绍、实例演示)

目录 File IO流概述 File文件对象的创建 介绍 实例演示 File 存储数据的方案 变量 double money 9999.5 数组 int[] age new int[100];对象 Student s new Student()集合 List<Student> students new ArrayList<>()…

NIST 电子病历中的疾病列表部分的认证

美国国家标准与技术研究院&#xff08;National Institute of Standards and Technology&#xff0c;NIST&#xff09;对电子病历的认证 分几个阶段&#xff0c;每个阶段又分门诊和住院&#xff0c;然后又分若干模块。下面是疾病列表的测试脚本。 170.302c_Problemlist Test …

Maven中的DependencyManagement和Dependencies

Maven中的DependencyManagement和Dependencies Dependencies Dependencies是Maven项目中用来声明项目依赖的部分。在pom.xml文件中的<dependencies>部分&#xff0c;你可以直接列出项目所依赖的库&#xff08;artifacts&#xff09;。每个依赖通常包括以下信息&#xf…

DevExpress winForm gridView 设置复选框并可多选

OptionsSelection.MultiSelect True OptionsSelection.MultiSelectMode CheckBoxRowSelect

Leetcode3171. 找到按位与最接近 K 的子数组

Every day a Leetcode 题目来源&#xff1a;3171. 找到按位与最接近 K 的子数组 解法1&#xff1a;位运算 优化&#xff1a; 代码&#xff1a; /** lc appleetcode.cn id3171 langcpp** [3171] 找到按位与最接近 K 的子数组*/// lc codestart class Solution { public:int m…

Flink SQL实践

环境准备 方式1&#xff1a;基于Standalone Flink集群的SQL Client 启动Flink集群 [hadoopnode2 ~]$ start-cluster.sh [hadoopnode2 ~]$ sql-client.sh ... 省略若干日志输出... Flink SQL> 方式2&#xff1a;基于Yarn Session Flink集群的SQL Client 启动hadoop集群…

把qml程序制作成安装包(Windows)

先检查一下有没有安装Qt Installer FrameWork 需要用到Qt自带的打包工具&#xff1a; Qt Installer FrameWork&#xff0c;虽然有点拉胯&#xff0c;但是也能用用。一般放在Qt目录下的Tools文件夹下&#xff0c;如果没有看到&#xff0c;就去在线下载器去下载一下。 步骤1 随…