为什么重新计算ORB描述符比从磁盘加载要快?

2024-04-24 05:18:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试决定是否有兴趣将大量图片(每个.png图片的分辨率为500x500,权重约为25kb)的计算描述符保存在本地文件或数据库中。你知道吗

使用带有Brief-32描述符的ORB,单个描述符的重量约为3兆字节。这样的尺寸将保持不变,因为我所有的照片都是相同的尺寸。你知道吗

为了找出什么是最快的,我进行了以下两个测试:

## TEST : Import descriptor from file
listOfDec = list()
start = datetime.now()

for i in range(0, 100):
    listOfDec.append(np.loadtxt("DESC_TEST".txt"))

end = datetime.now()
time_taken = end - start
print('Time: ',time_taken) 
## TEST : Compute descriptor from source image
listOfDec = list()
start = datetime.now()

for i in range(0, 100):
    img1 = cv2.imread(dirPath+picture,0)
    a, desc = orb.detectAndCompute(img1, None)
    listOfDec.append(desc)

end = datetime.now()
time_taken = end - start
print('Time: ',time_taken) 

我真的认为加载数据比重新计算整个描述符要快。你知道吗

以下是我的测试结果:

benchmark plot

所以现在我很困惑。我知道ORB是一个非常快速的算法,但是如何“生成”一个3MB描述符比从ssd磁盘读取更快呢?我的基准有问题吗?你知道吗

谢谢你。你知道吗


Tags: fromtestdatetimetime尺寸图片startnow
1条回答
网友
1楼 · 发布于 2024-04-24 05:18:54

RAM内存实际上比磁盘内存大。你知道吗

但是,对于3mb文件,0.08秒的读取速度为37.5mb/s,这对于SSD来说似乎很低。您应该提到加载的图像的大小,因为基准上的ORB计算包括从磁盘读取它们。你知道吗

ORB描述符本身速度非常快,因为计算量很小,而且图像数据可以很好地缓存在CPU中。 然而,为了实现更好的性能,您应该尝试C++实现而不是Python。而且可能没有理由存储完整的描述符。通常的做法是保存散列或描述符部分取决于您的用例(但在某些情况下也可能需要完整的desrcitor)。你知道吗

相关问题 更多 >