InternVL icon indicating copy to clipboard operation
InternVL copied to clipboard

grounding目标检测任务,训练效果不好,询问优化意见

Open ExploreUniverser opened this issue 8 months ago • 6 comments

任务背景: 我做了一个目标检测任务,其中包含多项目标检测类别,该任务中的类别大部分是一些事件(特定场景中的人或物满足某种状态)。

使用模型:InternVL2_5_MPO

训练阶段,设计训练prompt: 由于这些类别大部分都是事件,比较特殊,并不类似于“猫”、“狗”等通用类别;进而,该任务的类别需要精准描述且描述语句通常较长;因此,为了减少模型预测时的输入token数,训练样本的prompt采用都两轮对话的形式:先询问并回答类别定义,后询问并回答类别坐标框(模型预测时只使用后者问答,以减少输入token)。 训练prompt示例:

[{"from": "human", "value": "在xxx场景中,以下事件的定义是什么?请使用json格式回答:\n事件a\n事件b\n事件c"},

{"from": "gpt", "value": "{'事件a': '事件a的定义或描述', '事件b': '事件b的定义或描述', '事件c': '事件c的定义或描述'}"},

{"from": "human", "value": "\n请查看图像,根据xxx场景下的事件定义,提供下列所有事件的区域的边界框坐标(未发生事件的边界框坐标为空):\n事件a\n事件b\n事件c"},

{"from": "gpt", "value": "事件a[]\n事件b[[110,220,330,440]]\n事件c[[110,220,330,440],[10,20,30,40]]\n"}]

另外,为了提高模型对单个事件的理解,我会放入对单个事件的问答,prompt格式如上。

验证阶段结果: 单个事件检测:precision精准度低,recall召回高。我发现bbox框中的错误情况有两种:1. 检测类别事件a,但是bbox框中实际内容为事件b。2. bbox框中的内容并非检测的任何类别,仅仅是人或物。

多个事件检测:precision精准度低,recall召回低。错误情况为:1. 什么都检测不出来。2. 只检测出非任何目标事件类别的人或物。3. 分类错误,框中是事件a,但是分类为事件b

个人问题:

  1. 上述训练prompt的设计是否不太合适?
  2. InternVL2_5_MPO模型是否不太适合做目标检测任务?
  3. 在工业AI应用上,其实大部分视觉任务还是目标检测、分割等,简单对话并不能满足应用,InternVL系列是否可以针对上述视觉任务出一个针对性的模型?
  4. 如果要出这么个模型,我希望你们能够考虑到复杂含义类别的处理,即某些目标类别具备复杂条件或含义(如上面我的任务)。使得模型预测时,不需要输入复杂的长文本描述。

ExploreUniverser avatar Apr 07 '25 07:04 ExploreUniverser

上面陈述显示有些错误,所有事件左右都有用特殊符包裹

<ref>事件a</ref>

ExploreUniverser avatar Apr 07 '25 08:04 ExploreUniverser

我看了一下 https://github.com/OpenGVLab/InternVL/blob/main/internvl_chat/eval/refcoco/evaluate_grounding.py,里面输出的 bounding_box 会 normalize 1000,然后再乘以原始图像的长宽

Cwyxx avatar Apr 08 '25 02:04 Cwyxx

我看了一下 https://github.com/OpenGVLab/InternVL/blob/main/internvl_chat/eval/refcoco/evaluate_grounding.py,里面输出的 bounding_box 会 normalize 1000,然后再乘以原始图像的长宽

嗯嗯,我有做相关处理,训练时按照官方给的normlize归一化到1000,预测时,我会将其逆转回来

ExploreUniverser avatar Apr 08 '25 03:04 ExploreUniverser

不是InternVL2_5的问题,是所有基于(图像特征提取映射+LLM)的模型架构的VLM模型都不适合目标检测的任务。

zhangchaosunshine avatar Apr 15 '25 08:04 zhangchaosunshine

我想请教一下!您的任务也带box,然后我理解InternVL它会动态处理输入图片。您是直接把box缩放到[0,1000]尺度,还是先让box随着动态处理图片(到448的整数倍),然后再把box缩放到[0,1000]

b762927 avatar Apr 23 '25 03:04 b762927

我想请教一下!您的任务也带box,然后我理解InternVL它会动态处理输入图片。您是直接把box缩放到[0,1000]尺度,还是先让box随着动态处理图片(到448的整数倍),然后再把box缩放到[0,1000]

只是训练时候box的数值归一化到1000,与图像无任何关系,图像不需要做什么调整

ExploreUniverser avatar Apr 25 '25 11:04 ExploreUniverser