为什么重新计算 ORB 描述符比从磁盘加载它更快?
Why is it faster to recompute ORB descriptor than loading it from disk?
我正在尝试确定将大量图片的计算描述符保存在本地文件或数据库中是否有趣(每张 .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)
老实说,我认为加载数据比重新计算整个描述符要快。
这是我的测试结果:
所以现在我很困惑。我知道 ORB 是一种非常快的算法,但是 "generate" 一个 3MB 的描述符比从 ssd 磁盘读取它更快吗?我的基准有问题吗?
谢谢。
RAM 内存真的比磁盘内存 much faster。
但是 3mb 文件的 0.08 秒给出了 37.5mb/s 的读取速度,这对于 SSD 来说看起来很低。你应该提到加载图像的大小,因为基准测试中的 ORB 计算包括从磁盘读取它们。
ORB 描述符本身非常快,因为计算很简单并且图像数据可以很好地缓存在 CPU 中。
然而,为了获得更好的性能,您应该尝试使用 C++ 实现而不是 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)
老实说,我认为加载数据比重新计算整个描述符要快。
这是我的测试结果:
所以现在我很困惑。我知道 ORB 是一种非常快的算法,但是 "generate" 一个 3MB 的描述符比从 ssd 磁盘读取它更快吗?我的基准有问题吗?
谢谢。
RAM 内存真的比磁盘内存 much faster。
但是 3mb 文件的 0.08 秒给出了 37.5mb/s 的读取速度,这对于 SSD 来说看起来很低。你应该提到加载图像的大小,因为基准测试中的 ORB 计算包括从磁盘读取它们。
ORB 描述符本身非常快,因为计算很简单并且图像数据可以很好地缓存在 CPU 中。 然而,为了获得更好的性能,您应该尝试使用 C++ 实现而不是 python。并且可能没有理由存储完整的描述符。通常的做法是根据您的用例保存哈希或描述符部分(但在某些情况下可能也需要完整的描述符)。