OpenCV imread和imwrite在使用CoLab的Google Drive上速度太慢



我正在使用Google CoLab并运行一段代码,该代码在170K-190K图像上进行迭代,使用cv2.imread函数从类似gdrive/My Drive/folder1/img.jpg>的路径中读取图像,然后使用cv2.resize函数调整图像大小,再使用cv2.imwrite将图像写入类似gdrive/Mi Drive/folder2/img.jpg的路径。

但速度太慢了。我曾经在我的设备上使用Jupyter Notebook,在Linux Ubuntu LTS18.04操作系统上运行,它迭代很快。现在,每次迭代需要近30秒,这将估计代码需要近65天?!

是什么导致CoLab的速度如此之慢?我如何才能让它更快?

提前谢谢。

这不是OpenCV的问题,而是Google Drive的问题。从Google Drive访问文件的速度非常慢,即使您在Google Colaboratory中执行操作。

一个更好的方法是将文件复制到Colab存储中,然后将获得更快的性能,这将基于运行时(CPU/GUP/TPU(。

要复制文件,可以使用shutil库(shutil文档(:

import shutil
# To copy files
shutil.copyfile('source_file_location', 'destination_file_location')
# To copy multiple files of folder with some conditions
import os
for file in os.listdir('folder_path'):
if file.endswith('.jpg'):
shutil.copyfile('folder_path' + file, 'desination_folder_path' + file)
# To copy folders
shutil.copytree('source_path', 'destination_path')  

由于Google Drive上的单个文件夹中有许多文件,访问所有文件可能会失败(有时(。将文件分批保存在多个文件夹中是一种很好的做法(这将消除通过Colab使用Google Drive时的一些错误(。查看有关此的更多信息

原因是路径和从驱动器读取的开销。

我发现让它更快的最好方法是将我正在读取的文件存储在CoLab本身。

有两种方法可以做到这一点,一种是在CoLab环境中使用Linux命令将文件从驱动器复制到存储的主目录。类似!cp <source directory> <destination directory>

例如,在我们的案例中:!cp "gdrive/My Drive/datasets/imdb_crop" "imdb_crop"

另一种方式是,如果您拥有的数据被压缩,为了节省解压缩时间,请将其直接解压缩到CoLab存储中。

如果使用tar文件:

from google.colab import drive
import tarfile
drive.mount('/content/gdrive')
fname = 'gdrive/My Drive/IMDB_Dataset.tar'
tar = tarfile.open(fname, "r:")
tar.extractall()
tar.close()

如果使用zip文件:

from google.colab import drive
drive.mount('/content/gdrive')
import zipfile
filename = "drive/My Drive/IMDB_Dataset.zip"
with zipfile.ZipFile(filename, 'r') as zipp:
zipp.extractall()
zipp.close()

为了确保它有效,您会在CoLab环境的文件中发现(可以从侧选项卡中看到(gdrive之外的主目录中有文件夹imdb_crop(例如(。

当我直接从imdb_crop文件夹读取文件时,速度要快得多。

最新更新