SMOKE 单目相机 3D目标检测训练模型

Posted 一颗小树x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SMOKE 单目相机 3D目标检测训练模型相关的知识,希望对你有一定的参考价值。

前言

本文基于SMOKE模型,使用kitti 3D目标检测数据集进行训练,记录一下过程。如果发现有错误,欢迎指出。

关于原理和搭建开发环境,可以参考之前的博客:

【论文解读】SMOKE 单目相机 3D目标检测(CVPR2020)_一颗小树x的博客-CSDN博客_smoke 论文

CVPR2020 SMOKE 单目相机 3D目标检测【环境搭建篇】_一颗小树x的博客-CSDN博客

目录

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

二、处理数据集

三、开始训练


一、下载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才会速度快;我保存到了百度网盘,方便下载。

下载好文件是这样的:

  

二、处理数据集

首先解压文件,在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")
    

三、开始训练

首先看一个训练的配置文件,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"

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

[2022-11-04 16:23:48,391] smoke.data.datasets.kitti INFO: Initializing KITTI trainval set with 7481 files loaded
[2022-11-04 16:23:48,392] smoke.trainer INFO: Start training
[2022-11-04 16:24:04,140] smoke.trainer INFO: eta: 10:55:49 iter: 10 loss: 14.9585 (19.0561) hm_loss: 3.8433 (9.4657) reg_loss: 6.7134 (9.5904) time: 1.1052 (1.5746) data: 0.0075 (0.1245) lr: 0.00025000 max men: 8266
[2022-11-04 16:24:15,516] smoke.trainer INFO: eta: 9:24:35 iter: 20 loss: 10.6755 (14.9112) hm_loss: 3.8024 (6.5812) reg_loss: 6.6716 (8.3300) time: 1.1142 (1.3561) data: 0.0308 (0.0781) lr: 0.00025000 max men: 8266
[2022-11-04 16:24:26,796] smoke.trainer INFO: eta: 8:52:42 iter: 30 loss: 10.0212 (13.4186) hm_loss: 3.5653 (5.5880) reg_loss: 6.5546 (7.8306) time: 1.1275 (1.2801) data: 0.0309 (0.0624) lr: 0.00025000 max men: 8266
[2022-11-04 16:24:37,908] smoke.trainer INFO: eta: 8:34:56 iter: 40 loss: 10.5550 (12.8795) hm_loss: 3.4666 (5.0534) reg_loss: 6.8326 (7.8262) time: 1.1123 (1.2379) data: 0.0303 (0.0543) lr: 0.00025000 max men: 8266
[2022-11-04 16:24:49,202] smoke.trainer INFO: eta: 8:25:42 iter: 50 loss: 9.5607 (12.0637) hm_loss: 3.3139 (4.7002) reg_loss: 6.0357 (7.3634) time: 1.1121 (1.2161) data: 0.0305 (0.0497) lr: 0.00025000 max men: 8266
[2022-11-04 16:25:00,478] smoke.trainer INFO: eta: 8:19:22 iter: 60 loss: 8.2629 (11.4781) hm_loss: 3.2891 (4.4862) reg_loss: 5.0277 (6.9919) time: 1.1211 (1.2014) data: 0.0308 (0.0467) lr: 0.00025000 max men: 8266
[2022-11-04 16:25:11,655] smoke.trainer INFO: eta: 8:14:12 iter: 70 loss: 8.6141 (11.1253) hm_loss: 3.3624 (4.3205) reg_loss: 5.1915 (6.8049) time: 1.1177 (1.1894) data: 0.0312 (0.0447) lr: 0.00025000 max men: 8266
[2022-11-04 16:25:22,836] smoke.trainer INFO: eta: 8:10:18 iter: 80 loss: 9.5991 (11.1011) hm_loss: 3.2310 (4.1906) reg_loss: 6.2544 (6.9106) time: 1.1169 (1.1805) data: 0.0309 (0.0431) lr: 0.00025000 max men: 8266
[2022-11-04 16:25:34,016] smoke.trainer INFO: eta: 8:07:13 iter: 90 loss: 9.1759 (10.8010) hm_loss: 3.1785 (4.0861) reg_loss: 5.8047 (6.7149) time: 1.1169 (1.1736) data: 0.0310 (0.0419) lr: 0.00025000 max men: 8266
[2022-11-04 16:25:45,190] smoke.trainer INFO: eta: 8:04:42 iter: 100 loss: 7.4026 (10.4436) hm_loss: 3.1544 (3.9891) reg_loss: 4.0470 (6.4545) time: 1.1167 (1.1680) data: 0.0306 (0.0409) lr: 0.00025000 max men: 8266

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

我把STEPS改为了(1000, 1800),所以在1000轮、1800轮会保存权重。

分享完成~

以上是关于SMOKE 单目相机 3D目标检测训练模型的主要内容,如果未能解决你的问题,请参考以下文章

论文解读SMOKE 单目相机 3D目标检测(CVPR2020)

CVPR2020 SMOKE 单目相机 3D目标检测环境搭建篇

论文解读SMOKE 单目相机 3D目标检测(CVPR2020)

CVPR2020 SMOKE 单目相机 3D目标检测环境搭建篇

CVPR2020 SMOKE 单目相机 3D目标检测环境搭建篇

万字长文概述单目3D目标检测算法