在2023年初,Meta AI发布了Segment Anything (SAM)模型架构。基于此,EdgeSAM模型宣称比原始的SAM模型快40倍,使得该模型更有可能大规模运行。Autodistill结合了EdgeSAM和Grounding DINO(一种零样本目标检测模型),创建了Grounded EdgeSAM。这种混合模型能够识别图像中的常见物体(例如叉车)并生成分割掩码。这些掩码将图像中的物体标记到像素级别。
EdgeSAM是由MM Lab发布的图像分割模型。给定一张图像,EdgeSAM的目标是识别图像中的所有不同物体。每个物体都被分配一个掩码。尽管如此,EdgeSAM不能分配标签或识别物体。EdgeSAM在性能上比Meta AI发布的原始SAM模型以及Efficient SAM(SAM的更快版本)有显著提升。这些性能提升使得在现代iPhone等设备上运行EdgeSAM成为可能,这在原始SAM上是不可行的。然而,存在准确性的权衡。原始的SAM模型产生更精确的掩码。
以下图表显示了SAM、MobileSAM(SAM的另一种实现)和EdgeSAM的FPS和平均交并比(mIoU)。EdgeSAM被标记为“Ours”,其中“Ours”指的是MMLab。
可以将EdgeSAM与一个“grounding”模型结合起来,该模型可以识别并为每个掩码分配标签。这允许使用EdgeSAM来计算掩码并检索一个标签,以便了解图像中有哪些物体。
请注意,如果使用grounding模型与EdgeSAM结合,将会有一个性能权衡。对于本指南,将使用Grounding DINO,它具有较低的FPS。这是可以管理的,因为使用Grounding DINO和EdgeSAM来自动标记数据集。然后,可以训练一个精细调整的分割模型,该模型可以识别感兴趣的类别,并且可以在多个FPS上运行。
鉴于EdgeSAM比SAM快得多,这为在以前由于速度要求而不可行的应用程序中加入分割提供了许多机会。EdgeSAM也在iPhone上进行了测试,MMLab团队运行的基准测试中达到了50+ FPS,这为移动用例打开了大门。
EdgeSAM可以用于:
可以直接将EdgeSAM集成到业务逻辑中,通过应用程序如零样本分割(带grounding),或者使用EdgeSAM帮助标记数据,用于训练一个专门的分割模型。
首先,需要安装Autodistill Grounded EdgeSAM。这个模型是Grounding DINO和EdgeSAM的结合。Grounding DINO将识别物体,然后EdgeSAM将为每个物体分配分割掩码。
pip install autodistill autodistill-grounded-edgesam
现在准备好使用模型了!
可以使用Grounded EdgeSAM来识别图像中物体的位置。让在以下图像上运行模型并识别所有人和叉车:
from autodistill_grounded_edgesam import GroundedEdgeSAM
from autodistill.detection import CaptionOntology
from autodistill.utils import plot
import cv2
base_model = GroundedEdgeSAM(
ontology=CaptionOntology(
{
"person": "people",
"forklift": "forklift",
}
)
)
在这段代码中,导入了所需的依赖项。然后,初始化了一个Grounded EdgeSAM模型。在上面,设置了一个本体,指定了想要识别的物体。
本体有两个部分:想要发送给模型的文本提示和想要保存的与相关预测的类名。例如,在上述本体中,用提示“person”识别人,并保存标签“people”。还用提示“forklift”识别叉车,并保存相关的标签“forklift”。
将本体替换为与项目相关的值。
results = base_model.predict("logistics.jpeg")
plot(
image=cv2.imread("logistics.jpeg"),
classes=base_model.ontology.classes(),
detections=results
)
在这段代码中,在名为“logistics.jpeg”的文件上运行推理。然后,在文件上显示结果。
当首次运行上述代码时,EdgeSAM将被本地安装,模型权重将被下载。这将需要一些时间。然后,权重将被缓存以供以后使用。
如前所述,推理将比单独的EdgeSAM慢,因为正在结合两个模型:Grounding DINO和EdgeSAM。Grounding DINO是一个相对较慢的模型。话虽如此,可以使用标记数据来训练一个更小的模型,该模型适合在边缘运行。
让运行模型:
Autodistill Grounded EdgeSAM成功地识别了人和叉车。叉车的掩码在边缘不是很精确,但人的掩码很紧。
可以使用Grounded EdgeSAM标记一文件夹的图像,用于训练模型。结果将是一个带有需要的标签的数据集,用于训练分割模型。
base_model.label(input_folder="./images", output_folder="./output", extension=".jpeg")
在上面,将输入文件夹替换为想要标记的图像所在的文件夹。将输出文件夹替换为想要保存标记数据的文件夹的名称。
上述代码运行所需的时间将取决于数据集中有多少图像,以及运行Grounded EdgeSAM的硬件。当运行代码时,标记数据将被保存到指定的输出文件夹。
然后,可以将这些数据上传到Roboflow进行手动检查。Roboflow Annotate工具可以帮助识别注释问题并修复它们。还可以使用Roboflow的数据集管理功能来准备一个带有增强功能的训练数据集。
要检查和纠正注释,首先创建一个Roboflow账户。然后,在Roboflow仪表板上创建一个项目:
然后,可以将标记数据集上传到Roboflow进行手动检查:
然后,可以在Roboflow Annotate中打开一个图像以检查注释。
如果注释被错误标记,可以删除它们。如果注释不精确,可以使用SAM支持的标记助手工具。这个工具让使用Meta AI的SAM来标记图像中的区域。可以点击想要注释的地方来创建一个标签。了解更多关于Roboflow的SAM辅助标记功能。
EdgeSAM是一个分割模型。EdgeSAM比Meta AI在2023年初发布的原始Segment Anything模型快,但是EdgeSAM的掩码准确性较低。
在本指南中,展示了如何使用Autodistill的Grounded EdgeSAM,这是Grounding DINO和EdgeSAM的结合。使用Grounded EdgeSAM来识别图像中一个人和一个叉车的位置。然后,展示了如何使用Grounded EdgeSAM来自动标记图像,以便用于训练精细调整的模型。