📌调用DeepSeek-VL2、Qwen2-VL过程中的踩坑记录
DeepSeek-VL2
-
DeepSeek-VL2-small
模型调用:- 显卡内存要大于40G,自己用的是L40 (48GB) * 1,这个卡可以调用small这个模型,RTX 4090 (24GB) * 1这张卡显示内存不足。
DeepSeek-VL2-tiny
可以用RTX 4090 (24GB) * 1来调用。
-
模型输出结果异常:
<|Assistant|>:: <|ref|>head without helmet<|/ref|><|det|>[[0, 50, 55, 9999], [0, 5, 533, 17, 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
- 解决方法:https://github.com/deepseek-ai/DeepSeek-VL2/issues/96
- 有两个示例代码。一个在README.md。另一个在 inference.py 中。这两个代码是不同的。README.md中的示例代码有问题,只能在示例图像上生成正确的输出。
inference.py
中的代码是 ok 的,它可以为其他图像生成正确的输出。- 挺鸡肋的,建议先改成
inference.py
中的代码,然后再测试……
- 目标检测visual grounding检测框
坐标
问题:- 模型直接输出的检测框坐标是归一化以后的坐标,
[0,999]
,格式为<|det|>[[x1, y1, x2, y2],...]<|/det|>
,分别代表左上角和右下角的坐标。 - 注意这不是图片中的绝对坐标,所以一定要转成原始检测框坐标
[x_min, y_min, x_max, y_max]
!否则结果就会很差!!! - 官方也提供了转换方法,见
parse_ref_bbox()
方法,重点代码如下:
- 模型直接输出的检测框坐标是归一化以后的坐标,
for indice, (box, label) in enumerate(zip(boxes, labels)):
box = [
int(box[0] / 999 * image_w),
int(box[1] / 999 * image_h),
int(box[2] / 999 * image_w),
int(box[3] / 999 * image_h),
]
Qwen2-VL
- 直接调用官方提供的API即可,通过
DashScope SDK
或HTTP方式调用通义千问VL模型。而不是通过OpenAI SDK或OpenAI兼容的HTTP方式调用通义千问VL模型,这个可能跑不通。 - 检测框坐标输出问题,和DeepSeek-VL2相同,一定也要把坐标转化成真实的绝对坐标
[x_min, y_min, x_max, y_max]
!
大模型更新真是太快了,过完年出了一堆……
整理不易✨🚀🚀,关注和收藏后拿走哦📌📌,欢迎留言~~✨✨👋📣
我的公众号📣🔎🔎AdaCoding、GitHub🧐🔎🔎 AdaCoding123