我试图在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团队
答案 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')