niuzaisheng / ScreenAgent

ScreenAgent: A Computer Control Agent Driven by Visual Language Large Model (IJCAI-24)
https://arxiv.org/abs/2402.07945
Other
273 stars 27 forks source link

grounding的处理 #3

Closed WeiminLee closed 7 months ago

WeiminLee commented 7 months ago

经过我测试,我发现微调后的screenagent在json指令遵循上存在一定的过拟合现象(导致其他指令遵循能力丢失)。

最终要的问题是,测试发现给出的mouse_positon并不准确,不知道作者做了什么特俗处理或者转换没有?或者对输入的图片尺寸有什么特别的要求么?谢谢

niuzaisheng commented 7 months ago

指令过拟合确实存在,这需要再额外构造多样的函数调用形式,可能是不同的json结构,或者XML格式的函数调用等等,目前这方面数据不够多,多样性也不足。可能混合进入一部分通用的LLM工具调用的数据有助于改善。 因为样本量还是不够,目前无法保证 mouse_positon 完全正确,训练时输入的图像尺寸保持在1024*768,周围padding白色边框。如果需要更多尺寸可能需要准备相应的图像尺寸的数据集,图像最大尺寸限制在基础模型CogAgent最大的输入尺寸1120x1120。

WeiminLee commented 7 months ago

@niuzaisheng 请问 “padding白色边框” 是什么意思?1024*768 是image_size对吧?

WeiminLee commented 7 months ago

指令过拟合确实存在,这需要再额外构造多样的函数调用形式,可能是不同的json结构,或者XML格式的函数调用等等,目前这方面数据不够多,多样性也不足。可能混合进入一部分通用的LLM工具调用的数据有助于改善。 因为样本量还是不够,目前无法保证 mouse_positon 完全正确,训练时输入的图像尺寸保持在1024*768,周围padding白色边框。如果需要更多尺寸可能需要准备相应的图像尺寸的数据集,图像最大尺寸限制在基础模型CogAgent最大的输入尺寸1120x1120。

请问输入必须是1024*768输出的mouse_position才准确吗?

niuzaisheng commented 7 months ago

Padding的方式请看一下这段代码 https://github.com/niuzaisheng/ScreenAgent/blob/14181c01e1551f21ec4c21d79ae6ba24eb00c619/train/dataset/screenagent_dataset.py#L45 数据集中所有的图像都会被padding到最大尺寸1120x1120。

niuzaisheng commented 7 months ago

指令过拟合确实存在,这需要再额外构造多样的函数调用形式,可能是不同的json结构,或者XML格式的函数调用等等,目前这方面数据不够多,多样性也不足。可能混合进入一部分通用的LLM工具调用的数据有助于改善。 因为样本量还是不够,目前无法保证 mouse_positon 完全正确,训练时输入的图像尺寸保持在1024*768,周围padding白色边框。如果需要更多尺寸可能需要准备相应的图像尺寸的数据集,图像最大尺寸限制在基础模型CogAgent最大的输入尺寸1120x1120。

请问输入必须是1024*768输出的mouse_position才准确吗?

目前是这样,因为数据集是这样构造的。

WeiminLee commented 7 months ago

哦,原来如此。 那就是我用这个模型之前需要对输入图片做同样的pandding处理,否则就可能导致给出的mouse_position不准确。 对吧?

niuzaisheng commented 7 months ago

哦,原来如此。 那就是我用这个模型之前需要对输入图片做同样的pandding处理,否则就可能导致给出的mouse_position不准确。 对吧?

是,目标是保持训练和推理阶段输入形式一致。 但是mouse_position不准确也有可能是模型能力不足,对于特定任务场景需要收集更多数据。

WeiminLee commented 7 months ago

哈哈,这骚操作又将导致模型过于定制化了 。按理说其实是不应该做这种处理的,模型可接受任何小于1120*1120尺寸的图片才对。

不过总的来说作者的工作还是非常出色的,赞👍

niuzaisheng commented 7 months ago

主要上游模型复用了Blip的image_processor,其中会将图像缩放到256x256(EVA-CLIP Encoder)和1120x1120(Cross Vision Encoder),这样就无法跟标注的grounding对应上了,所以只能先padding到最大尺寸。

Morris-Lucifer commented 7 months ago

主要上游模型复用了Blip的image_processor,其中会将图像缩放到256x256(EVA-CLIP Encoder)和1120x1120(Cross Vision Encoder),这样就无法跟标注的grounding对应上了,所以只能先padding到最大尺寸。

请问如果我调用GPT-4V的接口,是多大尺寸的限制呢?GPT-4V是不是还没有ScreenAgent好用?还是说GPT-4V只是无法给出准确的鼠标定位?它们能自己修正定位吗?

WeiminLee commented 7 months ago

反复实验,为什么我测试的mouse_position位置信息还是存在很大差距呢?

1、我使用的是训练数据中的图片和提示词 2、具体信息如下: prompt 取自 2023-12-25_18-06-47-838007_translate.json 中的send_prompt字段内容 图片信息: img_path = r"D:.\data\5df3ae8b17b7405ebf327d97d17887a5\images\2023-12-25_18-06-47-838007.jpg" 3、对图片padding处理:(奇怪的是对图片无论pandding与否输出的内容都是相同的:{"width":100,"height":100}}) new_img_path = add_image_padding(img_path) image = Image.open(img_path).convert("RGB") max_size = (1120, 1120) padded_image = Image.new("RGB", max_size, color="white") padded_image.paste(image, (0, 0))

4、调用大模型获取执行计划 resp = single_image_chat_with_screenagent(prompt=prompt, image_path=img_path)

5、推理结果:

在GIMP中,您可以通过点击工具箱中的画笔工具来选择它。

[
    {"action_type":"MouseAction","mouse_action_type":"click","mouse_button":"left","mouse_position":{"width"**:100**,"height":**100**}}
]

标签: "actions": [ { "action_type": "MouseAction", "mouse_action_type": "click", "mouse_button": "left", "mouse_position": { "width": 50, "height": 111 } } ],

不知道到底是哪里出了问题

niuzaisheng commented 7 months ago

那请针对这个场景收集数据,进行更针对的训练。 视觉定位确实是这个项目里最难的问题,原因可能是基础模型在训练阶段使用自然图像居多,没有见过特别多GUI的样本,对于小图标的识别更加困难。