【踩坑】使用CenterNet训练自己的数据时的环境配置与踩坑

环境配置

系统:Ubuntu22.04
Python:3.8
CUDA:11.7
pytorch:2.2.1

因为种种原因没有使用原工程的老版本python和pytorch……但总之也跑通了,可喜可贺,可喜可贺。

  1. 新建conda环境:
 conda create --name CenterNet python=3.8conda activate CenterNet
  1. 安装CUDA
    使用nvidia-smi命令(前提是你安装了显卡驱动),可以看到显卡信息,其中右上角表示显卡最高支持的CUDA版本号,安装的CUDA版本不要超过这个版本。
    nvidia-smi
    因为pytorch官网写了对应CUDA11.8和12.1两种版本的安装方式,所以图省事我的CUDA版本也直接安装11.8了。
    首先找到你要安装的CUDA ToolKit版本:https://developer.nvidia.com/cuda-toolkit-archive
    安装CUDA ToolKit
    然后按你的机器配置一步一步选择好,运行给你的指令:
    选择机器配置
    接下来的安装选项可以参考这篇博客,以下是一些细节:
    如果你安装了其他版本的CUDA,会报一个询问是否continue的链接,continue即可。
    注意在安装选项处去掉Driver、CUDA Demo Suite 11.8、CUDA Documentation 11.8,仅安装CUDA Toolkit 11.8。
    使用如下命令设置CUDA环境变量:
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64

最后使用nvcc --version命令可以验证自己安装的CUDA版本。
使用ls -l /usr/local | grep cuda可以查看安装的所有CUDA版本和对应的路径。
3. 安装pytorch
pytorch官网:https://pytorch.org/get-started/locally/
没啥好说的,输入指令安装即可。
pytorch安装
4. 克隆CenterNet并安装依赖:

git clone https://github.com/xingyizhou/CenterNet
cd CenterNet
pip install -r requirements.txt
  1. 安装DCNv2
    首先将CenterNet/src/lib/models/networks/DCNv2这个目录的老版本DCNv2删除,然后在原位置克隆DCNv2的一个fork:https://github.com/lbin/DCNv2
https://github.com/lbin/DCNv2.git
cd DCNv2

使用git branch -r指令可以查看所有分支信息,切换到最新的2.0.1分支:

git checkout pytorch_2.0.1

然后编译:

./make.sh
  1. 安装COCO API
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
python setup.py install --user
  1. 下载预训练模型
    从作者提供的MODEL ZOO下载一个模型,放在/CenterNet/models/文件夹下。
  2. 运行demo
    不出意外的话(虽然生活总是充满意外),做完以上这些配置后,应该就可以运行CenterNet的demo了!
python demo.py ctdet --demo 图片路径 --load_model pth模型路径

根据这篇博客,如果你想要保存结果而不是弹窗展示图片的话,将src/lib/detectors/cdet.py的最后一个函数做如下更改即可:
更改函数

COCO格式数据集

参考原项目的README。
首先你的数据集要是COCO格式的,具体来说,你要在/CenterNet/data/文件夹下,建立一个这样的目录结构:

|mydata
|-- annotations
|  	|--train.json
|  	|--val.json
|-- images

images放你的所有图片(训练集和测试集可以不分开),而两个标注的json文件,最简格式如下:

{"categories": [ # 分类{"supercategory": # 父类,没有就填"None""id": # 类的标识id,建议令__background__为0"name": # 类名}],"images":[{"id": # 图片的唯一标识id"file_name": # 图片名称,不用带文件夹路径"width": # 宽度"height": # 高度}],"annotations":[{"id": #唯一标识id"segmentation": [] #图片分割,对于bbox类型的标注,直接[[left_x, top_y, left_x, bottom_y, right_x, bottom_y, right_x, top_y]]"area": # 标注的面积,对于bbox类型,直接长乘宽"bbox": [] # x, y, w, h"iscrowd": 0"ignore": 0"image_id": # 所在图片id"category_id": # 所属类别id}]
}

将数据处理好放好即可。

在CenterNet中应用自己的数据集

继续参考这篇博客,有很详细的代码修改说明,原项目README也有说明,主要是在src/lib/datasets/dataset下参考coco.py新增一个自己的dataloader类,然后将它引入src/lib/datasets/dataset_factory,并在/src/lib/opts.py中修改数据集默认值,添加类别标签即可。
运行训练:

python main.py ctdet --exp_id coco_dla --batch_size 32 --master_batch 1 --lr 1.25e-4  --gpus 0

模型会被保存在/exp/ctdet/coco_dla/文件夹下,其中测试集上效果最好的模型被命名为model_best.pth,而训出来的最后一个模型叫model_last.pth
运行测试:

python test.py --exp_id coco_dla --not_prefetch_test ctdet --load_model 模型路径

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux nginx配置ssl, 实现https+ip访问

mkdir sslZhengShu openssl req -newkey rsa:2048 -nodes -keyout ca.key -out ca.csr openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr 和之前输入一样即可 …

Postman测试含有变量的接口的方法

1.在路径中用/:设置变量名 2.设置token验证 3.填写参数

Java安全篇-Fastjson漏洞

前言知识: 一、json 概念: json全称是JavaScript object notation。即JavaScript对象标记法,使用键值对进行信息的存储。 格式: {"name":"wenda","age":21,} 作用: JSON 可以作为…

win11蓝牙图标点击变灰,修复过程

问题发现 有一天突然心血来潮想着连接蓝牙音响放歌来听,才发现win11系统右下角菜单里的蓝牙开关有问题。 打开蓝牙设置,可以正常直接连上并播放声音,点击右下角菜单里的蓝牙开关按钮后,蓝牙设备也能正常断开,但是按钮直接变深灰色,无法再点击打开。 重启电脑,蓝牙开关显…

基于vue的MOBA类游戏攻略分享平台的设计与实现|Springboot+Vue+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. …

LockSupport与线程中断机制

中断机制是个协商机制 Interrupt(): 将中断状态设置为true Interrupted():(静态方法) 1.返回当前线程的中断状态 2.将中断状态清零并设置为false is Interrupted(): 判断当前线程是否被中断 如何停止中断运行中的线程? 一个线程不应该由…

macOS Sonoma如何查看隐藏文件

在使用Git进行项目版本控制时,我们可能会遇到一些隐藏文件,比如.gitkeep文件。它通常出现在Git项目的子目录中,主要作用是确保空目录也可以被跟踪。 终端命令 在尝试查看.gitkeep文件时,使用Terminal命令来显示隐藏文件 default…

【Pt】马灯贴图绘制过程 03-制作油渍、积尘效果

目录 效果 一、制作油渍效果 1.1 基本油渍 1.2 流淌的油渍痕迹 二、制作浮尘效果 三、制作积尘效果 效果 一、制作油渍效果 1.1 基本油渍 将上篇制作的“锈迹_深色”和“锈迹_浅色”两个文件夹再次合并为一个文件夹 这里就命名为“锈迹” 添加一个填充图层 设置Base …

JMM Java内存模型

JMM本身是一个抽象的概念,不是真实存在的,它仅仅是一种规定或者说是规范 1.用来实现线程和主内存直接的抽象关系 2.屏蔽各个硬件平台和操作系统的内存访问差异,使得java程序在各种平台都能达到一致的内存访问效果 JMM的三大特性 可见性 多线程环境下,某个线程修改了变量…

asp.net开发中小程序端跟后端交互中的发现

小程序端wxml端代码示例&#xff1a; <button bind:tap"test">提交</button>小程序端js代码示例&#xff1a; test(){console.log(ok)wx.request({url: https://localhost:44375/lianxi01.aspx,})},asp.net端代码示例&#xff1a; cs端代码示例&#x…

【贫民版】Springboot导入返回错误Excel表格 ---- 通过session存储字节数据,再获取写到响应体中。

目录 前言一、需求二、需求分析三、代码 前言 在开发中会遇到导入文件后&#xff0c;失败的数据需要整理在加上导入失败原因。 按照目前主流的方法&#xff0c;要么通过流输出到response响应体中&#xff0c;或者把失败的excel上传到服务器中&#xff0c;返回url让前端下载。…

uniapp对接萤石云 实现监控播放、云台控制、截图、录像、历史映像等功能

萤石云开发平台地址&#xff1a;文档概述 萤石开放平台API文档 (ys7.com) 萤石云监控播放 首先引入萤石云js js地址&#xff1a;GitHub - Ezviz-OpenBiz/EZUIKit-JavaScript-npm: 轻应用npm版本&#xff0c;降低接入难度&#xff0c;适配自定义UI&#xff0c;适配主流框架 vi…