在不带.lst文件的SageMaker中使用s3中的图像

时间:2019-06-07 15:37:31

标签: python-3.x amazon-s3 computer-vision amazon-sagemaker

我试图在s3和SageMaker之间创建一个(我原以为是)简单的图像分类管道。

图像存储在s3存储桶中,其类别标签当前在文件名中,例如

My-s3-bucket-dir

cat-1.jpg
dog-1.jpg
cat-2.jpg
..

我一直在尝试利用几个相关的示例.py脚本,但是大多数似乎都是以.rec格式下载的数据集,或者包含我没有的特殊清单或批注文件。

我要做的就是将图像从s3传递到位于相同区域,IAM帐户等的SageMaker图像分类算法。我想这意味着我需要一个.lst文件

当我尝试手动创建.lst时,似乎不喜欢它,而且做一个好习惯也花了太长时间。

如何自动生成.lst文件(或以其他方式发送图像/课程进行训练)?

我读到的东西听起来像im2rec.py是一种解决方案,但我不知道如何解决。我现在使用的示例是

Image-classification-fulltraining-highlevel.ipynb

但它似乎以.rec

的形式下载数据
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-train.rec')
download('http://data.mxnet.io/data/caltech-256/caltech-256-60-val.rec')

只是跳过使用.jpeg文件的操作。我发现了另一个将它们转换为.rec的方法,但实际上它实际上已经将.lst作为.json并将其转换了。

我主要是在AWS控制台(在我的浏览器中)的Python Jupyter笔记本中工作,但我也尝试过使用它们的GUI。

如何能简单而自动地生成.lst或以其他方式将数据/类信息获取到SageMaker中,而无需手动创建.lst文件?

更新

似乎im2py无法针对s3运行。您必须将所有s3存储桶中的所有内容完全下载到笔记本计算机的存储设备中。

  

请注意,[...] im2rec.py在本地运行,   因此无法从S3存储桶获取输入。生成列表   文件,您需要下载数据,然后使用im2rec工具。 -AWS SageMaker团队

1 个答案:

答案 0 :(得分:2)

有3个选项可为图像分类算法提供带注释的数据:(1)将标签打包在recordIO文件中;(2)将标签存储在JSON清单文件中(“增强清单”选项);(3)将标签存储在列表文件。所有选项均在此处记录:https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html

Augmented Manifest和.lst files选项可以快速完成,因为它们仅要求您使用通常快速的for循环创建注释文件。 RecordIO要求您使用im2rec.py工具,这需要做更多的工作。

使用.lst文件是另一种选择,该操作相当容易:您只需要使用快速的for循环创建注释,如下所示:

# assuming train_index, train_class, train_pics store the pic index, class and path

with open('train.lst', 'a') as file:
    for index, cl, pic in zip(train_index, train_class, train_pics):
        file.write(str(index) + '\t' + str(cl) + '\t' + pic + '\n')