python - 如何将我的 python 代码转换为在 GPU 而不是 CPU 上运行?
问题描述
我得到了一个 python 代码,它以两个图像作为输入并使用 Gabor 过滤器来查找两个图像的 RGB 的相关性并将其保存在一个 csv 文件中。所以我需要使用 GPU 执行程序,因为它需要很多时间和 CPU 利用率。我有一个 GeForce GTX 1050 Ti,并且是一个完全的编程初学者。
我做了一些研究并了解了 CUDA 和 Tensorflow,但我真的不确定如何继续实施它,以及在不更改大部分代码的情况下最好的方法是什么。
#Gabor Filter
def build_filters():
filters = []
#tesing phrase filter - reduce
for ksize in range(9, 19, 5):
for theta in np.arange(45, 225, 45):
for sigma in range(2,6,2):
kern = cv2.getGaborKernel((ksize, ksize), sigma, theta, 5.0, 0.5, 0, ktype=cv2.CV_32F)
kern /= 1.5*kern.sum()
filters.append(kern)
return filters
#Apply filter into the image
def process(images, f):
accum = np.zeros_like(images)
for kern in f:
fimg = cv2.filter2D(images, cv2.CV_8UC3, kern)
np.maximum(accum, fimg, accum)
return accum
完整代码: https ://gitlab.com/t.tansuwan/image_diff_kce/blob/master/allPixelNoCrop.py
谢谢!
解决方案
Numba可以将一小部分 Python 子集转换为 .
您需要使用 conda 包管理器安装 numba 和 cudatoolkit conda install numba cudatoolkit
:. 然后你可以添加@jit(nopython=True, parallel=True)
我不确定 Numba 是否可以与 OpenCV 一起使用,但您当然可以尝试。Python 并不真正适合高性能计算,您最好学习 FORTRAN、着色器语言或 C 并在其中实现您的计算。
推荐阅读
- html - 如何创建具有正确缩进的自定义 HTML li 点
- visual-studio-code - 如何在resolveCodeLens 中过滤镜头?
- .htaccess - 使用 .htaccess 重定向到页面
- python - 如何在 Scipy 中移动图像?
- jenkins - Jenkins 角色策略插件和多分支管道
- javascript - 为什么将样式添加到所有对象,而不是选定对象
- python - 将空列表保留在同一索引中,同时展平列表 ot 列表(嵌套列表)
- amazon-cloudwatch - 扩展 Fargate 服务任务以匹配 CloudWatch 指标
- deployment - Prisma 部署后问题
- python-3.x - 在 macOS 上安装 pwntools