在检测 KITTI数据集 时采用三种 常见的探测器模型: YOLOv2 , YOLOv3 , Faster R-CNN 和比较他们的表现进行评估通过上传的结果KITTI评估服务器。
注意,有一个以前的YOLOv2 ( click here )模型与YOLOv3执行情况几乎相同,所以,本文会跳过与之相关的一些步骤。
准备KITTI数据集
用 KITTI目2D 训练YOLO和使用 KITTI原始数据 用于测试。
下载数据和标签
下载 KITTI目2D左彩色图片的对象数据集(12GB) 和一些测试结果记录的演示视频上面提交您的电子邮件地址来获得下载的链接。 下载 的培训标的对象数据集(5MB) .
转换KITTI标签
为了简化的标签,我们结合的原9KITTI标为6类:
Car
Van
Truck
Tram
Pedestrian
Cyclist
小心,YOLO需要的边界框格式 (center_x, center_y, width, height)
, 而不是使用典型的格式KITTI.
YOLO配置
YOLO源代码是可以 在这里 . 培训YOLO,旁边培训的数据和标,我们需要以下文件: kitti.data
, kitti.names
, kitti-yolovX.cfg
. 数据和名称的文件,用于喂养的目录和变量YOLO. 配置文件 kittiX-yolovX.cfg
培训KITTI位于
- YOLOv2:
/darknet/cfg/kitti6-yolov2.cfg
- YOLOv3:
/darknet/cfg/kitti6-yolov3.cfg
详细的配置
开放的配置文件 yolovX-voc.cfg
和改变以下参数:
[net]
# Training
batch=64
subdivisions=8
height=370
width=1224
[region]
classes=6
random=0 # remove resizing step
注意,这里删除调整大小的步骤在YOLO和比较的结果。 为此原因是描述 以前的帖子 .
Also, remember to change the filters
in YOLOv2’s last convolutional layer to be filters=((classes+5)×num)
, so that
# last convolutional layer
[convolutional]
filters=55
For YOLOv3, change the filters
in three yolo
layers as filters=((classes+5)×3)
, so that
# do the same thing for the 3 yolo layers
[convolutional]
filters=33
You can also refine some other parameters like learning_rate
, object_scale
, thresh
, etc. to obtain even better results.
快R-CNN配置
火车快R-CNN,这里需要传送图像的培训和标签作为输入格式TensorFlow 叫 tfrecord
(使用TensorFlow提供的脚本)。 通常,更快的R-CNN是训练有素的如果损失降到低于0.1. 之后该模型的培训,我们需要传输的模式到一个 frozen graph
定义在TensorFlow 做检测推理。 用于测试,这里还编写脚本来节省的检测结果,包括定量和结果 图像与检测的边界的箱子。
对于这部分,需要安装 TensorFlow物检测API 这里写了一些教程来帮助安装和训练。
首先,我们需要克隆 tensorflow/models
从审查,并安装了这个包的根据的 官方教程中安装 .
之后安装软件包,我们需要准备的训练数据集,即, 转换数据集 tfrecord
文件:
python object_detection/dataset_tools/create_kitti_tf_record.py \
--data_dir=<dataset-root>/object_2d \
--output_path=/mnt/disk1/kitti-dataset/object_2d/faster-rcnn/kitti \
--classes_to_use=car ,van ,truck ,pedestrian ,cyclist ,tram ,dontcare \
--label_map_path=/mnt/disk1/kitti-dataset/object_2d/faster-rcnn/kitti_label_map.pbtxt
然后,开始以培训更快的R-CNN:
python object_detection/legacy/train.py \
--train_dir=<tensorflow-dir>/models/ \
--pipeline_config_path=<object-detection-api-dir>/samples/configs/faster_rcnn_resnet101_kitti.config \
当训练完成后,我们需要权重来进行 frozengraph
:
python object_detection/export_inference_graph.py \
--input_type=image_tensor \
--pipeline_config_path=<object-detection-api-dir>/samples/configs/faster_rcnn_resnet101_kitti.config \
--trained_checkpoint_prefix=<checkpoint-dir>/model.ckpt-58093 \
--output_directory=<graph-dir>/graph
最后,我们可以试验和保存检测结果KITTI测试数据集使用演示 写在Jupyter笔记本: fasterrcnn/objectdetection/objectdetectiontutorial.ipynb
.
评价结果
为对象的检测,人们往往使用指标被称为 平均精度(mAP) 评估业绩的一个探测的算法。 地图是定义为平均的最高精度在不同的回忆值。 我用的是原始KITTI评估工具,这种想库[1]计算出地图 和评估业绩的目标检测模型。
此外,我还计数的时间消耗为每个探测的算法。 注意KITTI评估工具只关心对象的探测器的类 Car
, Pedestrian
, Cyclist
但不计 Van
等等。 为误报的汽车。
定量的结果为YOLOv2
结果的地图KITTI使用原始YOLOv2 与输入调整 .
Benchmark | Easy | Moderate | Hard |
---|---|---|---|
车 | 45.32% | 28.42% | 12.97% |
步行 | 18.34% | 13.90% | 9.81% |
骑自行车 | 8.71% | 5.40% | 3.02% |
结果的地图KITTI使用修改YOLOv2 没有输入调整 .
Benchmark | Easy | Moderate | Hard |
---|---|---|---|
车 | 88.17% | 78.70% | 69.45% |
步行 | 60.44% | 43.69% | 43.06% |
骑自行车 | 55.00% | 39.29% | 32.58% |
定量的结果为YOLOv3
结果的地图KITTI使用修改YOLOv3 没有输入调整 .
Benchmark | Easy | Moderate | Hard |
---|---|---|---|
车 | 56.00% | 36.23% | 29.55% |
Pedestrian | 29.98% | 22.84% | 22.21% |
自行车 | 9.09% | 9.09% | 9.09% |
定量的结果更快的R-CNN
结果的地图KITTI使用 再培训 更快的R-CNN。
Benchmark | Easy | Moderate | Hard |
---|---|---|---|
车 | 84.81% | 86.18% | 78.03% |
Pedestrian | 76.52% | 59.98% | 以51.84% |
自行车 | 74.72% | 56.83% | 49.60% |
定性结果
下图显示了一些例子测试的结果,使用这三种模式。 这里选择的三个典型的道路的场景在KITTI其中包含许多车辆,pedestrains和多类对象。
下图显示一个结果是,更快的R-CNN执行更多的两个YOLO模型。 在这个例子中,YOLO无法检测的人在左手边的,只能检测一个人行在右侧,同时更快的R-CNN可以检测到多个行人的右手边。
执行时间分析
这里还要分析的执行时间为三种模式。 YOLOv2和YOLOv3被称作实时检测模型,以便为KITTI,他们可以完成对象,检测小于40毫每图像。 同时YOLOv3是一点点慢,比YOLOv2. 但是,更快的R-CNN慢得多于YOLO(尽管它叫"快"). 因此,更快的R-美国有线电视新闻网不被用于实时的任务,如自动驾驶,尽管其表现要好得多。
模型 | 推理时间(每帧) |
---|---|
YOLOv2 | 15ms |
YOLOv3 | 35ms |
快R-CNN | 2763ms |
顺便说一句,我使用更Quadro GV100为培训和测试。
结论
实现了三种类型的目标检测模型,即YOLOv2,YOLOv3和更快的R-CNN,在KITTI2D物检测数据集。 在实施过程中,能做到的如下:
- 预处理的数据和标签
- 再培训和修改后的模型
- 推断测试结果的使用培训模型
- 评估的性能检测
在结束发言时,更快的R-CNN执行最好的对KITTI数据集。 然而,由于执行速度缓慢,不能使用实时自动驾驶的情况。
参考文献/原文:http://yizhouwang.net/blog/2018/12/20/object-detection-kitti/