识别照片中红绿灯位置和颜色(深度学习)
一.内容
设计识别照片中红绿灯的位置和颜色的解决方案,一种是用图像处理的算法找出红绿灯的位置然后进行颜色识别;另一种方法是深度学习,用样本训练出模型。考虑项目时间的限制以及预期效果,决定采用深度学习的方法来解决识别问题。
1.目的:识别器需要判断照片中是否有红绿灯并且输出红灯、绿灯或是黄灯。
2.方案步骤:
- 采集红绿灯图像。数量要大,包含红绿黄三种颜色的红绿灯,以及无红绿灯的照片。
- 对照片进行标记,作为训练样本。
- 对样本进行训练,预期能得到一个基本准确的模型。
- 采用模型进行测试数据,计算准确率。
- 将成熟的TensorFlow模型转换成移动端iOS Core ML机器学习模型。在移动端实现识别红绿灯位置和颜色的功能。
3.可能存在的问题:
- 照片中的交通灯不止一个,即有多个方向的交通灯。需要识别行驶方向的信号灯,并排除干扰。
- 白天和夜晚、特殊环境等影响因素会干扰结果。
3.预期效果:
通过深度学习能排除周围其他方向红绿灯的干扰,识别出绿灯并在手机屏幕上显示出来,扬声器实现语音播报:“前方有绿灯”。
二.实施
1.采用TensorFlow学习系统,Object Detection 作为预训练模型。
2.样本预处理:
旋转图片:到将图片随机旋转0度、90度、180度和270度并且导入训练模型,用来确定天空的位置,以提高识别精度。
3.训练多个子模型,合并总模型
1号模型:过采样预训练网络
基于TensorFlow的Object Detection预训练模型,根据手动修正后的图像集合进行训练。
训练数据增强步骤:
- 随机水平翻转
- 从图像中随机切割227×227像素大小的方块,喂养到训练网络
- 在测试时,每张图像会形成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)
- 采集了1300张红绿灯图片(拍摄60张,从ImageNet下载1240张),处理图像数据并使用TensorFlow框架训练。
- 使用2种预训练模型,一种是SSD,另一是Faster RCNN。前者使用速度快,但准确率不高;后者使用速度慢,但精度高。得到了初步的神经网络模型,基本能实现识别红绿灯的位置。
- 缺点:准确率低,检测视频中的红绿灯位置时会出现掉帧的情况,即某些帧不能检测出红绿灯。考虑用目标跟踪算法来弥补这个缺点。
-
截图:
截图
网友评论