我有一个嵌套的for循环(来自here)
heatmaps是形状为(14,50,60)的MLMultiArray。这段代码迭代了shape (50,60)的14个子数组,并找到每个值的最大值。
代码如下:
for k in 0..<keypoint_number {
for i in 0..<heatmap_w {
for j in 0..<heatmap_h {
let index = k*(heatmap_w*heatmap_h) + i*(heatmap_h) + j
let confidence = heatmaps[index].doubleValue
guard confidence > 0 else { continue }
if n_kpoints[k] == nil ||
(n_kpoints[k] != nil && n_kpoints[k]!.maxConfidence < confidence) {
n_kpoints[k] = PredictedPoint(maxPoint: CGPoint(x: CGFloat(j), y: CGFloat(i)), maxConfidence: confidence)
}
}
}
}等效的python代码:
for p_ind in range(n_keypoints):
heat = heatmaps[0, p_ind, :, :]
ind = np.unravel_index(np.argmax(heat), heat.shape)使用iPhone 12 mini时,Swift功能大约需要36ms,而使用iPhone 11Pro Max时,大约需要58ms。我想优化它,减少它的运行时间。
我该怎么做呢?
如果我用Objective-C编写代码会有帮助吗?怎么做呢?
谢谢
发布于 2021-05-23 18:27:38
加速框架有一个优化的argmax函数。你也可以在GitHub上的CoreMLHelpers中找到它。
https://stackoverflow.com/questions/67657533
复制相似问题