单目3D目标检测——SMOKE 环境搭建|模型训练

news2024/11/23 4:40:04

本文分享SMOKE最新的版本的环境搭建,以及模型训练;环境关键库版本:pytorch 1.12.0、CUDA 11.3、cudnn 8.3.2、python 3.7、DCNv2。

目录

1、docker 获取Nvidia 镜像

2、安装Conda

3、创建SMOKE环境

4、编译SMOKE环境

 5、下载kitti 3D目标检测数据集

6、处理数据集

7、开始训练


1、docker 获取Nvidia 镜像

拉取镜像到本地:11.3.1-cudnn8-devel-ubuntu20.04

docker pull nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04

 拉取镜像完成后,用docker images命令查看镜像的情况:

docker images

能看到nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04镜像在本地了,镜像大小是8.95G。

打开镜像(常规模式--支持使用GPU)

docker run -i -t --gpus all nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04  /bin/bash

打开镜像(增强模式--支持使用GPU、映射目录、设置内存)

docker run -i -t -v /home/liguopu/:/guopu:rw --gpus all --shm-size 16G nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04  /bin/bash

平常进入了docker环境,然后创建或产生的文件,在退出docker环境后会“自动销毁”;或者想运行本地主机的某个程序,发现在docker环境中找不到。

我们可以通过映射目录的方式,把本地主机的某个目录,映射到docker环境中,这样产生的文件会保留在本地主机中。

通过-v 把本地主机目录 /home/liguopu/ 映射到docker环境中的/guopu 目录;其权限是rw,即能读能写。

默认分配很小的内参,在训练模型时不够用,可以通过参数设置:比如,我电脑有32G内参,想放16G到docker中使用,设置为 --shm-size 16G。

参考我这篇博客:docker 获取Nvidia 镜像 | cuda |cudnn_cudnn镜像站_一颗小树x的博客-CSDN博客

2、安装Conda

 默认的系统镜像可能没有conda也没有python,我们可以安装Anaconda,来搭建深度学习环境

 这里有两个下载地址可以选择,分别是官方下载地址、清华大学开源软件镜像站。

官方下载地址:Free Download | Anaconda

 如果觉得官方地址下载慢,可以尝试下清华大学的下载地址:

清华大学开源软件镜像站:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

​​ 

比如选择:Anaconda3-2023.07-2-Linux-x86_64.sh 

安装Anaconda3

进入下载文件的位置,打开终端terminal在文件目录下,使用bash 执行安装就可以啦:

bash Anaconda3-2023.07-2-Linux-x86_64.sh

安装过程:

1)输入回车键确认安装;

2)阅读Anaconda最终用户许可协议,按下回车浏览完信息;

3)问我们是否接受该协议,只能接受了,输入yes;(Do you accept the license terms? [yes|no])

4)提示安装到以下位置,回车确认即可;(Anaconda3 will now be installed into this location:)

5)是否加入环境变量,通常是选择yes的;这个根据自己情况选择,如果经常用conda环境开发,建议选择yes(Do you wish the installer to initialize Anaconda3 in your /home/linuxidc/.bashrc ? [yes|no])

开始安装页面

安装过程:

完成conda安装:

用另一个终端打开这个镜像创建的容器:

能看到能conda的初始环境了,说明conda安装成功啦。

3、创建SMOKE环境

用conda命令创建

conda create -n SMOKE python=3.7

下载代码到本地

git clone https://github.com/lzccccc/SMOKE

安装torch1.12

conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch

修改DCNv2版本,改为最新的torch1.11(亲测可用)

https://github.com/lbin/DCNv2/tree/pytorch_1.11

下载DCNv2文件,然后:

  • 将SMOKE源码中的smoke/csrc中的文件全部替换为DCNv2/src中的文件
  • 将smoke/layers/dcn_v2.py文件替换为DCNv2/dcn_v2.py文件

替换后修改smoke/layers/dcn_v2.py中代码,把 import _ext as _backend 改为:from smoke import _ext as _backend

4、编译SMOKE环境

cd SMOKE
python setup.py build develop

编译成功信息

用coda list查看smoke库已经安装成功了

安装其他库

 pip install yacs scikit-image tqdm  -i https://mirrors.aliyun.com/pypi/simple/

 5、下载kitti 3D目标检测数据集

官网链接:The KITTI Vision Benchmark Suite

 需要下载的文件:

  • Download left color images of object data set (12 GB) 这是图片,包括训练集和测试集
  • Download camera calibration matrices of object data set (16 MB) 这是相机的标定相关的文件
  • Download training labels of object data set (5 MB) 这是图片训练集对应的标签
  • Download object development kit (1 MB) 这是评价模型的代码,后面要用到,训练时用不到

这个些文件在官网下载需要注册账号,而且需要tizi才会速度快;我保存到了百度网盘,方便下载。

下载好文件是这样的:

  

6、处理数据集

首先解压文件,在datasets文件夹中,创建一个kitti文件夹,按照如下路径存放:

kitti
│──training
│    ├──calib 
│    ├──label_2 
│    ├──image_2
│    └──ImageSets
└──testing
     ├──calib 
     ├──image_2
     └──ImageSets

这里除了ImageSets文件夹,其他都有了;ImageSets主要是存放训练或测试时,所用到那些文件,指定文件的名称;

比如,在kitti/training/ImageSets/目录下,创建一个文件trainval.txt,内容如下:

000000
000001
000002
...

007479
007480

那么如何生成这个trainval.txt,写个python小程序即可,这个程序放在xxxx/SMOKE-master/datasets/kitti/training/下,执行即可

比如命名为:create_imagesets_trainval_sort.py

 代码如下:

'''
文件路径:
    xxxx/SMOKE-master/datasets/kitti/training/
'''

import os

# 获取文件夹下的所有文件名称,并排序
files  = os.listdir("./image_2")
files.sort()

# 创建/打开一个txt文件
save_txt  = open("./ImageSets/trainval.txt", 'w')

# 遍历列表,逐一获取文件名
for file in files:
    print("file:", file)
    file_name = file.split(".")[0]
    save_txt.write(file_name)
    save_txt.write("\n")

比如,在kitti/training/ImageSets/目录下,创建一个文件test.txt,内容如下:

000000
000001
000002
...

007516
007517

那么如何生成这个test.txt,写个python小程序即可,,这个程序放在xxxx/SMOKE-master/datasets/kitti/testing/下,执行即可

'''
文件路径:
    xxxx/SMOKE-master/datasets/kitti/testing/
'''

import os

# 获取文件夹下的所有文件名称,并排序
files  = os.listdir("./image_2")
files.sort()

# 创建/打开一个txt文件
save_txt  = open("./ImageSets/test.txt", 'w')

# 遍历列表,逐一获取文件名
for file in files:
    print("file:", file)
    file_name = file.split(".")[0]
    save_txt.write(file_name)
    save_txt.write("\n")
    

7、开始训练

首先看一个训练的配置文件,configs/smoke_gn_vector.yaml

MODEL:
  WEIGHT: "catalog://ImageNetPretrained/DLA34"
INPUT:
  FLIP_PROB_TRAIN: 0.5
  SHIFT_SCALE_PROB_TRAIN: 0.3
DATASETS:
  DETECT_CLASSES: ("Car", "Cyclist", "Pedestrian")
  TRAIN: ("kitti_train",)
  TEST: ("kitti_test",)
  TRAIN_SPLIT: "trainval"
  TEST_SPLIT: "test"
SOLVER:
  BASE_LR: 2.5e-4
  STEPS: (10000, 18000)
  MAX_ITERATION: 25000
  IMS_PER_BATCH: 32

MAX_ITERATION,这里官网的训练轮数是25000次,挺夸张的,可以修改。

IMS_PER_BATCH,批量大小是32,显存没这么大,可以改小一些。

STEPS,是训练过程中,在多少轮时,保存模型的权重;默认是10000轮、18000轮,自行修改。

其它的根据任务情况,修改即可。

单GPU训练的命令如下:

python tools/plain_train_net.py --config-file "configs/smoke_gn_vector.yaml"

模型开始训练打印信息

 

打印训练配置和模型结构

训练中,有提示信息,包括迭代轮数、损失、学习率变化等

[2023-09-24 16:15:11,299] smoke.data.datasets.kitti INFO: Initializing KITTI trainval set with 7481 files loaded
[2023-09-24 16:15:11,299] smoke.trainer INFO: Start training
[2023-09-24 16:15:16,859] smoke.trainer INFO: eta: 0:27:41 iter: 10 loss: 7.9971 (21.7083) hm_loss: 4.5385 (19.3146) reg_loss: 1.4058 (2.3936) time: 0.2013 (0.5557) data: 0.0078 (0.0284) lr: 0.00025000 max men: 4816
[2023-09-24 16:15:18,872] smoke.trainer INFO: eta: 0:18:48 iter: 20 loss: 6.0802 (13.6487) hm_loss: 4.1279 (11.7072) reg_loss: 1.4058 (1.9416) time: 0.2011 (0.3786) data: 0.0078 (0.0182) lr: 0.00025000 max men: 4816
[2023-09-24 16:15:20,889] smoke.trainer INFO: eta: 0:15:49 iter: 30 loss: 4.9480 (10.5877) hm_loss: 3.7482 (9.0827) reg_loss: 0.7232 (1.5050) time: 0.2012 (0.3196) data: 0.0079 (0.0148) lr: 0.00025000 max men: 4816
[2023-09-24 16:15:22,904] smoke.trainer INFO: eta: 0:14:18 iter: 40 loss: 4.8069 (9.3238) hm_loss: 3.5018 (7.6436) reg_loss: 0.8950 (1.6802) time: 0.2012 (0.2901) data: 0.0080 (0.0131) lr: 0.00025000 max men: 4816
[2023-09-24 16:15:24,921] smoke.trainer INFO: eta: 0:13:23 iter: 50 loss: 4.3501 (8.3160) hm_loss: 3.2921 (6.8062) reg_loss: 0.6793 (1.5098) time: 0.2011 (0.2724) data: 0.0080 (0.0121) lr: 0.00025000 max men: 4816
[2023-09-24 16:15:26,954] smoke.trainer INFO: eta: 0:12:47 iter: 60 loss: 4.1979 (7.6786) hm_loss: 3.2857 (6.2086) reg_loss: 0.5120 (1.4699) time: 0.2022 (0.2609) data: 0.0080 (0.0114) lr: 0.00025000 max men: 4816
[2023-09-24 16:15:28,982] smoke.trainer INFO: eta: 0:12:20 iter: 70 loss: 4.2102 (7.2046) hm_loss: 3.0555 (5.7704) reg_loss: 0.8590 (1.4341) time: 0.2027 (0.2526) data: 0.0080 (0.0109) lr: 0.00025000 max men: 4816
[2023-09-24 16:15:31,048] smoke.trainer INFO: eta: 0:12:00 iter: 80 loss: 4.5890 (6.9815) hm_loss: 2.9401 (5.4155) reg_loss: 1.4550 (1.5660) time: 0.2029 (0.2468) data: 0.0080 

训练完成

 

训练中,在tools\目录下生成一个logs目录,存放日志文件、模型权重等等:

模型一共训练3000轮,我把STEPS改为了(1000,2000,3000),所以在1000,2000,3000轮会保存权重。

 模型效果:

分享完成~

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

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

相关文章

Springboot+vue的校园资产管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的校园资产管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的校园资产管理系统,采用M&#xff…

让Pegasus天马座开发板实现超声波测距

在完成《让Pegasus天马座开发板用上OLED屏》后,我觉得可以把超声波测距功能也在Pegasus天马座开发板上实现。于是在箱子里找到了,Grove - Ultrasonic Ranger 这一超声波测传感器。 官方地址: https://wiki.seeedstudio.com/Grove-Ultrasonic_Ranger 超声…

使用postcss-pxtorem插件实现px转换rem

1.下载postcss-pxtorem(其他插件按需下载自行配置)并在package.json同级目录下新建postcss.config.js文件: export const defaultHtmlFontSize 37.5 export default {plugins: {autoprefixer: {overrideBrowserslist: [Android > 4.0, iOS > 7],},postcss-pxtorem: {//…

tensorrt获取输入输出

利用Netron打开onnx,右边名字: int input_index engine->getBindingIndex("inout1.1");int output_index engine->getBindingIndex("191");

NSSCTF做题

[第五空间 2021]WebFTP 打开题目 发现是登录的界面 用admin和password试一下发现不行 用dirsearch扫一下 发现了git泄露 但是用githack下载不下来文件 去网上查了一下webftp 发现是一个在线php文件管理系统 WebFTP——在线FTP工具:强大的PHP在线文件管理系统-時日 在这篇博客…

CentOS7平台命令安装Anaconda3、配置Python3开发环境

要在 CentOS 7 上安装 Anaconda3,您可以按照以下步骤进行操作: 1. 下载 Anaconda3 安装包: 首先,访问 Anaconda 官方网站以获取最新版本的 Anaconda3 安装包的下载链接。可以使用 wget 命令来下载安装包。请确保选择适用于 Cent…

数字IC设计系列----单端口RAM、双端口RAM

一、单端口RAM原理及实现 1.1、概念/原理 在内存空间中开辟出一段固定大小的内存用于存储数据,每一个数据所占的bit位称之为位宽,这段内存空间中数据的总数称之为深度。例如reg [7:0] mem [255:0],这段内存空间中每一个数据的位宽为8bit&am…

postgresql用户和角色

postgresql用户和角色 简述创建角色角色属性登录特权超级用户创建数据库创建角色启动复制密码修改角色属性 对象授权撤销授权组和成员删除角色 简述 PostgreSQL 通过角色的概念来控制数据库的访问权限。角色又包含了两种概念,具有登录 权限的角色称为用户&#xff…

Nature Communications | 张阳实验室:端到端深度学习实现高精度RNA结构预测

RNA分子是基因转录的主要执行者,也是细胞运作的隐形功臣。它们在基因表达调控、支架构建以及催化活性等多个生命过程中都扮演着关键角色。虽然RNA如此重要,但由于实验数据的缺乏,准确预测RNA 的三维空间结构仍然是目前计算生物学面临的重大挑…

Flink 内存模型

Jobmanage内存模型 1G 1C 的配置 上图不够直观,用户大脑无法第一反应出内存构成。 Total Process Memory = JVM堆内存 + JVM堆外内存(堆外内存+ JVM元空间 +JVM自身运行内存) Total Flink Memory = JVM堆内存 + 堆外内存 参数控制: Total Process Memory 对应 jobmanag…

2023 “华为杯” 中国研究生数学建模竞赛(C题)深度剖析|数学建模完整代码+建模过程全解全析

华为杯数学建模C题 当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看研赛的C题呀~! 问…

二十四、MySQL事务操作演示

1、事务 (1)事务简介: (2)实际操作方式: 在执行MySQL语句时,系统默认自动提交,但是语句一旦出现报错,就可能导致数据出现大规模错误,所以我们要做的就是&…

牛客网解题之跳台阶

10.3 跳台阶 题目链接 牛客网 题目描述 一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 解题思路 当 n 1 时,只有一种跳法: 当 n 2 时,有两种跳法: 跳 n 阶台…

【强化学习】03 ——马尔可夫决策过程

文章目录 1. 马尔科夫决策过程(Markov Decision Process,MDP)1.1. 马尔科夫性质1.2. 状态转移矩阵1.3. 马尔可夫过程1.3.1. 一个简单的例子 2. 马尔可夫奖励过程2.1. 回报2.2. 价值函数 3. 马尔科夫决策过程3.1. MDP五元组3.2. 策略3.3. 价值函数3.3.1. 状态价值函数…

MYSQL——命令大全

1.创建数据库: CREAT E DATABASE [IF NOT EXISTS] DATABASE_NAME; 2.查看数据库: SHOW DATABASES; 3.进入数据库 USE DATABASE_NAME; 4.指定字符集(character)和校对规则(collation)创建数据库 CREA…

Spring面试题18:Spring中可以注入一个null和一个空字符串吗?Spring中如何注入一个java集合?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring中可以注入一个null和一个空字符串吗? 在Spring中是可以注入null和空字符串的。 注入null:可以使用@Value注解,将属性值设为null。例如:…

ChatGPT可以取代搜索引擎吗?

ChatGPT对于一些简单的问题,可以完美的完成任务。但是我让它写一篇完整的文章,看看它能否代替我进行写作地的时候,我确定它不能完全取代人类。 但是我们可以使用更多的指导来让AI在日常工作流程为我们工作,所以本文将讨论如何有效…

Spimes x5.0主题模板全开源源码

Spimes主题为博客、自媒体、资讯类的网站设计开发,自适应兼容手机、平板设备的团队,工作室门户主题,精心打磨的一处处细节。只为让您的站点拥有速度与优雅兼具的极致体验。小灯泡自媒体博客免授权 安装教程: 1.模板目录usr/them…

[管理与领导-102]:经营与管理的关系:攻守关系;武将文官关系;开疆拓土与守护城池的关系;战斗与练兵的关系;水涨船高,水落船低的关系。

目录 前言: 一、手中拿着锤子,一切看起来都像钉子 1.1 企业经营中过渡强调管理的表现? 1.2 企业经营中过渡强调管理的误区(背后深层次的原因) 二、无知者的无畏,独断者的自high 2.1 企业经营中过度忽律管理的表…

5个顶级的Blender生成式AI插件

推荐:用 NSDT编辑器 快速搭建可编程3D场景 Blender 以其强大的 3D 建模和动画工具而闻名。 但你知道它也可以用来制作令人难以置信的纹理和背景吗? 当然,使用正确的插件。 在本文中,我们将了解 Blender 的顶级 AI 插件。 这些插…