Gemini 目标检测能力实测

我们熟悉 Gemini 令人印象深刻的多模态能力,尤其是在推理图像数据时——无论是字幕、OCR、分类还是识别图像中的特定内容。

与其开放模型对手 PaliGemma 不同,Gemini 模型并未专门针对对象检测任务进行训练。这一事实促使我进行了一些实验并撰写了这篇博客。

注意:在这里,当我们谈论对象检测时,我们的意思是通过绘制边界框来识别和定位对象,就像 YOLO、DETR、EfficientDet、Florence-2 和 PaliGemma 等模型一样。

所以,事不宜迟,让我们来看看 Gemini 是否可以执行对象检测和定位。如果是,在多大程度上?

1、代码实现

我们只需要 Gemini API 密钥—不需要其他任何东西。我假设你已经熟悉 Gemini API。如果还不熟悉,请查看此博客以了解如何在 Google AI Studio 上创建 Gemini API 密钥。

点击这里打开存储库中提供的 Colab 笔记本。

第1步:安装必要的库和依赖项

# Install Generative AI SDK.!pip install -q -U google-generativeai# Import librariesfrom google.colab import userdataimport google.generativeai as genaiimport refrom PIL import Imageimport cv2import numpy as np

第 2 步:配置 API 密钥和模型

你可以随意选择 Gemini 1.5 Flash 或 Gemini 1.5 Pro,以喜欢为准。

API_KEY = userdata.get('gemini')genai.configure(api_key=API_KEY)model = genai.GenerativeModel(model_name='gemini-1.5-pro')

第3步:传递输入图像和文本提示

使用示例使文本提示清晰简单。对于此案例,我们要求 Gemini 给出边界框坐标,如下所示: [ymin, xmin, ymax, xmax, object_name]。

input_image = "image.jpg" # @param {type : 'string'}img = Image.open(input_image)response = model.generate_content([ img, ( "Return bounding boxes for all objects in the image in the following format as" " a list. [ymin, xmin, ymax, xmax, object_name]. If there are more than one object, return separate lists for each object" ),])result = response.text

第4步:解析模型响应

def parse_bounding_box(response): bounding_boxes = re.findall(r'[(d ,s*d ,s*d ,s*d ,s*[ws] )]', response) # Convert each group into a list of integers and labels. parsed_boxes = [] for box in bounding_boxes: parts = box.split(',') numbers = list(map(int, parts[:-1])) label = parts[-1].strip() parsed_boxes.append((numbers, label)) # Return the list of bounding boxes with their labels. return parsed_boxesbounding_box = parse_bounding_box(result)

第 5 步:绘制边界框

模型提供的边界框坐标必须通过将图像的高度和宽度除以 1000 进行归一化。

label_colors = {}def draw_bounding_boxes(image, bounding_boxes_with_labels): if image.mode != 'RGB': image = image.convert('RGB') image = np.array(image) for bounding_box, label in bounding_boxes_with_labels: # Normalize the bounding box coordinates. width, height = image.shape[1], image.shape[0] ymin, xmin, ymax, xmax = bounding_box x1 = int(xmin / 1000 * width) y1 = int(ymin / 1000 * height) x2 = int(xmax / 1000 * width) y2 = int(ymax / 1000 * height) if label not in label_colors: color = np.random.randint(0, 256, (3,)).tolist() label_colors[label] = color else: color = label_colors[label] font = cv2.FONT_HERSHEY_SIMPLEX font_scale = 0.5 font_thickness = 1 box_thickness = 2 text_size = cv2.getTextSize(label, font, font_scale, font_thickness)[0] text_bg_x1 = x1 text_bg_y1 = y1 - text_size[1] - 5 text_bg_x2 = x1 text_size[0] 8 text_bg_y2 = y1 cv2.rectangle(image, (text_bg_x1, text_bg_y1), (text_bg_x2, text_bg_y2), color, -1) cv2.putText(image, label, (x1 2, y1 - 5), font, font_scale, (255, 255, 255), font_thickness) cv2.rectangle(image, (x1, y1), (x2, y2), color, box_thickness) image = Image.fromarray(image) return imageoutput = draw_bounding_boxes(img, bounding_box)

这就是代码的全部内容。现在是时候评估它在某些图像上的表现了。

2、检测示例

让我们从一个简单的例子开始。

只有一个对象的图像。这是我的照片。这里唯一的对象是人。

提示:

Return bounding boxes for person in the image in the following format as a list. [ymin, xmin, ymax, xmax, object_name].

很好的开始,现在让我们尝试使用多个对象。

包含多个对象的图像。一张狗和自行车的图像。

提示:

Return bounding boxes for all the objects in the image in the following format as a list. [ymin, xmin, ymax, xmax, object_name]. If there are more than one object, return separate lists for each object.

还不错。它成功地准确地检测到了物体,但这些都是常见的物体,对吧?让我们进一步挑战 Gemini。

我有一张来自Ramayan的著名画作“Ram Darbar”的图片。让我们看看 Gemini 能否识别和检测所有的角色。

提示:

This is a painting of “Ram Darbar” from Ramayan. Return bounding boxes for all the characters in the image in the following format as a list. [ymin, xmin, ymax, xmax, character_name].

这真是太棒了。它不仅绘制了边界框,还准确识别了每个角色,这让我印象深刻,尤其是因为我特别要求输入他们的名字。

是时候测试一些非常规图像了。我画了阿尔伯特·爱因斯坦(抱歉,这是我能做的最好的)。让我们试一试。

一张绘画图片

提示:

Return name and bounding boxes of a famous personality in the image in the following format as a list [ymin, xmin, ymax, xmax, object_name].

哇哦,猜猜怎么着?我画画还不错。或者也许双子座足够聪明,能认出这是爱因斯坦。

欢迎直接尝试Hugging Face空间:

3、结束语

经过对不同图像的一系列测试:从识别人物和物体到识别绘画和素描中的人物,再到使用边界框准确定位,Gemini 确实满足了我对物体检测的期望。

我个人不会将 Gemini 与专门为物体检测而设计的模型进行比较,因为它的优势在于不同的领域。然而,这个实验满足了我的好奇心:是的,它可以很好地管理检测任务,并且能够检测几乎任何物体。

原文链接:Gemini目标检测实测 - 汇智网

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: