此系列博客是用来学习Tensorflow和Python的,由于是新手上车,如有错误之处希望大家不吝指出。
整个项目可以从百度云下载:链接:https://pan.baidu.com/s/1f2JPJpE7m5M2kSifMP0-Lw 密码:9p8v
一. 训练数据准备
在训练数据准备环节,主要包含下面三块内容:
- 怎样解析用于车辆检测训练的KITTI数据集
- 怎样进行数据扩张来增大训练数据的多样性
- 怎样在训练阶段为模型供给batch训练数据
1. 读取KITTI数据集
首先到KITTI官网http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=2d下载车辆检测数据集。
具体地,只用下载下面3个压缩包:(需要提供邮箱以获得下载链接)
KITTI数据集采用了一张图片对应一个标注文件的形式,其中标注文件是TXT格式,内容为N行15列,每一列都使用空格隔开。这15列的内容是:
列号 | 名称 | 描述 |
---|---|---|
1 | 类别 | 目标类别,共8类:’Car’, ‘Van’, ‘Truck’,’Pedestrian’, ‘Person_sitting’, ‘Cyclist’, ‘Tram’, ‘Misc’ 或者 ‘DontCare’ |
2 | 是否有截断 | 指目标是否超出图像边界,0: (non-truncated), 1: (truncated) |
3 | 遮挡情况 | 0 = fully visible, 1 = partly occluded 2 = largely occluded, 3 = unknown |
4 | 目标观测角度 | 范围[-pi..pi] |
5-8 | 目标bbox | 坐标从0开始,[left, top, right, bottom] |
9-11 | 3D维度 | 3D object dimensions: height, width, length (in meters) |
12-14 | 3D空间坐标 | D object location x,y,z in camera coordinates (in meters) |
15 | Y轴旋转角 | Rotation ry around Y-axis in camera coordinates [-pi..pi] |
16 | 置信度得分 | 仅用于Test,浮点数,用于绘制p/r曲线 |
备注:‘DontCare’表示忽略的未标记区域,这可能是因为超出了激光扫描仪的工作范围。测试时,位于该部分区域的结果会自动被忽略。训练时可以同样将此部分忽略,防止在此区域不断地引起Hard Mining操作。
由于这里只进行车辆检测,因此标注信息中我们暂时只关注类别和BBox信息。此外,将’Car’, ‘Van’, ‘Truck’这3类合并为正样本目标,其余区域作为背景区域。
首先,我们需要批量的读取每一个标注文件:
# readKITTI.py 用于解析KITTI数据集
import os
# 获取指定后缀名的文件列表
def get_filelist(path,ext):
# 获取某个文件夹下的所有文件
filelist_temp = os.listdir(path)
filelist = []
# 通过比较后缀,选中所有TXT标注文件
for i in filelist_temp:
if os.path.splitext(i)[1] == ext:
filelist.append(os.path.splitext(i)[0