在机器学习领域,经常会遇到一些罕见且难以捕获的目标。为了解决这一问题,一种解决方案是生成合成数据,即基于真实数据创建人工数据。通过标记合成图像,可以帮助模型学习如何识别感兴趣的对象。指南提供了如何通过随机化对象位置和背景图像来创建合成数据,或者如何使用Stable Diffusion来生成合成数据的更多想法!
很高兴地宣布一个新的Roboflow API端点,它允许直接将自定义生成的图像添加到Roboflow项目中,该功能由DALL-E提供支持。在本指南中,将讨论如何使用Roboflow合成图像生成API生成合成图像。让开始吧!
合成数据可以在计算机视觉的多种用途中使用。在数据集训练分割中,合成图像通常在模型的生命周期早期使用。它们可以是一种简单且成本效益高的方式来扩大数据集或填补缺乏数据的空白。在使用合成图像之前,建议在Roboflow Universe中搜索相关图像,这是收集的开源计算机视觉数据集的集合。通常从现实世界数据集中的类似图像开始更有效。当没有可用的类似图像时,合成图像是一个很好的替代品!
现在,让介绍Roboflow合成数据生成API。可以通过将生成的图像传输到Roboflow项目来增强Roboflow数据集。Roboflow合成数据生成API允许使用OpenAI的生成图像模型(如DALL-E 3)创建合成数据。API的一个主要特点是能够传递一个基础图像,用作图像提示的描述,使用GPT-4的视觉能力来生成。
Roboflow合成数据生成API提供了一个端点:
POST https://api.roboflow.com/synthetic-image
此端点接受一个图像和一个提示,并返回一个合成图像。让通过一个示例来了解如何使用API生成合成图像。
要使用此功能,需要将OpenAI API密钥添加到Roboflow工作区设置中。转到Roboflow设置页面。然后,在左侧选择工作区。点击第三方密钥并输入OpenAI API密钥。最后,滚动到页面底部并点击保存设置。
需要检索一些信息以向合成数据生成API发送请求。在工作区设置中,从RoboflowAPI部分复制Roboflow API密钥。如果需要帮助找到它,请按照认证文档操作。在下面的示例中,用密钥替换ROBOFLOW_API_KEY。为了将生成的图像保存到项目中,需要随请求发送项目URL。要检索项目URL,请转到与训练模型相关的版本页面的Roboflow仪表板。在页面顶部,字符串在/VERSION_NUMBER之前的是项目URL(也称为项目ID)。
要从提示生成图像,只需传递一个提示即可。
curl -X POST "https://api.roboflow.com/synthetic-image?api_key=ROBOFLOW_API_KEY" \
-H 'Content-Type: application/json' \
--data \
'{
"project_url": "YOUR_PROJECT_URL",
"prompt": "An image of a raccoon in a tree."
}'
示例响应(来自DALL-E 3模型):
{
"created": 1701126433,
"data": [
{
"revised_prompt": "Generate a photorealistic image of a raccoon perched on a tree branch. It should have the viewpoint of a Sigma 85mm f/8 lens, subtly interspersed with minute visual aberration and a minimal layer of camera noise throughout the entire image.",
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-.../user-.../img-....png?..."
}
]
}
可以在Roboflow项目的未分配或注释部分找到生成的图像。
从Roboflow图像ID生成图像是一种更详细的方法。这种方法可以与提示结合使用,以创建该图像的特定变体。要从Roboflow检索图像ID,可以使用Roboflow图像搜索API,或打开Roboflow中的特定图像。要打开特定图像,请转到Roboflow项目中的图像标签,并选择一个图像。从这里,可以从浏览器URL中复制图像ID,或者转到原始数据标签并找到id字段。一旦有了图像ID,就可以发出请求。
curl -X POST "https://api.roboflow.com/synthetic-image?api_key=ROBOFLOW_API_KEY" \
-H 'Content-Type: application/json' \
--data \
'{
"project_url": "YOUR_PROJECT_URL",
"prompt": "At nighttime.",
"image": "IMAGE_ID",
"image_type": "id"
}'
示例响应(来自DALL-E 3模型):
{
"created": 1701127521,
"data": [
{
"revised_prompt": "A photo-realistic image showing two industrial workers, [...] on a metallic staircase within an atmospheric industrial setting at night time, they appear engaged [...]",
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-.../user-.../img-....png?..."
}
]
}
可以在Roboflow项目的未分配或注释部分找到生成的图像。
在计算机视觉项目的后期,会希望用生产中拍摄的真实图像替换合成图像。使用Roboflow推理包,可以在训练模型之前就开始收集生产图像!另一种从生产中轻松收集图像的方法是使用Roboflow Collect。
在收集到足够的生产图像并希望移除合成图像后,可以在Roboflow的图像部分通过标签过滤图像。所有通过API生成的图像都会有一个以synthetic-开头的标签。然后可以全选并从项目中移除。
- 与NVIDIA和Roboflow一起生成合成数据
- 使用Stable Diffusion生成合成数据:指南
- 如何使用Unity Perception合成数据来最小化注释时间