我对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