# Dataflow **Repository Path**: zwhcodes/dataflow ## Basic Information - **Project Name**: Dataflow - **Description**: 用于把我们的rosbag转模型训练的数据集 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-07-18 - **Last Updated**: 2025-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Dataflow #### 介绍 用于把我们的rosbag转模型训练的数据集 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### dataflow2.0 使用说明 1. 建立数据处理的work_space,并放入需要处理的数据集和标定文件,目录如下
work_space_tmp
├── annotate
├── bags
│   ├── 000.bag
│   ├── 001.bag
│   ├── 002.bag
│   └── calib.json
├── datasets
└── dataview
2. 生成标注数据集,修改sh/run1.sh参数。(如果rosbag解析可能失败,需要手动运行对应的python脚本) work_dir="XXX/work_space_tmp"\ rosbag_dir="$work_dir/bags"\ data_path="$work_dir/datasets"\ out_path="$work_dir/dataview"\ anno_path="$work_dir/annotate" 然后运行 >sh sh/run1.sh rosbag解析的临时数据集如下:
work_space_tmp
├── annotate
├── bags
│   ├── 000.bag
│   ├── 001.bag
│   ├── 002.bag
│   └── calib.json
├── datasets
│   ├── 000
│   │   ├── calib
│   │   ├── camera
│   │   ├── lidar
│   │   ├── localization
│   │   └── radar
│   ├── 001
│   │   ├── calib
│   │   ├── camera
│   │   ├── lidar
│   │   ├── localization
│   │   └── radar
│   └── 002
│       ├── calib
│       ├── camera
│       ├── lidar
│       ├── localization
│       └── radar
└── dataview
当前步骤运行成功后文件夹目录如下:
work_space_tmp
├── annotate
│   ├── anno___000
│   │   ├── camera
│   │   ├── label
│   │   └── lidar
│   ├── anno___001
│   │   ├── camera
│   │   ├── label
│   │   └── lidar
│   └── anno___002
│       ├── camera
│       ├── label
│       └── lidar
├── bags
│   ├── 000.bag
│   ├── 001.bag
│   ├── 002.bag
│   └── calib.json
├── datasets
│   ├── __000
│   │   ├── calib
│   │   ├── camera
│   │   ├── lidar_bin
│   │   ├── localization
│   │   ├── radar_bin
│   │   ├── README.csv
│   │   └── samples
│   ├── 000
│   │   ├── calib
│   │   ├── camera
│   │   ├── lidar
│   │   ├── localization
│   │   └── radar
│   ├── __001
│   │   ├── calib
│   │   ├── camera
│   │   ├── lidar_bin
│   │   ├── localization
│   │   ├── radar_bin
│   │   ├── README.csv
│   │   └── samples
│   ├── 001
│   │   ├── calib
│   │   ├── camera
│   │   ├── lidar
│   │   ├── localization
│   │   └── radar
│   ├── __002
│   │   ├── calib
│   │   ├── camera
│   │   ├── lidar_bin
│   │   ├── localization
│   │   ├── radar_bin
│   │   ├── README.csv
│   │   └── samples
│   └── 002
│       ├── calib
│       ├── camera
│       ├── lidar
│       ├── localization
│       └── radar
└── dataview
3. dataview文件夹为点云图像可视化,用于检查。annotate文件夹为标注文件,标注后将label文件夹拷回对应子数据集的samples文件夹。 4. 生成数据集,修改sh/run2.sh参数。 work_dir="/media/adt/ZWH4T/ZWH/bags/dataset/tm3/work_space_tmp"\ data_path="$work_dir/datasets"\ split_ratio="10,0,0" #一个包内train:test:val\ val_datasets="__001,__000" #一个包内train:test:val\ #split_ratio="0,0,10" #一个包内train:test:val\ sweeps=10 #n个历史帧 其中val_datasets用来标记哪些数据集会是验证集。 > sh sh/run2.sh 运行后生成pkl文件
data_base
├── dbinfos_train.pkl
├── gt_database
├── infos_test.pkl
├── infos_train.pkl
├── infos_trainval.pkl
└── infos_val.pkl
#### 使用说明 1. rosbag截取有效子包 目的:原始包内可能有些时间段没有所需的目标 步骤:使用rqt_bag打开一个或者多个相邻子包,选择合适的时间段(eg.包含人或者车的段),选择截取范围后 save bag,命名为原包名+"filter" 2. 解析数据包 目的:将rosbag转换为单帧的图像(jpg),点云(pcd)等格式 步骤:a. 在parse_ros.py中设置参数--rosbag-dir为rosbag包所在的文件夹全局路径,该文件夹下能存在多个rosbag,--data-path为数据输出路径 b. 然后执行文件,将会一次过解析多个bag,并按照传感器类型分类,每类下面有一个或者多个传感器按照时间戳命名;定位信息存储为一个csv文件; 为lidar和radar新建外参文件,初始外参为单位阵,需要手动填入 ![](Pictures/Screenshot from 2023-10-11 16-25-00.png) 3. 数据时间同步 目的:各个topic的单帧数据集之间,数量和时间戳存在差异,需要按照某一topic(如前激光)的时间进行同步和筛选 步骤:a. 在sync_data.py中设置参数--data-path为数据输入路径(和parse_ros.py中一致),--is-save为是否要保存(--is-view可选) b. 然后执行文件,将会在--data-path下新建 **__<源文件夹>** 文件夹下生成新的数据集, 该数据集各topic之间数据量相同,且使用同步topic(如前激光)的时间戳命名,定位文件夹和之前保持一致,radar文件集改名为radar_bin ![](Pictures/Screenshot from 2023-10-11 16-25-17.png) 4. 数据标注 步骤: 启动STPointsSServer 容器,将上述的data_sync文件夹拷贝到挂载目录下,并在文件夹内创建label文件夹 在浏览器启动STPointsSServer 网页,选择对应文件夹和对应点云进行标注 5. 格式转换2 目的:json转txt 步骤: a. 在reformat.py中设置参数--data-path --fun json b. 然后执行文件,将会生成对应的txt格式的label文件 direcoty before process: ![](Pictures/Screenshot from 2024-05-11 11-20-13.png) README.cvs before process: ![](Pictures/Screenshot from 2024-05-11 11-30-05.png) direcoty after process: ![](Pictures/Screenshot from 2024-05-11 11-27-51.png) README.cvs after process: ![](Pictures/Screenshot from 2024-05-11 11-30-35.png) 6. 数据划分 目的:把每个数据集划分为train、test、val 步骤:a.在split_datasets.py中设置参数--data-path,和划分比例, shuffle defalut to false for multiseq b.然后执行文件,将会生成对应split_sets文件夹下的train.txt,test.txt,val.txt文件 direcoty after process ![](Pictures/Screenshot from 2024-05-11 11-30-48.png) within diretory split_sets: ![](Pictures/Screenshot from 2024-05-11 11-31-42.png) 7. 数据集check(可选) 步骤:运行check_dataset.py中设置参数--data-path 8. pkl制作 目的:读取数据集,制作pkl文件存储数据集的信息(路径和label等) 步骤:a. 在dataset2pkl.py设置参数data_root为数据集路径; b. 然后执行文件,生成对应的pkl文件夹和目标点云bin文件 direcoty after process: ![](Pictures/Screenshot from 2024-05-11 11-36-55.png) files in diretory data_base: ![](Pictures/Screenshot from 2024-05-11 11-37-15.png) 9. dataset读取 见train工程