Title

OMG-LLaVA学习记录---模型评估与尝试微调

OMG-LLaVA学习记录---模型评估与(尝试)微调

首先根据文档

# for chat
python omg_llava/tools/chat_omg_llava.py \
  ${PATH_TO_CONFIG} \
  ${PATH_TO_PTH} \
  --image ${PATH_TO_IMAGE}
# the corresponding segmentation masks will be saved at ./output.png

# for evaluation referring expression segmentation
NPROC_PER_NODE=8 xtuner refcoco_omg_seg_llava \
  ${PATH_TO_CONFIG} \
  ${PATH_TO_PTH} \
  --dataset ${refcoco or refcoco_plus or refcocog} \
  --split ${val or testA or testB}

# for evaluation gcg
NPROC_PER_NODE=8 xtuner gcg_omg_seg_llava \
  ${PATH_TO_CONFIG} \
  ${PATH_TO_PTH} \
  --output-name gcg_pred

python omg_llava/tools/evaluate_gcg.py \
  --prediction_dir_path ./work_dirs/gcg_pred/
  --gt_dir_path ./data/glamm_data/annotations/gcg_val_test/
  --split ${val or test}
  
# for evaluation region caption
NPROC_PER_NODE=8 xtuner region_cap_mask_omg_seg_llava \
  ${PATH_TO_CONFIG} \
  ${PATH_TO_PTH} \
  --output-path ./work_dirs/region_cap_pred.json
  
python omg_llava/tools/evaluate_region_cap.py \
  --results_dir ./work_dirs/region_cap_pred.json

Evaluation

关于评估,这次只在 Refcoco Refcoco+ Refcocog三个数据集上跑了val, testA, testB, (其中Refcocog的测试集只有test)
剩下的数据集接近180GB, GPU我还是租的,全测下来实在有些抗不住QAQ
所以主要测指代性分割这个功能了

接下来先看一下结果

Refcoco

val

testA

testB


Recocog

val

test


Recoco+

val

testA

testB

对比与分析

cIoU

Method refCOCO Val refCOCO TestA refCOCO TestB refCOCO+ Val refCOCO+ TestA refCOCO+ TestB refCOCOg Val refCOCOg Test
(Paper) OMG-LLaVA 75.6 77.7 71.2 65.6 69.7 58.9 70.7 70.2
(Paper) OMG-LLaVA(ft) 78.0 80.3 74.1 69.1 73.1 63.0 72.9 72.9
(My) OMG-LLaVA 64.5 63.3 63.4 50.7 49.3 47.9 57.8 58.2

结果较差的可能原因的分析

  1. 环境与库版本不匹配,在这个过程中,为了解决PyTorch兼容的问题,我把\(NumPy\)的版本降低,同时降低了Opencv-Python的版本; 为了解决gradio的TypeError的bug, 有对gradio和gradio-client进行了升级; 为了解决ValueError: .to is not supported for 4-bit or 8-bit bitsandbytes models. Please use the model as it is...这个问题,把accelerate库的版本降低,这个环境可能已经与作者的环境相差比较大了

  2. 模型权重文件可能不完全匹配,同的训练策略会导致不同的结果。我们使用的通用微调模型,其权重和论文中的可能存在差异。

尝试微调(失败)

微调时显存爆掉了
尝试ZeRO Offloading, 尝试将优化器状态从 GPU 显存中卸载CPU 内存中

deepspeed_zero2 = dict(
    optimizer=dict(
        type='AdamW',
        lr=2e-5,
        betas=(0.9, 0.999),
        weight_decay=0.05,
    ),
    scheduler=dict(type='WarmupDecayLR',
                   warmup_min_lr=0,
                   warmup_max_lr=2e-5,
                   warmup_num_steps=100,
                   total_num_steps=10000),
    zero_optimization=dict(
        stage=2,
        allgather_partitions=True,
        allgather_bucket_size=2e8,
        reduce_bucket_size=2e8,
        overlap_comm=True,
        contiguous_gradients=True,
        offload_optimizer=dict(device='cpu', pin_memory=True),
    ),
    fp16=dict(
        enabled=True,
        initial_scale_power=16
    ),
    train_micro_batch_size_per_gpu=1,
)

依旧爆掉了

分析原因可能是显存比较小放不下梯度和优化器状态了

posted @ 2025-10-13 00:00  栗悟饭与龟功気波  阅读(11)  评论(0)    收藏  举报