【问题标题】:Object detection using Keras : simple way for faster R-CNN or YOLO使用 Keras 进行对象检测:更快的 R-CNN 或 YOLO 的简单方法
【发布时间】:2017-11-25 00:21:21
【问题描述】:
也许已经回答了这个问题,但我没有找到一个简单的答案。我使用 Keras 创建了一个卷积网络来分类辛普森一家 (dataset here)。
我有 20 个类并提供图像作为输入,然后返回角色名称。这很简单。我的数据集包含图片中带有主角的图片,并且只有角色的名称作为标签。
现在我想添加一个对象检测问题,即在图片中的字符周围绘制一个边界框并预测它是哪个字符。我不想使用滑动窗口,因为它真的很慢。所以我考虑使用更快的 RCNN (github repo) 或 YOLO (github repo)。我是否必须为训练集的每张图片添加边界框的坐标?有没有办法在不提供训练集坐标的情况下进行对象检测(并在我的测试中获取边界框)?
总而言之,我想创建一个简单的物体检测模型,不知道是否可以创建一个更简单的YOLO或Faster RCNN。
非常感谢您的帮助。
【问题讨论】:
标签:
deep-learning
classification
keras
object-detection
【解决方案1】:
yolo 或更快的 rcnn 的目标是获取边界框。所以简而言之,是的,您需要标记数据来训练它。
走捷径:
- 1) 为几个边界框标记(假设每个字符 5 个)。
- 2) 在非常小的数据集上训练更快的 rcnn 或 yolo。
- 3) 针对完整数据集运行您的模型
- 4) 会做对一些,做错很多。
- 5) 在正确有界的 rcnn 上训练更快的 rcnn,您的
训练集现在应该更大了。
- 6) 重复,直到获得您想要的结果。
【解决方案2】:
您可能已经想到了一个合适的架构:“现在我想添加一个对象检测问题,即在图片中的字符周围绘制一个边界框并预测它是哪个字符。”
所以你只需将任务分成两部分:
1. 添加对象检测器用于人员检测以返回边界框
2. 使用你已经训练好的卷积网络对边界框进行分类
对于第 1 部分,您最好使用特征检测器(例如在 COCO 或 Imagenet 上预训练的卷积网络)和顶部的对象检测器(仍然是 YOLO 和 Faster-RCNN)来检测人。
但是,您可能会发现“卡通”中的人(假设辛普森一家是人)没有被正确识别,因为特征检测器不是在基于卡通的图像上训练的,而是在真实图像上训练的。在这种情况下,您可以尝试根据transfer learning 方法重新训练卡通图片上的特征检测器的几层,以便学习卡通特征。