目标检测:需要培训或不需要培训
Object Detection: Training Requried or No Training Required?
这个问题与对象检测有关,基本上是检测任何"已知"对象。例如,假设我有以下对象:
- 表
- 。 相机汽车
我将从所有这些单独的对象中拍摄4张照片。一个在左边,一个在右边,另外两个在上下。我原本以为可以用这4张照片来识别这些物体,因为你有4个角度的照片,不管你怎么看,你都可以发现它。
但是我对某人关于用每个对象的数千个正面和负面图像来训练引擎的想法感到困惑。我真的不认为这是必要的。
所以简单地说,我的问题是,为了识别一个物体,我是否需要这数千个积极和消极的物体?或者仅仅从4个角度拍4张照片就足够了?我希望使用OpenCV。
实际上主要的事情是这样的…假设我有两台笔记本电脑。一个是戴尔,另一个是惠普。两者都是笔记本电脑,但你知道,它们有明显的区别,包括徽标。我们可以使用功能描述来做到这一点吗?如果不是,"训练"过程有多"艰难"?需要多少张照片?
更新2 我需要检测"特定"的物体。不是所有的汽车,所有的瓶子等等。例如,"马鲁蒂汽车123型"answers"法拉利汽车234型"都是汽车,但不同。假设我有上述车型的Maruti和Ferrari的图片,那么我需要检测它们。我不需要担心其他汽车或车辆,甚至其他型号的马鲁蒂和法拉利。但上述"马鲁蒂汽车123型"应识别为"马鲁蒂汽车123型",上述"法拉利汽车234型"应识别为"法拉利汽车234型"。我需要拍多少张照片?
答案:
-
如果你想检测一个特定的对象,你不需要考虑视点的变化,你可以使用2D特征:http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html
-
为了区分两个徽标,您可能需要为每个徽标构建一个检测器,该检测器将在一组图像上进行训练。例如,你可以训练一个Haar级联分类器
-
为了区分不同型号的汽车,您可能需要使用每辆车的训练图像来训练分类器。然而,我遇到了一个使用最近邻方法的应用程序-它只是从给定的测试图像中提取特征,并将其与一组已知的不同汽车模型的图像进行比较。
另外,如果您对应用程序有更多的解释,我可以推荐一些方法和包。
要回答你在标题中提出的问题,如果你想要能够确定图片中的对象是什么,你需要一个监督算法(又名训练算法)。否则,在某些情况下,你将能够确定一个物体的边缘或存在,但不确定它是什么样的物体。为了告诉对象是什么,你需要一个标记的训练集。
关于问题的内容,一个物体的图片中可能的角度的数量是无限的。如果你的训练集中只有四张图片,那么测试样例的角度可能介于训练样例A和训练样例B之间,这使得你的算法很难识别。训练集越大,识别目标的概率越高。注意:你永远无法达到绝对的确定性,你的算法将识别对象。
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 为什么output_editor Concept不需要output_e迭代器标记
- 在除法中不需要四舍五入
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 将值从另一个数组写入数组,不包括不需要的值 C++
- C++ 写入路径名中包含不需要的空字符的文件
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 使用 assimp 加载模型 - 不需要提升?
- 为什么转换函数声明不需要至少一个定义类型说明符
- 返回不需要的值的二叉搜索程序
- 当我不需要数据库中的所有值时,如何部分初始化 c++ 对象?
- C++:用户输入会产生不需要的行为
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- 为什么python需要全局关键字而C/C++不需要?
- 将一个宏传递到另一个宏而不是直接传递内容时会出现不需要的额外"空"参数
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- 为什么不需要在 C++20 中的依赖类型之前指定"typename"?
- 目标检测:需要培训或不需要培训