将多线程与 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 一起使用的主要内容,如果未能解决你的问题,请参考以下文章