# project-vehicle-detect **Repository Path**: dwSun/project-vehicle-detect ## Basic Information - **Project Name**: project-vehicle-detect - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2020-03-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 人工智能工程师实战项目 车辆检测及型号识别 # 视觉方向 ## 简介 车辆检测及型号识别广泛应用于物业,交通等的管理场景中。通过在停车场出入口,路口,高速卡口等位置采集的图片数据,对车辆的数量型号等进行识别,可以以较高的效率对车型,数量信息等进行采集。通过采集的数据,在不同的场景中可以辅助不同的业务开展。如商场停车位的规划,路况规划,或者公安系统追踪肇事车辆等等。 课程中,学员们已经掌握了使用slim框架来对图片进行分类识别。也掌握使用slim物体检测框架来进行物体的检测和识别。 本项目中,要求学员们结合课程中学到的内容,实现一个车辆检测的工业级系统。 ## 项目 学员需要利用tensorflow提供的slim图片分类框架和物体检测框架实现一个可以对任意图片进行车辆检测的系统。 按照课程中,对于深度学习项目的总结,本项目可以大致分为4个阶段: - 数据准备与处理 - 网络设计 - 模型训练 - 评估与调参 #### 数据准备与处理 在此阶段中,需要对数据做一定的预处理,根据不同方案的选择,预处理的方式可能与有所不同。 如果是训练分类数据,那么数据中的图片,可能需要做图像的左右翻转,颜色,亮度,饱和度等的变化。但是,由于数据为车辆数据,所以不应该出现上下颠倒的情况,因此上下翻转的操作一定要去掉。 如果是端到端方案,那么要考虑对数据进行标注,手动标注可以使用一些开源工具,如imglabel等,自动标记可以使用一些预训练模型。如果是自动标记,还需要考虑手动对标记结果进行审核等。 作为有标定信息的数据,还要考虑如何转换为合适的格式输入网络使用。 同时根据使用的框架不同,还要考虑数据要做成CHW还是HWC格式。 #### 网络设计 可以考虑分步模型的方案,考虑组合预训练检测模型和分类模型做检测识别。同时,端到端的方案也可以考虑,业务网络的设计可以考虑选择课程中介绍的 rcnn(r-cnn/fast rcnn/faster rcnn) 系列,端到端系列(yolo/ssd),或者是比较新的一些网络(maskrcnn/centernet等等)。 #### 模型训练 通过使用预训练模型,合理的损失函数的应用,合理学习率/正则项设置,加快模型训练速度。 #### 评估与调参 通过对模型性能数据的分析和处理。解决过拟合/欠拟合现象,同时通过对各种不同参数的选择,提高最终模型的准确率。 如果是端到端方案,因为数据的标定问题,可能需要对数据的标定进行迭代,逐步提高标定的准确性。 ## 评价标准 ### 成果1, 一整套可以运行的系统 包含代码和详细的文档。文档要求可操作。能够按照文档的描述搭建系统并运行。文档不全者酌情扣分。 文档要求: - 对系统的各个组成部分的构造和自己的理解以及相互之间的关系的描述。 - 训练过程中踩到的一些坑和自己的心得。 - 对系统的输出结果的简单分析。 系统要求能检测任意图片并给出合理的输出。 系统需要给出合理的评价指标,例如map等。 ### 成果2, 提供一个演示视频 视频内容:从任意图片网站上,随机下载一张有汽车在内的图片,送入系统进行检测。可以输出并显示图片中车辆的位置和型号等信息。没有车辆的图片可以给出没有检测到的提示。 ## 数据集 本项目提供一个车辆分类的数据集。(注意是分类数据,内部没有定位信息) 本项目提供的数据集分类参考数据集中的labels.txt文件: 共48856张图片 其43971张作为训练集,4885张作为验证集。 数据已经预先打包成tfrecord格式,数据格式与课程中,分类模型使用的数据格式相同,打包关键代码参考"download_and_convert_flowers.py"。请联系课程管理人员获取训练数据。 ## 要点提示 - 数据准备过程在linux系统上进行,尽量不要尝试在windows上进行数据的准备,会遇到各种奇怪的问题。 - 系统的输入输出不做要求,能够正常演示即可。 - 推荐的输入方式有: - 命令行直接指定待识别文件 - 搭建一个web系统,使用表单方式上传文件 - 搭建一个native程序,使用pyqt等GUI框架搭建GUI界面 - 推荐的输出方式: - 将检测结果写入文件 - 使用matplotlib显示检测结果 - 搭建一个web系统,在web页上显示结果 - 搭建一个native程序,使用pyqt等GUI框架搭建GUI界面 - 训练数据集为分类数据,在1080Ti显卡上,以inceptionv4网络,0.001的学习率,利用google提供的预训练模型,在6~8个小时的训练后可以得到top1 80%的准确率。经过24个小时的训练后,top1可以达到88%。 - 该项目为一个比较典型的工业项目,提供的是分类数据,却要求实现检测的功能。 - 数据集来自网络,未经过人工清洗