将多线程与 dlib 的 shape_predictor 一起使用

Posted

技术标签:

【中文标题】将多线程与 dlib 的 shape_predictor 一起使用【英文标题】:Using multithreading with dlib's shape_predictor 【发布时间】:2021-09-14 08:32:43 【问题描述】:

我正在训练一个形状预测器,使用 dlib 对图片进行地标检测。到目前为止一切正常,我的结果也不错。我正在使用

options = dlib.shape_predictor_training_options()

options.num_threads = 12

这是我的 CPU 线程数。我尝试过其他数字,但是在训练时它只使用 1 个核心。

我想用我所有的核心进行训练,因为它只需要 1 个。

我在 Windows 10 上使用 conda env、python 3.5.6 和 dlib 18.18。我在网络上找不到针对此问题的任何解决方案。希望得到各位的帮助。

【问题讨论】:

你有什么问题?您搜索解决方案的“问题”是什么? options.num_threads = 12 不管我放什么,它只使用1!核。我希望它使用所有核心进行训练。 【参考方案1】:

这里有类似的问题。 我在做人脸识别,而不是训练。 我正在使用函数 dlib.get_frontal_face_detector()。

或多或少我是这样解决的。

我有脚本 my_script.py。

里面有函数my_script()。

在 my_script() 内部有几条指令,尤其是 dlib 函数。

import dlib
def my_script():
    dlib.get_frontal_face_detector().

在 my_script.py 中有函数 my_script(),外加一个经典的多线程代码块。

此多线程代码适用于每个线程函数,但不适用于 my_script(),因为它包含 DLIB FUNCTIONS。

因此,我删除了多线程代码并在后台的 bash shell 中运行了几个 my_script.py 实例。

my_script.py &
my_script.py &
my_script.py &
etc..

更好的解决方案是使用 SUBPROCESS。

所以我创建了另一个脚本 my_script2.py 。 里面有两段代码。

A.下面定义的函数my_script2()。

B.经典的多线程代码块。

作为线程函数,我使用函数 my_script2()。

在 my_script2() 里面有命令 subprocess.run。

命令 subprocess.run 调用 my_script.py。

在 my_script.py 里面只有函数 my_script()。

正如您在前面的示例中看到的,在 my_script() 内部有函数 dlib.get_frontal_face_detector()。

def my_script2():
    command='python my_script.py'
    os.chdir(directory_of_myscript)
    subprocess.run(command,shell=True)

我只是想观察一些人有类似的问题。

    OpenCV / Python : multi-threading for live facial recognition

    how to use multi-threading for optimizing face detection?

【讨论】:

以上是关于将多线程与 dlib 的 shape_predictor 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将多线程合并到 C++ 中如何提高性能,为啥?

将多线程或异步添加到 Web 抓取

将多线程输出保存到txt文件

将多线程 Delphi 应用程序移植到 Mac:我的选择是啥?

Java-将多线程停止的两种方法

如何将多线程应用于方法