DLib:train_shape_predictor_ex.cpp
Posted
技术标签:
【中文标题】DLib:train_shape_predictor_ex.cpp【英文标题】:DLib : train_shape_predictor_ex.cpp 【发布时间】:2016-08-11 05:58:43 【问题描述】:我正在尝试通过在 helen dataset 上执行 train_dlib_shape_predictor_ex.cpp 来训练 Dlib 的形状预测器,如代码中所述,我将测试图像放在形状预测器当前目录中的人脸文件夹中。但是当我运行代码时,它会抛出以下异常:
C:\train_shape_predictor_ex\Release>train_shape_predictor_ex test
exception thrown!
ERROR: unable to open test/training_with_face_landmarks.xml for reading.
因为没有training_with_face_landmarks.xml
和testing_with_face_landmarks.xml
文件在以下页面的海伦数据集中可用:link
有一个名为 annotation 的文件夹,其中包含一个文本文件,其中包含数据集中每张图像的 194 个地标点位置。如何将此文件转换为training_with_face_landmarks.xml
。
【问题讨论】:
我认为您必须自己标记它们。 DLib 有一个有用的工具:github.com/davisking/dlib/tree/master/tools/imglab @Moreira 注释文件夹包含每个图像的单独文件。那我应该怎么做一个training_with_face_landmarks.xml
您有两个选择:要么忽略注释文件夹并使用 DLib 工具手动标记图像(阅读我以前的 cmets 站点上的 README.txt),要么必须映射注释中的坐标到training_with_face_landmarks.xml
所需的坐标。但是,这个文件需要额外的数据,例如边界框,我认为您无法从注释文件中获得这些数据。
@Moreira 我已经使用 Visual Studio 编译了 dlib 和示例。你能告诉我如何使用 Visual Studio 编译 imglab。
@Moreira 好的,我已经编译了 imglab 并获得了 xml 文件中每个图像的边界框。你能告诉我如何在这个 xml 文件中为每张图像添加地标点吗?
【参考方案1】:
打开“training_with_face_landmarks.xml”文件并观察其结构。
现在,问问自己:
-
文件之间有什么变化? (提示:点数据)
什么保持不变? (提示:通用“样板”顶部和尾部)
打开 HELEN 数据 - 再次询问...
您现在的任务是将来自 HELEN 集合的数据解析为一个临时数据结构/变量,然后将其写入包含所有必需的顶部和尾部的文件。在循环内循环内写循环会很麻烦,可能很烦人,但你会到达那里。
'c++ i/o streams' 作为搜索字符串将帮助您入门。
【讨论】:
我在 helen 数据集中没有得到任何 training_with_face_landmarks.xml 文件。 如果我为每个图像中的每个对象提供边界框可能会改变图像的检测框 @VIctor,我的意思是打开你已经拥有的示例 .xml。我的意思是你必须对此进行逆向工程。至少我是这样做的。 嘿@LamarLatrell,在进行从 helen 到 dlib 格式的转换时,您是否只是从 68 个点集(最小值、最大值等)中扣除了边界框?【参考方案2】:我为总共 2000 张图像的海伦训练图像(第 1、2、3 和 4 部分)创建了 training_with_face_landmarks.xml。
下载链接:https://www.dropbox.com/s/jk98moqm8vopp5b/training_with_face_landmarks_2000.zip?dl=0
步骤:
-
从http://www.ifp.illinois.edu/~vuongle2/helen/ 下载训练图像 - 第 1 部分、训练图像 - 第 2 部分、训练图像 - 第 3 部分和训练图像 - 第 4 部分。 (每个部分有 500 张图片,所以总共 2000 张图片)
将所有图像和 training_with_face_landmarks.xml 放在一个公共文件夹中(例如:文件夹名称“train”)。
在项目 train_shape_predictor_ex.cpp 中,注释掉这些部分/行
一个。参考 testing_with_face_landmarks.xml 及其用法 湾。培训师 set_oversampling_amount(100) C。培训师 set_nu(0.05) d。训练器 set_tree_depth(3)
将命令行参数设置为 ./train 运行项目 它将生成大小约为 178 MB 的 sp.dat(在我的笔记本电脑上大约需要 2 小时) 在 face_landmark_detection_ex 项目中使用这个 sp.dat 文件 命令行示例:sp.dat Example_image.jpg 在 face_landmark_detection_ex.cpp 中, 一种。在194的循环中,调用draw_solid_circle函数 湾。使用 save_png 函数将地标输出保存为文件。享受:)
问候 戈皮。 J
【讨论】:
更新了 testing_with_face_landmarks.xml 以及 194 点 dat 文件。链接:dropbox.com/sh/t5h024w0xkedq0j/AABS3GprqIvb_PwqeHOn2dxNa?dl=0 第 9 步:打印地标数字而不是圆圈的代码: Mat buff_img; buff_img = toMat(img);诠释 k; for (k = 0; k 可能是有史以来最好的答案! 这样可以节省大量的工作和时间。我将 HELEN 注释文件与 training_with_face_landmarks.xml 进行了比较。不同之处在于,HELEN 注释具有亚像素(浮点)精度,这在地标文件中被忽略,这意味着它具有像素(省略逗号的整数,而不是四舍五入)精度。并且可能必须更改 landmarks.xml 中的图像路径。不过,干得好!以上是关于DLib:train_shape_predictor_ex.cpp的主要内容,如果未能解决你的问题,请参考以下文章
from _dlib_pybind11 import * ModuleNotFoundError: No module named '_dlib_pybind11'