Python 使用CoLab在谷歌硬盘上的OpenCV imread和imwrite速度太慢

Python 使用CoLab在谷歌硬盘上的OpenCV imread和imwrite速度太慢,python,image,opencv,google-colaboratory,drive,Python,Image,Opencv,Google Colaboratory,Drive,我正在使用Google CoLab,运行一段代码,迭代170K-190K个图像,使用cv2.imread函数从路径gdrive/My Drive/folder1/img.jpg读取它们,然后使用cv2.resize函数调整它们的大小,然后使用cv2.imwrite将它们写入路径,如gdrive/My Drive/folder2/img.jpg 但它太慢了。我曾经使用Jupyter笔记本在我的设备上运行,在Linux Ubuntu LTS18.04操作系统上运行,它迭代速度很快。现在,每次迭代需要

我正在使用Google CoLab,运行一段代码,迭代170K-190K个图像,使用
cv2.imread
函数从路径gdrive/My Drive/folder1/img.jpg读取它们,然后使用
cv2.resize
函数调整它们的大小,然后使用
cv2.imwrite
将它们写入路径,如gdrive/My Drive/folder2/img.jpg

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

是什么导致它在CoLab上如此缓慢,我如何使它更快


提前感谢。

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

一个更好的方法是将文件复制到Colab存储中,然后 将获得基于运行时的更快性能 (CPU/GPU/TPU)您正在使用的

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


由于在Google Drive的单个文件夹中有许多文件,因此访问所有文件可能会失败(有时)。将文件分批保存在多个文件夹中是一种很好的做法(使用Google Drive-through-Colab可以消除一些错误)

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

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

有两种方法,一种是在CoLab环境中使用Linux命令将文件从驱动器复制到存储的主目录。类似于
!cp

例如,在我们的例子中:
!cp“gdrive/My Drive/dataset/imdb\u-crop”“imdb\u-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文件夹中读取文件时,速度要快得多。

如何将文件复制到CoLab存储中?我不明白你的意思。将鼠标悬停在右上角的“RAM,Disk”上,它会显示磁盘空间
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()