InternVL2识别边界框实践:捕获股票K线图启明之星

本文作者:谢志军,某互联网金融证券公司,算法工程师

写在前面

YOLO系列模型实现了对现实世界广泛物体的边界框识别,最新的开源多模态大模型(MLLM)/视觉语言模型(VLM)宣称能够给出特定物体的边界框坐标。笔者测试了一些常规图片并询问MLLM图中常见物体,如动物、车辆等,基本都能识别出来,给出物体之间大致的位置关系。

不同于YOLO单薄的模型层,MLLM的vision encoder的transformer层通常较厚,且较好地对齐了大模型LLM的token表达,因此对复杂的图形或人为定义图形,可能存在潜在的识别定位能力,如果猜测成立,后面必将产生许多非常有意思的应用。

捕获启明之星

老股民都知道股市行情里的K线图,K线图里的启明之星(又称早晨之星、黎明之心、希望之星)正如字面含义一般给人光明之感。哪些股票在忍受着黎明前的黑暗,哪些看到了上涨的曙光,从过往到近期的股价表现,你需要一双阅遍千股的眼睛。现在我们用多模态大模型打造这双慧眼,从繁杂的K线图中找到最亮的启明之星。

笔者根据某股一个月内的股价信息构造了K线图形态数据,看微调后的MLLM能不能捕获启明之星。

图片
图 MLLM识别启明之星形态-黄色边界框内

显然,MLLM能干这活。

图片尺寸与边界框识别

从事后诸葛亮的角度看,一开始的时候,笔者测试众多MLLM,要么只能输出图形的大致方位或位置的比例关系,要么输出的边界框坐标错的离谱,驴唇不对马嘴,始终不能给出准确的边界框坐标。

笔者重新审视了一般开源MLLM的视觉编码过程:在InternVL2多模态大模型的图片编码过程中,一张图片选择最佳的预定义切割比例成小patch,分辨率不满足ViT要求大小的会适当变形拉伸至其倍数(有些MLLM是填充token至其倍数),再加上原图缩小的比例图,共同输入vision encoder作为图片特征信息。

可以发现,原图和小patch拼接回去的图片已经不一样了,意味着MLLM看到的图片与原图有一点点形变上的不同,因此MLLM输出的边界框坐标相比原图产生了位移,这是导致边界框坐标不准确的根本原因之一。

图片
图 InternVL2 图片编码过程
(论文地址:https://arxiv.org/pdf/2404.16821)

第二代的MLLM通常支持任意长宽比或分辨率,对于MLLM推理普通图片和定性描述prompt来说,图片尺寸是否严格符合ViT要求大小的倍数并不重要,例如图片中的一头熊,即便稍微拉伸变形,只要满足熊的体态特征,预测时大概率就还是熊。

对于精度要求比较高的边界框识别来说,任何拉伸变形,除非能找到图片encode完整forward过程的变形参数,才能将预测出的边界框坐标进行backward还原,获得最终正确的边界框坐标。

为了不跳入这个坑再从坑里爬起来,笔者直接使用符合ViT要求大小倍数的图片进行训练和推理,这样就不涉及变形之说了。

以上是本文的背景知识和目标工作,下面进入实战环节。

准备工作

MLLM选择

考虑在合适的prompt下,MLLM宣称能识别图中实体并能输出准确坐标,即边界框识别。因此我们构造特定领域的图文对话数据集,微调MLLM,以使其获得该领域的精准识别能力。

笔者对比了多模态大模型(截止时间2024-09-26)各项能力,综合训练和部署框架,最后选择InternVL2系列模型。

图片
图 MLLM功能对比

为什么是启明之星

为什么是启明之星,或者为什么要识别K线图的某个特定形态。

一般的,有哪些知识喂给模型,模型就拥有哪类知识。

大多MLLM对封闭图形的描述识别和边界框识别能力,在构造训练数据时就已经有意无意间覆盖了。封闭图形,例如动植物、车辆、行人、生活用品等具体实体,是我们身边常见物体,同时相当一部分的LLM世界知识也关注于此,从图形的易得性和LLM知识的关联性,MLLM天生对这些封闭图形的理解比较深刻。

对开放式图形,除了MLLM刻意强调文字识别OCR能力而喂足了数据集,MLLM对于人为定义的开放式图形的识别能力,是否会因缺乏训练数据量而打折扣,或者由强大的泛化推理能力补足了知识缺陷,需要我们进一步验证。

同时,常规的多模态测评数据[1],考虑了样本的代表性和全面性,人为定义的开放式图形相当于某个垂直领域,用常规测评集很难反映MLLM在垂直领域的能力。

本文选择了K线图的启明之星[2]形态,考察MLLM在这类特定图形领域的边界框识别能力。

K线启明之星,形态特点:启明星包含三根k 线,第一根k 线是一根长实体的阴线,第二根k 线为向下跳空的小实体k 线,阴阳线、十字星均可。第三根k 线是一根实体阳线,且收盘价显著地向上穿入第一根阴线实体的内部,这就是典型的启明星形状,被视为底部反转的信号,所以启明星又称之为早晨之星、黎明之心、希望之星。

图片
图 启明之星的基本形态和变化形态

避免人工标注图片

后知后觉的看,全参微调MLLM,训练数据量在千以内,效果比较差。这意味着训练的图文数据,如果是由人工标注的少量样本,对实验效果将是一场灾难。如果你不是土豪,没有标注团队,用不起GPT4等高贵LLM来审核,最重要的,你没有时间和精力来统筹一切,就避免人工标注这个活吧,尽可能的自动化构建数据集。

自动化构建数据集,很容易保障边界框坐标的准确性,但缺乏多样性。为了尽可能提升多样性并保证准确性,本文根据启明之星的形态特点,模仿真实K线数据和走势,设计了三种K线形态:一折二折三折。

一折二折三折

所谓一折二折三折,是一种对K线三种特定走势的动态随机模仿,包括:

  • 随机选择一折(一个谷底)三种形式、两折(两个谷底)两个形式、三折(三个谷底)三个形式

  • 随机生成21天股票价格数据(包括开盘价、收盘价、最高价和最低价),限定价格波动范围

  • 随机滑动启明之星的时间窗口,规避极值,保证启明之星左侧或右侧至少有2天的数据

  • 随机选择启明之星谷底形态:阳线、阴线、阳十字线、阴十字线

图片
图 三种K线走势

图片
图 一折二折三折的形态

真实的股价走势数据远比想象的疯狂,有时最高价上影线或最低价下影线非常突兀,阳线或阴线时大时小,从一幅画或照片的角度看,显得非常杂乱。本文构建了一种比较中庸的K线走势,让人一目了然,也方便MLLM从中辨别。

构建好股价数据后,本文使用mplfinance显示并保存K线图。

mplfinance设定背景色、阳线与阴线的颜色、上影线和下影线的线宽、横纵坐标轴的上下限,统一设置图片大小为896x448的png格式。

文本对话数据

本文构建的文本对话数据共4万条,下面是一个样例:

{
    "id": 0,
    "image": "path_to_picture",
    "width": 896,
    "height": 448,
    "conversations": [
        {
            "from": "human",
            "value": "<image>\nAs a stock analysis expert, the user has provided you with the K-line chart pattern. Please identify the coordinates of the bounding box for the region: <ref>启明之星</ref>"
        },
        {
            "from": "gpt",
            "value": "<ref>启明之星</ref><box>[[550, 249, 630, 309]]</box>"
        }
    ]
}

通过启明之星指定MLLM要识别的K线目标形态,[[550, 249, 630, 309]]说明了该K线形态在图片中的坐标位置,其中前两位坐标(550, 249)是左上角坐标,后两位坐标(630, 309)是右下角坐标。

human角色的提问,随机在多样的中英文prompt生成。每个图片样本只有一轮对话。

实验情况

开启训练

笔者使用InternVL2自带的训练框架[3]。

在一台8卡A800 GPU服务器上分别训练InternVL2-8B和InternVL2-26B。

图片
训练参数

实验效果

经过几个小时的等待,模型全参微调完成,更新模型配置文件后,用LMDeploy部署InternVL2。

笔者挑选了部分新图片,选择不同prompt来让微调后的InternVL2预测启明之星的边界框坐标,效果见下表。

图片
图 边界框坐标预测效果

小结:

  • InternVL-8B和InternVL-26B基本能够准确识别启明之星的边界框坐标位置

  • InternVL-8B识别误差像素在0-6个内

  • InternVL-26B识别的更为精准,误差像素在0-2个内

不足之处

限于时间精力,本实验还有很多不足之处,包括但不限于:

  • 实验选取的周期为21天,相对较短

  • 多样性缺乏

    - K线形态预测结果单一,均为预测一个启明之星,而不是预测多个或零个,或其他K线形态

    - 训练集图片中启明之星为一个,缺乏多样性

    - 启明之星左右的K线形态变化不够多(一折、二折、三折变化仍有限)

    - 单边上涨或单边下降的形态,波动变化不够大(胆子不够大,变化要靠想象)

    - 单边变化的形态可能有红三兵,这里也可以进行训练数据集构建、训练和预测

思考

通过上面的实验,基本验证了多模态大模型MLLM对开放式人为定义图形的边界框识别能力,有心的小伙伴可以此来做很多有意思的工作,本文抛砖引玉,乐见多模态大模型造福生活。

同时,对K线形态启明之星的边界框坐标识别,如果将来能够工程化和扩大化,有助于:

  1. 自动识别股票K线图的各类特定形态,形成对股票一段时间内的股价波动表现的客观准确描述,有利于C端客户根据K线图进行股价操作;

  2. 根据生成的股票股价K线形态描述,将图片特点转为文字,为后面以(K线)图搜(K线)图做好基础工作,实现精准搜索;

  3. 联动MACD、KDJ等股票技术面分析,实现股票量化因子自动化挖掘。

最后

在本实验结束后,笔者发现choice客户端,在指标管理-系统指标-五彩K线,已有K线形态定位。

图片

图 choice客户端的K线形态定位,红框是另外加上的

那么问题来了,这是一个新的机会吗?

参考资料

[1] 多模态测评数据: 

https://zhuanlan.zhihu.com/p/701404377

[2] 启明之星: 

https://baijiahao.baidu.com/s?id=1709778049770861821&wfr=spider&for=pc

[3] InternVL2自带的训练框架: 

https://github.com/OpenGVLab/InternVL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值