这是一个基于预训练视觉编码器和大语言模型的图像描述生成项目,在COCO数据集上训练和评估。
├── models/
│ ├── __init__.py
│ ├── vision_encoder.py # 视觉编码器 (ResNet/ViT)
│ ├── language_model.py # 语言模型包装
│ ├── connector.py # 视觉-语言连接器
│ └── vlm_model.py # 完整的VLM模型
├── data/
│ ├── __init__.py
│ ├── coco_dataset.py # COCO数据集处理
│ └── data_utils.py # 数据处理工具
├── training/
│ ├── __init__.py
│ ├── trainer.py # 训练器
│ └── config.py # 配置文件
├── evaluation/
│ ├── __init__.py
│ ├── evaluator.py # 评估器
│ └── metrics.py # 评估指标
├── scripts/
│ ├── train.py # 训练脚本
│ ├── evaluate.py # 评估脚本
│ ├── inference.py # 推理脚本
│ ├── download_coco.py # 下载COCO数据集
│ └── demo.py # 演示脚本
├── configs/
│ └── default_config.yaml # 默认配置
└── requirements.txt
pip install -r requirements.txtpython scripts/demo.pypython scripts/download_coco.py --data_dir data/coco# 使用默认配置
python scripts/train.py
# 自定义配置
python scripts/train.py \
--vision_model microsoft/resnet-50 \
--language_model microsoft/DialoGPT-small \
--batch_size 16 \
--num_epochs 10 \
--learning_rate 2e-5python scripts/evaluate.py --model_path checkpoints/best_model# 单张图像
python scripts/inference.py \
--model_path checkpoints/best_model \
--image_path path/to/image.jpg
# 批量图像
python scripts/inference.py \
--model_path checkpoints/best_model \
--image_dir path/to/images/-
视觉编码器: 将输入图像编码为特征向量
- 支持ResNet系列 (microsoft/resnet-50)
- 支持ViT系列 (google/vit-base-patch16-224)
-
连接器: 将视觉特征映射到语言模型的输入空间
- MLP连接器 (默认)
- 注意力连接器
-
语言模型: 基于视觉特征生成描述文本
- 支持GPT系列 (microsoft/DialoGPT-small)
- 支持LLaMA系列
- 支持Qwen系列
model:
vision_model_name: "microsoft/resnet-50"
language_model_name: "microsoft/DialoGPT-small"
connector_type: "mlp"
use_lora: true
freeze_vision_backbone: true
freeze_llm: truetraining:
num_epochs: 10
learning_rate: 2.0e-5
batch_size: 16
gradient_accumulation_steps: 4
warmup_steps: 1000evaluation:
max_generation_length: 50
num_beams: 4
do_sample: false
temperature: 1.0项目支持多种标准的图像描述评估指标:
- BLEU-1/2/3/4: 基于n-gram匹配的指标
- CIDEr: 基于TF-IDF的共识评估指标
- METEOR: 基于词对齐的指标
- ROUGE-L: 基于最长公共子序列的指标
- SPICE: 基于语义命题的指标
python scripts/train.py \
--vision_model google/vit-base-patch16-224 \
--language_model Qwen/Qwen2-0.5B \
--connector_type attention \
--batch_size 8 \
--num_epochs 15 \
--use_wandb \
--wandb_project my-vlm-project# 评估ResNet+GPT模型
python scripts/evaluate.py \
--model_path checkpoints/resnet_gpt_model \
--output_dir results/resnet_gpt
# 评估ViT+Qwen模型
python scripts/evaluate.py \
--model_path checkpoints/vit_qwen_model \
--output_dir results/vit_qwenpython scripts/inference.py \
--model_path checkpoints/best_model \
--image_dir test_images/ \
--output_file results.json \
--save_format json \
--num_beams 5 \
--max_length 50# 使用小数据集快速测试
python scripts/train.py \
--batch_size 4 \
--num_epochs 1 \
--save_steps 100 \
--eval_steps 50如果在推理时遇到生成失败的问题,请检查以下几点:
运行详细调试模式:
# 使用修改后的推理脚本获取详细错误信息
python scripts/inference.py \
--model_path checkpoints/interrupted \
--image_path data/coco/val2017/000000000285.jpg \
--max_length 50常见原因和解决方案:
- 模型未完全训练: 警告信息 "You should probably TRAIN this model" 表示模型可能需要更多训练
- 检查点不完整: 确保检查点目录包含所有必要文件
- 内存不足: 尝试减少
max_length或num_beams参数 - 设备不匹配: 确认模型和数据在同一设备上
Fast image processor class ... is available. Using slow image processor class.
这个警告不影响功能,但可以通过在代码中设置 use_fast=True 来解决。
Some weights of ViTModel were not initialized from the model checkpoint
这是正常现象,特别是在使用预训练模型时。不影响推理功能。
# 从中断的训练恢复
python scripts/train.py --resume_from checkpoints/interrupted
# 从特定epoch恢复
python scripts/train.py --resume_from checkpoints/epoch_5# 减少批次大小和增加梯度累积
python scripts/train.py \
--batch_size 8 \
--gradient_accumulation_steps 8