Skip to content

fpjo/LLaVA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Image Captioning with Vision-Language Model

这是一个基于预训练视觉编码器和大语言模型的图像描述生成项目,在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

快速开始

1. 安装依赖

pip install -r requirements.txt

2. 测试系统

python scripts/demo.py

3. 下载COCO数据集

python scripts/download_coco.py --data_dir data/coco

4. 训练模型

# 使用默认配置
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-5

5. 评估模型

python scripts/evaluate.py --model_path checkpoints/best_model

6. 推理生成描述

# 单张图像
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/

模型架构

  1. 视觉编码器: 将输入图像编码为特征向量

    • 支持ResNet系列 (microsoft/resnet-50)
    • 支持ViT系列 (google/vit-base-patch16-224)
  2. 连接器: 将视觉特征映射到语言模型的输入空间

    • MLP连接器 (默认)
    • 注意力连接器
  3. 语言模型: 基于视觉特征生成描述文本

    • 支持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: true

训练配置

training:
  num_epochs: 10
  learning_rate: 2.0e-5
  batch_size: 16
  gradient_accumulation_steps: 4
  warmup_steps: 1000

评估配置

evaluation:
  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_qwen

批量推理

python 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

故障排除

推理问题

1. "Failed to generate caption" 错误

如果在推理时遇到生成失败的问题,请检查以下几点:

运行详细调试模式:

# 使用修改后的推理脚本获取详细错误信息
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_lengthnum_beams 参数
  • 设备不匹配: 确认模型和数据在同一设备上

2. 图像处理器警告

Fast image processor class ... is available. Using slow image processor class.

这个警告不影响功能,但可以通过在代码中设置 use_fast=True 来解决。

3. 模型权重初始化警告

Some weights of ViTModel were not initialized from the model checkpoint

这是正常现象,特别是在使用预训练模型时。不影响推理功能。

训练问题

1. 检查点恢复

# 从中断的训练恢复
python scripts/train.py --resume_from checkpoints/interrupted

# 从特定epoch恢复  
python scripts/train.py --resume_from checkpoints/epoch_5

2. 内存优化

# 减少批次大小和增加梯度累积
python scripts/train.py \
  --batch_size 8 \
  --gradient_accumulation_steps 8

About

一个基于预训练视觉编码器和大语言模型的图像描述生成项目,在COCO数据集上训练和评估。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages