c++ - 使用 dlib 训练行人检测器的最佳方法

标签 c++ opencv object-detection dlib

我正在尝试使用 dlib 训练行人检测器和 INRIA Person Dataset .

到目前为止我使用了 27 张图像,训练速度很快但结果并不令人满意(在其他图像上行人很少被识别)。这是我使用 dlib 附带的 train_object_detector 程序训练的结果(在/exmaples 目录中):

Saving trained detector to object_detector.svm

Testing detector on training data...

Test detector (precision,recall,AP): 1 0.653061 0.653061

Parameters used:

threads: 4

C: 1

eps: 0.01

target-size: 6400

detection window width: 47

detection window height: 137

upsample this many times : 0

我知道需要将其他图像添加到训练中以获得更好的结果,但在此之前我想确定结果中打印的每个参数的含义(精度、召回率、AP、c、 eps,...)我还想知道您是否对培训有任何建议:选择哪些图像?需要多少张图片?我需要注释图像中的每个对象吗?我需要忽略图像中的某些区域吗? ...

最后一个问题,是否有任何训练有素的检测器(svm 文件)可用于比较我的结果?

谢谢你的回答

最佳答案

我对 dlib 不是特别熟悉,但让我告诉你,使用 27 张图像你不会得到好的结果。为了很好地泛化,您的分类器需要看到许多具有各种数据的图像。向它提供 10,000 张同一个人穿着相同服装的图像对您没有任何好处。你想要不同的人、衣服、场景、角度和灯光。 INRIA 数据集应该涵盖其中的大部分。

您的检测窗口尺寸和上采样设置将决定图像中的人必须看起来有多大,以便您训练的分类器能够可靠地检测到他们。您的设置将仅检测 1 比例的人,他们的高度/宽度约为 137/47 像素。如果你上采样一次,你将能够检测到较小规模的人(上采样使人看起来比实际更大)。我建议您使用更大的数据集并增加上采样数(上采样的数量是另一个讨论 - 似乎内置于库中)。事情会花费更长的时间,但这就是训练分类器的本质 - 调整参数、重新训练、比较结果。

为了精确度/召回率,我会向您推荐 this维基百科文章。这些不是参数,而是分类器的结果。您希望两者都尽可能接近 1。

关于c++ - 使用 dlib 训练行人检测器的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36472136/

相关文章:

c++ - Zeromq : How to send message longer than 30 character from python client to c++ server

c++ - Squareroot 在 C++ 中不返回数字

python - 不显示 python OpenCV 错误

c - cvMemStorage的结构?

python - 为什么在 YOLOv5 中两个结果不同?

python - 在目标检测中使用步长为 1 的最大池化层的目的是什么

c++ - hudson 、C++ 和 UnitTest++

c++ - 确定字节数组是否包含 ANSI 或 Unicode 字符串?

python - 如何获取图像的红色 channel 颜色空间?

python - 使用 keras 检测小型自定义对象