自动驾驶之项目一-城市环境的目标检测

一、项目介绍

在这个项目中,将创建一个卷积神经网络,使用Waymo的数据集来检测和分类物体。您将获得一个城市环境图像数据集,其中包含带标注的骑自行车者、行人和车辆。

首先,执行广泛的数据分析,包括标签分布的计算,样本图像的显示,并检查对象遮挡。

自动驾驶之项目一-城市环境的目标检测_第1张图片

                           来自Waymo数据集的夜间图像示例,带有针对车辆和行人的标注

使用此分析决定哪些增强对该项目有意义;然后,训练一个神经网络来检测和分类对象。

使用TensorBoard监控训练,并决定何时结束。最后,尝试使用不同的超参数来提高模型的性能。

这个项目将包括使用TensorFlow对象检测API(TensorFlow Object Detection API),在此可以部署模型来获得对发送到API的图像的预测;还会提供相关代码,用于创建模型预测的短视频。

二、环境配置

建立项目

本地设置:使用以下的说明来创建Docker容器,使用本地GPU,或者在云提供商的GPU实例上创建一个类似的环境。

项目文件

首先,从相关的Github存储库获取项目文件 (https://github.com/udacity/nd013-c1-vision-starter

Docker安装

对于本地安装,如果你有自己的Nvidia GPU,可以在starter代码的构建目录中使用提供的Dockerfile和需求。

下面的说明也包含在starter代码的构建(Build)目录中。

需求

  • 安装了最新驱动程序的NVIDIA GPU
  • Docker / nvidia-docker

构建(Build)

使用以下指令:

docker build -t project-dev -f Dockerfile .

创建一个容器:

docker run --gpus all -v :/app/project/ --network=host -ti project-dev bash

以及对系统有用的任何其他标志(例如,——shm-size)。

设置

一旦进入容器,需要安装gsutil,通过运行:

Curl https://sdk.cloud.google.com | bash

一旦安装了gsutil并将其添加到您的路径中,可以使用以下命令进行验证:

gcloud auth login

调试(Debug)

  • 如果在安装TF对象检测API(TF Object Detection API.)时遇到任何问题,请遵循本教程Installation — TensorFlow 2 Object Detection API tutorial documentation。

三、项目说明

城市环境中的目标检测(GitHub - udacity/nd013-c1-vision-starter: Starter Code for the Course 1 project of the Udacity Self-Driving Car Engineer Nanodegree Program)

本地设置

对于本地安装,如果你有自己的Nvidia GPU,可以使用build目录中(https://github.com/udacity/nd013-c1-vision-starter/tree/main/build)提供的Dockerfile和需求。

按照其中的README(nd013-c1-vision-starter/build/README.md at main · udacity/nd013-c1-vision-starter · GitHub创建docker容器并安装所有先决条件。

下载和处理数据

对于这个项目,我们将使用data来自 Waymo Open dataset.

这些文件可以直接从网站以tar文件的形式下载,也可以来自 Google Cloud Bucket 作为个体 tf records.。

这个项目的第一个目标是将数据从Waymo的谷歌云存储下载到本地机器上。对于这个项目,我们只需要提供数据的一个子集(例如,不需要使用Lidar数据)。因此,我们将下载并立即修剪每个文件。download_process.py, 可以查看create_tf_example函数,它将执行此处理。 该函数获取Waymo Tf record组件,并将其保存为Tf对象检测api格式(Tf Object Detection api)。下面描述一个这样的函数的例子(Training Custom Object Detector — TensorFlow 2 Object Detection API tutorial documentation。 我们已经提供了label_map.pbtxt 文件。

运行脚本的命令如下:

python download_process.py --data_dir {processed_file_location} --size {number of files you want to download}

下载100个文件 (除非改变size参数) ! 脚本完成后,可以查看data_dir文件夹,看看文件是否已经下载并正确处理。

结构

数据

将用于训练、验证和测试的数据可以组织如下:

  • train: 包含训练数据
  • val: 包含验证数据
  • test - 包含测试文件来测试模型和创建推理视频

通过完成并执行create_split .py文件,将把下载的数据分成训练集、验证集和测试集。

实验

实验文件夹将按如下方式组织:

experiments/ 
    - pretrained_model/ 
    - exporter_main_v2.py 
    - to create an inference model 
    - model_main_tf2.py 
    - to launch training 
    - reference/ 
    - reference training with the unchanged config file 
    - experiment0/ 
    - create a new folder for each experiment you run 
    - experiment1/ 
    - create a new folder for each experiment you run 
    - experiment2/ 
    - create a new folder for each experiment you run 
    - label_map.pbtxt 
    ...

指引


步骤1a -探索性数据分析(EDA)

使用/home/workspace/data/目录中已经存在的数据来探索数据集!这是任何机器学习项目中最重要的任务。

  • 在探索性数据分析notebook中实现display_images函数。该函数的输出如下图所示:

自动驾驶之项目一-城市环境的目标检测_第2张图片

                                  display_images函数的期望输出

  • Additional EDA: 请随意花更多的时间探索数据并报告您的发现。在书面报告中报告与数据集相关的任何内容。

参考这个分析来创建不同的测试(训练和验证集)。

步骤1b -创建训练-验证分割

我们讨论了交叉验证以及创建有意义的训练和验证分割的重要性。对于这个项目,必须使用位于/home/workspace/data/中的文件创建相关训练、验证和测试集。create_split .py文件中的split函数执行以下操作:

  • 创建三个子文件夹:/home/workspace/data/train/、/home/workspace/data/val/和/home/workspace/data/test/

  • 将tf记录文件拆分到这三个文件夹中。

函数实现后,使用以下命令运行脚本:

python create_splits.py --data-dir /home/workspace/data

还可以使用任何其他方法将数据划分为训练、验证和测试。

步骤2—编辑配置文件

现在可以开始训练,Tf对象检测API依赖于配置文件。在这个项目中使用的配置是pipeline. config,为Resnet 50 640x640型号的SSD设备配置。可以在这里(https://arxiv.org/pdf/1512.02325.pdf了解更多关于单发探测器的信息。

  • 首先,让我们下载预训练模型(http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz并将其移动到/home/workspace/experiments/pretrained_model/。请遵循以下步骤:
cd /home/workspace/experiments/pretrained_model/ 
wget http://download.tensorflow.org/models/object_detection/tf2/20200711/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz 
tar -xvzf ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz 
rm -rf ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.tar.gz
  • 我们需要编辑配置文件来更改训练和验证文件的位置,以及预训练权重的label_map文件的位置。我们还需要调整 batch size。为此,执行以下命令:

cd /home/workspace/ 
python edit_config.py --train_dir /home/workspace/data/train/ --eval_dir /home/workspace/data/val/ --batch_size 2 --checkpoint /home/workspace/experiments/pretrained_model/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8/checkpoint/ckpt-0 --label_map /home/workspace/experiments/label_map.pbtxt

一个名为pipeline_new. config的新配置文件将在/home/workspace/目录下创建。将该文件移动到/home/workspace/experiments/reference/目录下。

​步骤3 -模型训练和评估

启动训练流程:

  • 训练过程:
python experiments/model_main_tf2.py --model_dir=experiments/reference/ --pipeline_config_path=experiments/reference/pipeline_new.config

要监视训练,可以通过运行python -m tensorboard. main --logdir experiments/reference/启动一个tensorboard实例。在书面报告中报告你的发现。日志如下图所示:

自动驾驶之项目一-城市环境的目标检测_第3张图片

                                                  Tensorboard训练日志

训练结束后,启动评估流程。与训练过程并行启动评估过程将导致工作空间中的OOM错误。

  • 评估过程:
python experiments/model_main_tf2.py --model_dir=experiments/reference/ --pipeline_config_path=experiments/reference/pipeline_new.config --checkpoint_dir=experiments/reference/

默认情况下,评估脚本只运行一个epoch。因此,Tensorboard中的eval日志将看起来像一个蓝点。

注意:两个进程都会显示一些Tensorflow警告,可以忽略。您可能必须使用CTRL+C手动终止评估脚本。

步骤4 -提升表现

最有可能的是,这个最初的实验没有产生最佳结果。但是,您可以对配置文件进行多次更改以改进此模型。

  • 一个明显的变化是改进了数据增强策略。preprocessor. proto(https://github.com/tensorflow/models/blob/master/research/object_detection/protos/preprocessor.proto文件包含Tf对象检测API中可用的不同数据增强方法。为了帮助可视化这些增强,提供了一个notebook:Explore augments .ipynb。使用该notebook,尝试不同的数据增强组合,并选择认为最适合的数据集的组合。在书面陈述中证明你的选择是正确的。

  • 请记住,以下也是可用的:

    • 实验优化器:优化器的类型,学习率,调度程序等
    • 对架构进行实验。Tf对象检测API模型zoo(https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md提供了许多架构。请记住pipeline. config文件对于每个体系结构都是唯一的,您必须对其进行编辑。

创建动画视频

导出训练好的模型

修改以下函数的参数,使其适应你的模型:

python experiments/exporter_main_v2.py --input_type image_tensor --pipeline_config_path experiments/reference/pipeline_new.config --trained_checkpoint_dir experiments/reference/ --output_directory experiments/reference/exported/

这将创建一个新的文件夹experiments/reference/exported/saved_model。可以在这里(https://www.tensorflow.org/guide/saved_model阅读更多关于Tensorflow SavedModel格式的内容。

最后,可以为任何tf记录文件创建模型推理的视频。为此,运行以下命令(将其修改到您的文件中):

python inference_video.py --labelmap_path label_map.pbtxt --model_path experiments/reference/exported/saved_model --tf_record_path data/test/segment-12200383401366682847_2552_140_2572_140_with_camera_labels.tfrecord --config_path experiments/reference/pipeline_new.config --output_path animation.gif

提交模板

项目概述

这一部分应该包含项目的简要描述和我们正在努力实现的目标。为什么物体检测是自动驾驶汽车系统的重要组成部分?

设置

本节应该包含运行此存储库代码所需遵循的步骤的简要描述。

数据集

数据集分析

本节应包含数据集的定量和定性描述。它应该包括图像,图表和其他可视化。

交叉验证

本节应该详细说明交叉验证策略并证明您的方法是正确的。

训练

参考实验

本节应详细说明参考实验的结果。它应该包括训练指标和算法性能的详细解释。

改进参考

本节将重点介绍您为改进模型所采用的不同策略。它应该包含你的发现的相关数据和细节。

参考代码---

GitHub - jeffnd/nd013-c1-vision-starter: Starter Code for the Course 1 project of the Udacity Self-Driving Car Engineer Nanodegree Program

你可能感兴趣的:(自动驾驶,目标检测,人工智能)