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目标检测数据集
官网链接: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目标检测环境搭建篇