gpt4 book ai didi

python - 如何在python中 reshape 图像的128 d矢量

转载 作者:行者123 更新时间:2023-12-02 17:27:52 30 4
gpt4 key购买 nike

我正在尝试计算两个图像之间的euclidean distance。为此,我首先获取图像的128d数组,然后使用cv2.norm()获取距离。下面是代码:

embedder = cv2.dnn.readNetFromTorch(<model_path>)
embedder.setInput(faceBlob)
unknown_vector = embedder.forward()

###
# SOME CODE
###

for i in range(len(known_embeddings["embeddings"])):
known_vector = known_embeddings["embeddings"][i]
distance = cv2.norm(unknown_vector, known_vector)

但在 cv2.norm()之上却给出以下错误:
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\core\src\norm.cpp:1018: error:
(-215:Assertion failed) _src1.sameSize(_src2) && _src1.type() == _src2.type() in function 'cv::norm'

我打印了 known_vectorunknown_vector,它看起来像下面的样子:
known_vector = [ 0.05413035  0.0257974   0.00822693 -0.02118884 -0.00418675  0.21330039
0.04995908 0.08850633 -0.10475695 0.04271172 0.08244997 0.11823266
0.05605 -0.26287156 -0.03104441 -0.11828042 -0.10454978 0.08653253
0.05605 -0.26287156 -0.03104441 -0.11828042 -0.10454978........... ]

unknow_vector = [[ 0.0166864 0.14611466 -0.06341252 -0.017478 0.04083985 0.28554845
0.03665403 -0.03293686 -0.05170902 0.07699523 0.06401276 -0.03113891
0.05892153 -0.16073132 0.04638063 -0.01014538 -0.07338376 0.07749851
0.02471998 -0.10915973 0.16763256 -0.02218471 -0.06936902........... ]]

因此,从上方看,它们的形状不同。如何转换 unknown_vector以匹配 known_vector的形状。请帮忙。谢谢

最佳答案

您不应在不需要循环的地方使用循环。尽可能使用矢量化操作。

此外,我不确定您为什么还要使用opencv,仅pytorch就足以完成我认为的任务(如果没有,请在评论中进行说明),请参见下文:

import torch

embedding = torch.nn.Embedding(1000, 50)
example_vector = torch.randn(50)

# Broadcast to (1000, 50) automatically, result is of shape 1000
distances = torch.norm(example_vector.reshape(1, -1) - embedding.weight, dim=1)
distances包含您的 example_vector到每个嵌入的距离,您可以从中获取 torch.maxmin或任何其他想要的距离。

关于python - 如何在python中 reshape 图像的128 d矢量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58146362/

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