gpt4 book ai didi

python - ITK Filter 在 C++ 中比 Python 慢

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:06 25 4
gpt4 key购买 nike

我使用 SimpleITK 在 Python 中创建了一个模块,我尝试通过在 C++ 中重新实现来加速该模块。事实证明速度慢了很多。

瓶颈是 DisplacementFieldJacobianDeterminantFilter 的使用。

这两个片段给出了过滤器用法的示例。

1000 代:C++ = 55s,python = 8s

我应该期望 C++ 更快吗?

def test_DJD(label_path, ngen):

im = sitk.ReadImage(label_path)

for i in range(ngen):
jacobian = sitk.DisplacementFieldJacobianDeterminant(im)


if __name__ == '__main__':


label = sys.argv[1]
ngen = int(sys.argv[2])
test_DJD(label, ngen)

以及 C++ 代码

typedef itk::Vector<float, 3> VectorType;
typedef itk::Image<VectorType, 3> VectorImageType;
typedef itk::DisplacementFieldJacobianDeterminantFilter<VectorImageType > JacFilterType;
typedef itk::Image<float, 3> FloatImageType;



int main(int argc, char** argv) {

std::string idealJacPath = argv[1];
std::string numGensString = argv[2];

int numGens;
istringstream ( numGensString ) >> numGens;



typedef itk::ImageFileReader<VectorImageType> VectorReaderType;
VectorReaderType::Pointer reader=VectorReaderType::New();
reader->SetFileName(idealJacPath);
reader->Update();
VectorImageType::Pointer vectorImage=reader->GetOutput();


JacFilterType::Pointer jacFilter = JacFilterType::New();

FloatImageType::Pointer generatedJac = FloatImageType::New();

for (int i =0; i < numGens; i++){
jacFilter->SetInput(vectorImage);
jacFilter->Update();
jacFilter->Modified();
generatedJac = jacFilter->GetOutput();
}
return 0;

}

我正在使用 c++ ITK 4.8.2 并在 Ubuntu 15.4 上以“发布”模式进行编译。和 python SimpleITK v 9.0

最佳答案

您似乎正在使用循环进行基准测试。使用循环进行基准测试并不是一个好的做法,因为编译器和解释器对它们做了很多优化。

我相信这里

for i in range(ngen):
jacobian = sitk.DisplacementFieldJacobianDeterminant(im)

Python 解释器很可能意识到您仅使用分配给 jacobian 变量的最后一个值,因此仅执行循环的一次迭代。这是一种非常常见的循环优化。

另一方面,由于您在 C++ 版本中调用了几个动态方法 (jacFilter->Update();),编译器可能无法推断其他调用是不被使用,使您的 C++ 版本变慢,因为实际上对 DisplacementFieldJacobianDeterminant::update 方法的所有调用都是进行的。

另一个可能的原因是,Python 中的 ITK 管道没有被强制更新,因为您在 C++ 中显式调用了 jacFilter->Modified(),但这在 Python 版本中并不显式。

关于python - ITK Filter 在 C++ 中比 Python 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34401894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com