相关文章推荐
霸气的猴子  ·  AttributeError: ...·  5 月前    · 
发呆的白开水  ·  typescript declare ...·  1 年前    · 
老实的开心果  ·  How to Convert ...·  1 年前    · 

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

1 人关注

我正在使用谷歌CoLab,并运行一段代码,在17万至19万张图片上进行迭代,从一个路径中读取它们,例如 gdrive/My Drive/folder1/img.jpg 使用 cv2.imread 函数,然后使用 cv2.resize 函数调整它们的大小,然后将它们写入一个路径中,例如 gdrive/My Drive/folder2/img.jpg using cv2.imwrite .

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

是什么原因导致CoLab上的速度那么慢,我怎样才能让它更快?

提前感谢。

python
image
opencv
google-colaboratory
drive
Radwa Khattab
Radwa Khattab
发布于 2020-07-14
2 个回答
Rahul Vishwakarma
Rahul Vishwakarma
发布于 2020-07-15
已采纳
0 人赞同

这不是OpenCV的问题,而是Google Drive的问题。从Google Drive访问文件非常慢,即使你在Google Colaboratory执行。

一个更好的方法是将文件复制到你的Colab存储中,然后你会得到更快的性能。 将获得更快的性能,这将基于你使用的运行时间 (CPU/GPU/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存储器中?我不明白你的意思。
悬停在右上方的 "RAM, Disk "上,它将显示磁盘空间。
Radwa Khattab
Radwa Khattab
发布于 2020-07-15
0 人赞同

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

我发现让它更快的最好方法是把我正在阅读的文件放在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()

如果使用压缩文件。

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: