美文网首页我爱编程
识别照片中红绿灯位置和颜色(深度学习)

识别照片中红绿灯位置和颜色(深度学习)

作者: f3069 | 来源:发表于2018-03-25 16:54 被阅读3759次

    识别照片中红绿灯位置和颜色(深度学习)

    一.内容

    设计识别照片中红绿灯的位置和颜色的解决方案,一种是用图像处理的算法找出红绿灯的位置然后进行颜色识别;另一种方法是深度学习,用样本训练出模型。考虑项目时间的限制以及预期效果,决定采用深度学习的方法来解决识别问题。

    1.目的:识别器需要判断照片中是否有红绿灯并且输出红灯、绿灯或是黄灯。

    2.方案步骤:

    1. 采集红绿灯图像。数量要大,包含红绿黄三种颜色的红绿灯,以及无红绿灯的照片。
    2. 对照片进行标记,作为训练样本。
    3. 对样本进行训练,预期能得到一个基本准确的模型。
    4. 采用模型进行测试数据,计算准确率。
    5. 将成熟的TensorFlow模型转换成移动端iOS Core ML机器学习模型。在移动端实现识别红绿灯位置和颜色的功能。

    3.可能存在的问题:

    1. 照片中的交通灯不止一个,即有多个方向的交通灯。需要识别行驶方向的信号灯,并排除干扰。
    2. 白天和夜晚、特殊环境等影响因素会干扰结果。

    3.预期效果:

    通过深度学习能排除周围其他方向红绿灯的干扰,识别出绿灯并在手机屏幕上显示出来,扬声器实现语音播报:“前方有绿灯”。

    二.实施

    1.采用TensorFlow学习系统,Object Detection 作为预训练模型。

    2.样本预处理:

    旋转图片:到将图片随机旋转0度、90度、180度和270度并且导入训练模型,用来确定天空的位置,以提高识别精度。

    3.训练多个子模型,合并总模型

    1号模型:过采样预训练网络

    基于TensorFlow的Object Detection预训练模型,根据手动修正后的图像集合进行训练。

    训练数据增强步骤:

    1. 随机水平翻转
    2. 从图像中随机切割227×227像素大小的方块,喂养到训练网络
    3. 在测试时,每张图像会形成10个变体,平均计算出最终的预测结果。这10个变体为:5个227×227的随机切割图像:从中心切割1个,4个角各切割1个以及水平翻转后的5个相同位置随机切割图像

    2号模型:添加旋转不变性

    2号模型与1号模型非常相似,加上了图像旋转。在训练时间,图像会随机旋转90度、180度、270度或0度(不旋转)。在测试时,每一种情况都与模型1中创建变体做相同的分析。这样2号模型会分析40个变体,并将结果平均在一起。

    3号模型:全新训练

    3号模型不是基于Object Detection的微调,而是从零开始训练。背后的逻辑是即使准确率较低,但它会产生与上两个模型不同的特征,在三个模型合并之后,这会非常有用。
    数据训练和测试过程与模型1基本相同:翻转和切割。

    结合模型

    • 每个模型都会输出三个值,表示图像属于三大类中每一类的概率(没有红绿灯/红灯/绿灯)。我根据以下的权重平均计算它们的输出值
    • 三个子模型权重的值根据实际效果定义。

    三.目前进展(2018.2)

    1. 采集了1300张红绿灯图片(拍摄60张,从ImageNet下载1240张),处理图像数据并使用TensorFlow框架训练。
    2. 使用2种预训练模型,一种是SSD,另一是Faster RCNN。前者使用速度快,但准确率不高;后者使用速度慢,但精度高。得到了初步的神经网络模型,基本能实现识别红绿灯的位置。
    3. 缺点:准确率低,检测视频中的红绿灯位置时会出现掉帧的情况,即某些帧不能检测出红绿灯。考虑用目标跟踪算法来弥补这个缺点。
    4. 截图:


      截图

    相关文章

      网友评论

        本文标题:识别照片中红绿灯位置和颜色(深度学习)

        本文链接:https://www.haomeiwen.com/subject/dpxkcftx.html