iiCEMAN/BanglaMedVQA
收藏资源简介:
--- dataset_info: features: - name: image dtype: image - name: image_id dtype: string - name: sub_dataset dtype: string - name: category dtype: string - name: category_bn dtype: string - name: modality dtype: string - name: organ dtype: string - name: question_en dtype: string - name: answer_en dtype: string - name: question_bn dtype: string - name: answer_bn dtype: string splits: - name: chest_xray_train num_bytes: 1422736473.5 num_examples: 3500 - name: chest_xray_test num_bytes: 80214865.0 num_examples: 200 - name: medicat_train num_bytes: 1389275722.5 num_examples: 3500 - name: medicat_test num_bytes: 82104479.0 num_examples: 200 download_size: 3001794660 dataset_size: 2974331540.0 configs: - config_name: default data_files: - split: chest_xray_train path: data/chest_xray_train-* - split: chest_xray_test path: data/chest_xray_test-* - split: medicat_train path: data/medicat_train-* - split: medicat_test path: data/medicat_test-* --- # Medical VQA LoRA Training Fine-tuning `google/medgemma-4b-it` vision-language model using FP32 LoRA with LLaMA Factory for Bengali medical question answering. ## 📁 Repository Structure ``` med-vqa-lora/ ├── configs/ │ ├── qwen2.5-vl-7b.yaml # Training configuration │ ├── qwen2.5-vl-7b-test.yaml # Testing configuration │ ├── med-gemma-4b.yaml # Legacy MedGemma training config │ └── med-gemma-4b-test.yaml # Legacy MedGemma testing config ├── data/ │ ├── dataset_info.json # Master dataset registry │ ├── chest_x-ray/ │ │ ├── train/ │ │ │ ├── images/ # Training images │ │ │ ├── chest_x-ray.csv # Training data │ │ │ └── chest_x-ray_dataset.json │ │ └── test/ │ │ ├── images/ # Test images │ │ ├── chest_x-ray.csv # Test data │ │ └── chest_x-ray_dataset.json │ └── medicat/ │ └── train/ │ ├── images/ # Medicat training images │ ├── medicat.csv # Medicat training data │ └── medicat_dataset.json ├── output/ # Model outputs and predictions ├── prepare_data.py # Data preparation script ├── train_model.py # Main training/testing script ├── requirements.txt # Python dependencies ├── Dockerfile # Container setup └── README.md # This file ``` ## 🚀 Usage ### 1. Build Docker Container ```bash docker build -t med-vqa:latest . ``` ### 2. Prepare Data ```bash # Prepare all datasets docker run --rm -v $(pwd):/app med-vqa:latest python prepare_data.py --all # Prepare specific dataset docker run --rm -v $(pwd):/app med-vqa:latest python prepare_data.py --dataset chest_x-ray --split train ``` ### 3. Run Training ```bash docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b.yaml ``` ### 4. Run Testing ```bash docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b-test.yaml ``` ### 5. Complete Pipeline ```bash # Train and test in sequence docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b.yaml docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b-test.yaml ``` ## ⚙️ Configuration ### Training (`configs/med-gemma-4b.yaml`) - Model: `google/medgemma-4b-it` - LoRA Rank: 16, Alpha: 32 - Batch Size: 2 per device, 2 gradient accumulation - Template: `gemma3` ### Testing (`configs/med-gemma-4b-test.yaml`) - Loads trained adapter from `./output` - Generates predictions for test dataset ## 📝 Data Preparation ```bash # Prepare all datasets python prepare_data.py --all # Prepare specific dataset python prepare_data.py --dataset chest_x-ray --split train # Custom paths python prepare_data.py --dataset chest_x-ray --split test --csv data/chest_x-ray/test/chest_x-ray.csv --images data/chest_x-ray/test/images --output data/chest_x-ray/test/chest_x-ray_dataset.json ``` ## 🎯 Output Files ### Training Outputs - `output/adapter_model.safetensors` - LoRA weights (119MB) - `output/adapter_config.json` - LoRA configuration - `output/checkpoint-32/` - Training checkpoint - `output/train_results.json` - Training metrics ### Test Predictions - `output/chest_x-ray_test_predictions.csv` - Test predictions with columns: - `image_id`, `image_path`, `category`, `category_bn` - `question`, `question_bn`, `llm_answer`, `llm_answer_bn` - `predicted_answer_bn` - Model's predictions ## 🔍 Example Usage ### Sample Predictions ```csv image_id,image_path,question_bn,llm_answer_bn,predicted_answer_bn test_001,data/chest_x-ray/test/images/00015953_015.png,এখানে কোন নির্দিষ্ট অবস্থা চিহ্নিত করা হয়েছে?,কোন নির্দিষ্ট অবস্থা চিহ্নিত হয়নি।,কোন নির্দিষ্ট অবস্থা চিহ্নিত করা হয়নি। test_002,data/chest_x-ray/test/images/00011237_094.png,অনুপ্রবেশটি কোথায় অবস্থিত?,মধ্য ডান,মধ্য বাম ``` ### Model Loading ```python from transformers import AutoModelForCausalLM, AutoProcessor from peft import PeftModel model = AutoModelForCausalLM.from_pretrained("google/medgemma-4b-it") processor = AutoProcessor.from_pretrained("google/medgemma-4b-it") model = PeftModel.from_pretrained(model, "./output") ```
--- dataset_info: 数据集信息: 特征列表: - 名称: 图像(image) 数据类型: 图像格式 - 名称: 图像ID(image_id) 数据类型: 字符串 - 名称: 子数据集(sub_dataset) 数据类型: 字符串 - 名称: 类别(category) 数据类型: 字符串 - 名称: 孟加拉语类别(category_bn) 数据类型: 字符串 - 名称: 模态(modality) 数据类型: 字符串 - 名称: 器官(organ) 数据类型: 字符串 - 名称: 英文问题(question_en) 数据类型: 字符串 - 名称: 英文答案(answer_en) 数据类型: 字符串 - 名称: 孟加拉语问题(question_bn) 数据类型: 字符串 - 名称: 孟加拉语答案(answer_bn) 数据类型: 字符串 划分集: - 名称: chest_xray_train(胸部X光训练集) 字节大小: 1422736473.5 样本数量: 3500 - 名称: chest_xray_test(胸部X光测试集) 字节大小: 80214865.0 样本数量: 200 - 名称: medicat_train(Medicat训练集) 字节大小: 1389275722.5 样本数量: 3500 - 名称: medicat_test(Medicat测试集) 字节大小: 82104479.0 样本数量: 200 下载总大小: 3001794660 数据集总大小: 2974331540.0 配置项: - 配置名称: default(默认配置) 数据文件: - 划分集: chest_xray_train(胸部X光训练集) 路径: data/chest_xray_train-* - 划分集: chest_xray_test(胸部X光测试集) 路径: data/chest_xray_test-* - 划分集: medicat_train(Medicat训练集) 路径: data/medicat_train-* - 划分集: medicat_test(Medicat测试集) 路径: data/medicat_test-* --- # 医疗视觉问答(Visual Question Answering, VQA)低秩适配(Low-Rank Adaptation, LoRA)训练 使用基于FP32精度的LoRA结合LLaMA Factory,对`google/medgemma-4b-it`视觉语言模型进行微调,以实现孟加拉语医疗问答任务。 ## 📁 仓库目录结构 med-vqa-lora/ ├── configs/ │ ├── qwen2.5-vl-7b.yaml # 训练配置文件 │ ├── qwen2.5-vl-7b-test.yaml # 测试配置文件 │ ├── med-gemma-4b.yaml # 旧版MedGemma训练配置 │ └── med-gemma-4b-test.yaml # 旧版MedGemma测试配置 ├── data/ │ ├── dataset_info.json # 主数据集注册表 │ ├── chest_x-ray/ │ │ ├── train/ │ │ │ ├── images/ # 训练图像集 │ │ │ ├── chest_x-ray.csv # 训练数据文件 │ │ │ └── chest_x-ray_dataset.json │ │ └── test/ │ │ ├── images/ # 测试图像集 │ │ ├── chest_x-ray.csv # 测试数据文件 │ │ └── chest_x-ray_dataset.json │ └── medicat/ │ └── train/ │ ├── images/ # Medicat训练图像集 │ ├── medicat.csv # Medicat训练数据文件 │ └── medicat_dataset.json ├── output/ # 模型输出与预测结果目录 ├── prepare_data.py # 数据预处理脚本 ├── train_model.py # 主训练/测试脚本 ├── requirements.txt # Python依赖声明文件 ├── Dockerfile # 容器构建文件 └── README.md # 本说明文档 ## 🚀 使用方法 ### 1. 构建Docker容器 bash docker build -t med-vqa:latest . ### 2. 数据预处理 bash # 预处理所有数据集 docker run --rm -v $(pwd):/app med-vqa:latest python prepare_data.py --all # 预处理指定数据集 docker run --rm -v $(pwd):/app med-vqa:latest python prepare_data.py --dataset chest_x-ray --split train ### 3. 启动训练 bash docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b.yaml ### 4. 启动测试 bash docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b-test.yaml ### 5. 完整流程执行 bash # 依次执行训练与测试流程 docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b.yaml docker run --gpus all --ipc=host --rm --env-file .env -v $(pwd):/app med-vqa:latest python train_model.py --config configs/med-gemma-4b-test.yaml ## ⚙️ 配置说明 ### 训练配置(`configs/med-gemma-4b.yaml`) - 模型:`google/medgemma-4b-it` - LoRA秩(Rank):16,Alpha系数:32 - 批次大小:单设备2,梯度累积步数为2 - 提示模板:`gemma3` ### 测试配置(`configs/med-gemma-4b-test.yaml`) - 从`./output`加载训练完成的适配器权重 - 对测试集生成预测结果 ## 📝 数据预处理流程 bash # 预处理所有数据集 python prepare_data.py --all # 预处理指定数据集 python prepare_data.py --dataset chest_x-ray --split train # 自定义路径预处理 python prepare_data.py --dataset chest_x-ray --split test --csv data/chest_x-ray/test/chest_x-ray.csv --images data/chest_x-ray/test/images --output data/chest_x-ray/test/chest_x-ray_dataset.json ## 🎯 输出文件 ### 训练输出文件 - `output/adapter_model.safetensors`:LoRA适配器权重(大小119MB) - `output/adapter_config.json`:LoRA适配器配置文件 - `output/checkpoint-32/`:训练中途检查点目录 - `output/train_results.json`:训练性能指标文件 ### 测试预测结果 - `output/chest_x-ray_test_predictions.csv`:测试预测结果文件,包含列: - `image_id`(图像ID)、`image_path`(图像路径)、`category`(类别)、`category_bn`(孟加拉语类别) - `question`(英文问题)、`question_bn`(孟加拉语问题)、`llm_answer`(大语言模型英文答案)、`llm_answer_bn`(大语言模型孟加拉语答案) - `predicted_answer_bn`:模型生成的孟加拉语预测答案 ## 🔍 示例用法 ### 示例预测结果 csv image_id,image_path,question_bn,llm_answer_bn,predicted_answer_bn test_001,data/chest_x-ray/test/images/00015953_015.png,এখানে কোন নির্দিষ্ট অবস্থা চিহ্নিত করা হয়েছে?,কোন নির্দিষ্ট অবস্থা চিহ্নিত হয়নি।,কোন নির্দিষ্ট অবস্থা চিহ্নিত করা হয়নি। test_002,data/chest_x-ray/test/images/00011237_094.png,অনুপ্রবেশটি কোথায় অবস্থিত?,মধ্য ডান,মধ্য বাম ### 模型加载示例 python from transformers import AutoModelForCausalLM, AutoProcessor from peft import PeftModel model = AutoModelForCausalLM.from_pretrained("google/medgemma-4b-it") processor = AutoProcessor.from_pretrained("google/medgemma-4b-it") model = PeftModel.from_pretrained(model, "./output")



