我编写了以下代码来从我的S3存储桶加载图像,进行一些初步的预处理,然后将它们读成一个numpy数组:
from scipy.misc import imresize
from scipy.misc import imread
import numpy as np
import boto3
import tempfile
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
temp = []
s3 = boto3.resource('s3', region_name='ap-northeast-2') # This is the nearest AWS region to my location
role = get_execution_role()
bucket = s3.Bucket('my-bucket')
for img_name in X:
obj = bucket.Object('ImageFolder/'+img_name)
obj.download_file(img_name)
img = mpimg.imread(img_name)
img = imresize(img, (32, 32))
img = img.astype('float32')
temp.append(img)
X = np.stack(temp)
但是要做到这一点需要永远。大约有20000张图片,大约需要3个小时才能将它们加载到temp
中!在发布此问题时,它正在将temp
放入numpy数组X
,我怀疑这可能需要1-2个小时。这意味着整个过程大约需要5个小时才能完成,而在我的本地系统中只需 不到一分钟 (普通的双核2.2) GHz CPU,没有GPU)!那么,我该如何让它更快?是否可以像在我的本地系统中一样快地完成此操作?
答案 0 :(得分:0)
我认为您可以将https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html
VPC端点用于S3。
然后,您的VPC与其他服务之间的流量不会离开Amazon网络,就像通过内部网络访问S3存储桶一样。
https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html