如何从AWS S3读取存储桶中的图像到Sagemaker Jupyter实例

我对AWS和云环境非常陌生。我是一名机器学习工程师,计划在AWS环境中构建一个自定义的CNN,以预测给定图像中是否存在iPhone。

我已经完成的步骤:

步骤1:

我为iPhone分类器创建了一个S3存储桶,并设置了以下文件夹结构:

 Iphone_Classifier > Train > Yes_iphone_images > 1000张图片                           > No_iphone_images  > 1000张图片                   > Dev   > Yes_iphone_images > 100张图片                           > No_iphone_images  > 100张图片                   > Test  > 30张随机图片

权限设置 – > 阻止所有公共访问

步骤2:

然后我进入Amazon Sagemaker,并创建了一个实例:

我选择了以下配置

 名称: some-xyz, 类型: ml.t2.medium IAM : 创建了一个新的IAM角色(启用了根访问权限。)其他: 所有其他设置保持默认

然后笔记本实例被创建并打开了。

步骤3:

一旦我打开了实例,

1. 我通常选择 - conda_tensorflow2_p36 作为解释器2. 创建了一个新的Jupyter笔记本并开始使用。3. 我查看了图像分类示例,但感到困惑,大多数示例使用的是CSV文件,而我想从S3存储桶中检索图像。 

问题:

1. 如何简单地从Sagemaker的Jupyter实例访问S3存储桶中的图像数据集? 2. 我需要访问S3存储桶图像的具体参考代码。 3. 将数据复制到笔记本是一个好方法,还是直接从S3存储桶工作更好?

我尝试过的方法:

import boto3client = boto3.client('s3')# 我尝试了这个但失败了#path = 's3://iphone/Train/Yes_iphone_images/100.png'# 我尝试了这个但失败了path = 's3://iphone/Test/10.png'# 我将图像文件上传到笔记本实例并尝试读取时可以工作#path = 'thiyaga.jpg'print(path)import cv2from matplotlib import pyplot as pltprint(cv2.__version__)plt.imshow(img)

回答:

如果你的图像是二进制编码的,你可以尝试以下方法:

import boto3 import matplotlib.pyplot as plt # 定义存储桶和键 s3_bucket, s3_key = 'YOUR_BUCKET', 'YOUR_IMAGE_KEY'with BytesIO() as f:    boto3.client("s3").download_fileobj(Bucket=s3_bucket, Key=s3_key, Fileobj=f)    f.seek(0)    img = plt.imread(f, format='png')

在其他情况下,以下代码可以正常工作(基于文档):

s3 = boto3.resource('s3')img = s3.Bucket(s3_bucket).download_file(s3_key, 'local_image.jpg')

在这两种情况下,你都可以使用plt.imshow(img)来可视化图像。

在你的路径示例path = 's3://iphone/Test/10.png'中,存储桶和键将是s3_bucket = 'iphone's3_key=Test/10.png

附加资源: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-download-file.html

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注