一、背景
Qwen2.5-VL是Qwen家族最新的旗舰款视觉模型。这个版本主要有以下两个特点:
- 理解长视频和捕捉事件:Qwen2.5-VL 能够理解超过 1 小时的视频,并且这次它具备了通过精准定位相关视频片段来捕捉事件的新能力。
- 视觉定位:Qwen2.5-VL 可以通过生成 bounding boxes 或者 points 来准确定位图像中的物体,并能够为坐标和属性提供稳定的 JSON 输出。
这次发布了72B,7B和3B版本。72B是旗舰款的模型,7B和3B更加倾向于小模型本地部署的应用,其中7B可以达到gpt4o-mini的效果,3B在同参数级别的模型中比较有优势。本次给大家带来的是7B模型微调交通车辆车牌属性相关微调记录。
二、微调数据
1、数据生成
1.1、首先我们对图片中的车辆属性和车牌属性进行定性:
- 车辆属性我们主要分为车辆品牌(不包含年款)、车辆类型、车辆颜色、车辆朝向。
- 车牌属性我们分为,车牌所属国家、车牌所属省份、车牌号码、车牌颜色、车牌层数、车牌用途。
通过前期数据积累制作对应相关数据标签,生成如下数据:
1.2 基于大模型+提示词对数据进行伪标签定性描述。
效果如下:
{'imgpath': '/home/jovyan/pvc-jiaotong/wqg_data/LLM_data/LLM_Vehicle_ATT/磨憨整理_20241210/已整理/车辆属性:东风-车头-轻微型货车-蓝色_车牌属性0:中国-云南省-云K CM158-蓝色-单层-燃油车_00032804_car10062_00336842.jpg',
'shape': (612, 602, 3),
'describe': '这辆蓝色的东风轻微型货车正迎面而来,车身线条流畅,显得十分稳重。阳光洒在车身上,反射出耀眼的光芒,使得蓝色更加鲜艳夺目。东风品牌的标志清晰可见,彰显着其卓越的品质与实力。\n\n车牌上显示的是中国云南省的车牌,号码为云K CM158。车牌的颜色为蓝色,与车身相得益彰,给人一种清新自然的感觉。车牌的层数为单层,用途为燃油车车牌,表明这是一辆传统的内燃机驱动的车辆。车牌上的文字和数字在阳光下显得格外醒目,仿佛在诉说着它的故事。\n\n总的来说,这辆车不仅外观时尚,而且充满了实用性和可靠性。无论是日常通勤还是长途旅行,它都能轻松应对各种路况。'}
{'imgpath': '/home/jovyan/pvc-jiaotong/wqg_data/LLM_data/LLM_Vehicle_ATT/磨憨整理_20241210/已整理/车辆属性:东风-车头-重型货车-棕色_车牌属性0:中国-云南省-云F 92639-黄色-单层-货车_00005229_car9450_00324509.jpg',
'shape': (1146, 1010, 3),
'describe': '这辆重型货车的品牌是东风,从其独特的前脸设计和标志性的东风车标可以看出。虽然照片拍摄于阴雨天气,但可以推测出这辆车在晴天时应该是棕色的。它正对着镜头,给人一种威严而坚固的感觉。\n\n车牌显示该车属于中国的云南省,车牌号码为云F 92639,颜色为黄色。车牌的单层设计清晰可见,表明它专为货车使用而设。尽管照片中光线较为昏暗,但车牌的颜色依然鲜明,黄色在雨天的反光下显得格外醒目。\n\n总的来说,这是一辆典型的东风重型货车,无论是从品牌、颜色还是车牌来看,都与提示信息相符。'}
1.3 基于大模型+描述性提问对数据进行伪标签定性描述。
效果如下:
{'imgpath': '/home/jovyan/pvc-jiaotong/wqg_data/LLM_data/LLM_Vehicle_ATT/磨憨整理_20241210/已整理/车辆属性:东风-车头-轻微型货车-蓝色_车牌属性0:中国-云南省-云K CM158-蓝色-单层-燃油车_00032804_car10062_00336842.jpg',
'shape': (612, 602, 3),
'describe': '这是一辆蓝色的东风牌货车,车牌号为“EK CM158”。车辆顶部装有太阳能板,车窗上可以看到车内的一些物品和驾驶者。背景中可以看到一些树木和建筑物。',
'question': '请把图片中的信息转化为文字描述。'}
{'imgpath': '/home/jovyan/pvc-jiaotong/wqg_data/LLM_data/LLM_Vehicle_ATT/磨憨整理_20241210/已整理/车辆属性:东风-车头-重型货车-棕色_车牌属性0:中国-云南省-云F 92639-黄色-单层-货车_00005229_car9450_00324509.jpg',
'shape': (1146, 1010, 3),
'describe': '图片显示一辆大型货车在雨天行驶,车头前方有一个车牌号为“浙F-92639”的黄色车牌。车顶上装有设备,车窗内可以看到驾驶员戴着帽子。',
'question': '用简洁的语言描述图片的主要内容。'}
1.4 通过大模型语义整合能力,对提示词信息和描述语言信息进行整合
效果如下:
{'imgpath': '/home/jovyan/pvc-jiaotong/wqg_data/LLM_data/LLM_Vehicle_ATT/磨憨整理_20241210/已整理/车辆属性:东风-车头-轻微型货车-蓝色_车牌属性0:中国-云南省-云K CM158-蓝色-单层-燃油车_00032804_car10062_00336842.jpg',
'shape': (612, 602, 3),
'describe': ['这辆蓝色的东风轻微型货车正迎面而来,车身线条流畅,显得格外稳重。东风品牌的标志清晰可见,彰显着其卓越的品质与实力。车身上的蓝色在阳光下更加鲜艳夺目,与车牌的颜色相得益彰,给人一种清新自然的感觉。车牌上显示的是中国云南省的车牌,号码为云K CM158,单层设计,用途为燃油车车牌,表明这是一辆传统的内燃机驱动的车辆。车牌上的文字和数字格外醒目,仿佛在诉说着它的故事。\n\n车辆顶部装有太阳能板,车窗上可以看到车内的一些物品和驾驶者。背景中可以看到一些树木和建筑物,与这辆充满实用性和可靠性的货车相映成趣。无论是日常通勤还是长途旅行,它都能轻松应对各种路况,成为一道亮丽的风景线。'],
'question': '请把图片中的信息转化为文字描述。'}
{'imgpath': '/home/jovyan/pvc-jiaotong/wqg_data/LLM_data/LLM_Vehicle_ATT/磨憨整理_20241210/已整理/车辆属性:东风-车头-重型货车-棕色_车牌属性0:中国-云南省-云F 92639-黄色-单层-货车_00005229_car9450_00324509.jpg',
'shape': (1146, 1010, 3),
'describe': ['这辆威严而坚固的重型货车,品牌为东风,其独特的前脸设计和标志性的东风车标清晰可见。尽管雨幕笼罩,仍能想象它在晴朗日子里的棕色身影。车头正对着镜头,散发出一股不可小觑的力量感。车牌显示该车隶属于中国的云南省,车牌号码为云F 92639,颜色为黄色,单层设计清晰可见,专为货车使用而设。尽管雨水模糊了视线,车牌的黄色依然在雨中格外醒目。\n\n图片中,这辆大型货车在雨天行驶,车顶上装有设备,车窗内驾驶员戴着帽子,与前文描述的东风重型货车相呼应。这辆东风重型货车,无论是从品牌、颜色还是车牌来看,都显得格外引人注目。'],
'question': '用简洁的语言描述图片的主要内容。'}
2 模型微调
微调是基于mc-swift框架来进行微调。微调相关参数:
# 22GB
# 1280*28*28 限制了最大图像像素数量
CUDA_VISIBLE_DEVICES=0,1,2,3 \
MAX_PIXELS=1003520 \
swift sft \
--model Qwen/Qwen2.5-VL-7B-Instruct \
--train_type lora \
--dataset datapath \
--freeze_vit false \
--torch_dtype bfloat16 \
--num_train_epochs 2 \
--per_device_train_batch_size 3 \
--per_device_eval_batch_size 1 \
--learning_rate 1e-4 \
--lora_rank 8 \
--lora_alpha 32 \
--target_modules all-linear \
--gradient_accumulation_steps 16 \
--eval_steps 50 \
--save_steps 300 \
--save_total_limit 5 \
--logging_steps 5 \
--max_length 2048 \
--warmup_ratio 0.05 \
--dataloader_num_workers 4 \
--model_author swift \
--model_name swift-robot \
--max_pixels 1003520 \
--output_dir output
三、效果展示
- 中东车牌
输出结果:
{'车辆属性': {
'车辆品牌': '丰田',
'车辆类型': '小轿车',
'车辆颜色': '白色',
'车辆朝向': '正面'},
'车牌属性': {
'车牌国家': '阿布扎比',
'车牌省份': '未知',
'车牌号码': '14 11586',
'车牌颜色': '白色',
'车牌层数': '单层车牌',
'车牌用途': '私家车车牌'}}
- 小轿车
输出结果:
{'车辆属性': {
'车辆品牌': '宝骏',
'车辆类型': '小轿车',
'车辆颜色': '红色',
'车辆朝向': '正面'},
'车牌属性': {
'车牌国家': '中国',
'车牌省份': '云南省',
'车牌号码': '云NEW902',
'车牌颜色': '蓝色',
'车牌层数': '单层车牌',
'车牌用途': '燃油车车牌'}}
- 模糊
输出结果:
{'车辆属性': {
'车辆品牌': '奥迪',
'车辆类型': '小轿车',
'车辆颜色': '黑色',
'车辆朝向': '背面'},
'车牌属性': {
'车牌国家': '中国',
'车牌省份': '山东省',
'车牌号码': '鲁GCY987',
'车牌颜色': '蓝色',
'车牌层数': '单层车牌',
'车牌用途': '燃油车车牌'}}
注意 :这里结果识别有误,车牌中字符应该是黑,但是识别成鲁,省份会自动识别成山东省。
- 货车
输出结果:
{'车辆属性': {
'车辆品牌': '乘龙',
'车辆类型': '挂车',
'车辆颜色': '红色',
'车辆朝向': '正面'},
'车牌属性': {
'车牌国家': '中国',
'车牌省份': '云南省',
'车牌号码': '云N51323',
'车牌颜色': '黄色',
'车牌层数': '单层车牌',
'车牌用途': '货车车牌'}}