SageMaker TensorFlow对象检测模型-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
本文描述了如何在Amazon SageMaker中使用TensorFlow对象检测模型API来实现这一点。
首先,基于AWS示例笔记本,我们将解释如何使用SageMaker端点在单个图像上运行模型。对于较小的图像,这种方法是可行的,但对于较大的图像,我们会遇到问题。
要解决这些问题,请改用批处理转换作业。
起点:使用SageMaker TensorFlow对象检测API进行模型推断
AWS提供了一些GitHub如何使用SageMaker的好例子。
使用此示例可以使用TensorFlow对象检测API预测对象检测模型:
将模型部署为端点时,可以通过调用端点,使用模型一次推断一个图像。此代码取自示例笔记本,展示了如何定义TensorFlowModel并将其部署为模型端点:
导入cv2
进口香肠制造商
从sagemaker.utils导入名称
从sagemaker.tensorflow导入TensorFlowModel
角涩=圣人。获取_执行_角涩()
模型_人工制品=’<你的-模型-s3-路径>’
模型_端点=TensorFlowModel(
name=name_来自_base(‘tf2-object-detection’)
模型_数据=模型_人工制品
角涩=角涩
framework_版本=’2.2′
)
predictor=model_endpoint.deploy(初始_实例_计数=1,实例_类型=’ml.m5.large’)
然后,将图像作为NumPy数组加载,并将其解析为列表,以将其传递给端点:
def image_file_to_张量(路径):
cv_img=cv2.imread(路径,1).astype(‘uint8’)
cv_img=cv2.cvtColor(cv_2img,cv2.COLOR_BGR2RGB)
返回简历_ img
img=图像_文件_到_张量(‘test _ images/22673445.jpg’)
输入={
“实例”:〔img.tolist()〕
}
最后,调用端点:
检测=预测器.预测(输入)〔”预测”〕〔0〕
问题:终结点请求负载大小太大
这在使用小图像时很好,因为API调用的请求负载足够小。但是,当使用较大的图像时,API返回413错误。这意味着有效负载超过了允许的6MB大小。
当然,我们可以在调用端点之前调整图像大小,但我想使用批处理转换作业。
解决方案:改用批处理转换作业
使用SageMaker批处理转换作业,您可以定义自己的最大负载大小,这样我们就不会遇到413个错误。其次,这些作业可以用于一次处理一组完整的图像。
图像需要存储在S3存储桶中。所有图像都以批处理模式处理(名称中的内容),预测也存储在S3中。
为了使用批处理转换作业,我们再次定义了TensorFlowModel,但这次我们还定义了入口点和源目录:
型号_批次=TensorFlowModel(
name=name_来自_base(‘tf2-object-detection’)
模型_数据=模型_工件
角涩=角涩
framework_版本=’2.2′
入口_点=”推断.py”
source_ dir=”.”
)
参考的输入和输出数据。py代码转换模型在文档中进行了描述。此代码需要将请求有效载荷(图像)更改为NumPy数组并将其解析为列表对象。
在这个例子中,我修改了加载图像并将其转换为NumPy数组的代码。会议中的input_handler函数。py更改为以下内容:
导入io
导入json
将numpy导入为np
从PIL导入图像
def输入_处理程序(数据,上下文):
“””发送到TensorFlow Serving REST API之前的预处理请求输入
参数:
data(obj):请求数据,格式为dict或string
context(context):包含请求和配置详细信息的对象
退货:
(dict):一个JSON可序列化的dict,包含请求正文和头
"""
如果context.request_content_type==”application/x-image”:
payload=data.read()image=image.open(io.BytesIO(payloa))array=np.asarray(image)return json.dumps({’instances’:〔array.tolist()〕})raise ValueError(‘{’error’:”unsupported content type{}”}’format(context.request_content类型或”unknown”)))
请注意,output_handler函数不在上面的代码中。
此函数需要Python包NumPy和Pillow,它们未安装在运行批处理推理作业的计算机上。
我们可以创建自己的图像并使用它(在初始化TensorFlowModel对象时使用image_uri关键字)。
您还可以提供需求。txt并将其存储在笔记本所在的文件夹中(称为source_dir=”.”)。此文件用于在映像引导期间使用pip安装所需的软件包。内容为:
笨蛋
枕头
首先,您希望使用OpenCV(如端点示例中所示),但这个包不容易安装。
现在,我们使用模型来创建transformer对象,而不是将模型部署为模型端点:
输入路径=”s3://桶/输入”
输出路径=”s3://桶/输出”
张量流_服务_变压器=型号_批量变压器(
实例_ count=1
例如_类型=”ml.m5.large”
max_ concurrent_
max_有效载荷=5
输出_路径=输出_路径
)
最后,使用变换:
张量流服务变压器(
输入_路径
content_ type=”应用程序/x-图像”
)
图像由模型处理,结果最终将作为JSON文件存储在output_path存储桶中。名称等于输入文件名,后跟。外延伸。您还可以调整和优化实例类型.最大负载等。
最后的
这可能不是最具成本效益的方法,因为我们将图像作为NumPy数组传递给转换器。
此外,我们还可以通过会议中的output_handler函数调整S3上压缩和存储的JSON。py或仅返回相关检测。
600学习网 » SageMaker TensorFlow对象检测模型-600学习网