慧心医问——项目实训第四周实录

78 阅读4分钟

一、本周工作总结

本周我们主要的工作内容有以下两个方面

1.总结和分析XrayGLM模型初步微调的结果

2.开始进行系统前端的编写

下面将对这些工作进行简单介绍。

二、XrayGLM模型初步微调的结果

任务1——处理IU-XRay数据集

3.1 关于IU-XRay数据集

image.png

在该数据集中,作者收集了3996份报告,共8121张图像,实际公开:3955份报告,7470张图像。

印第安纳大学(IU)的研究人员从印第安纳州患者护理网络10数据库中的两个大型医院系统中提取了叙事性胸部X光检查报告及PA胸部X光片。并将图像和报告报告给NIH   2.2 预处理数据集

使用Mesh(医学主题词)将Finding和report编码(Manual annotation)。

image.png

第一个阶段,简单地将数据标为正常/不正常。

第二个阶段,细化不正常数据的标注(详见附录)

歧义词

同义词

确定会改变X射线外观的轻微,历史或偶然条件

此外,采用MTI自动编码(MTI annotation)。

2.3 将数据集转换成VisualGLM需要接受的形式

首先由团队成员刘馨瑶将数据集将英文转换成中文,

image.png

然后我将数据集分割为了训练集和测试集,并将格式转换成可处理的。

image.png

具体代码如下: `` 分割部分代码 import pandas as pd

import json

读取Excel文件

df = pd.read_excel('IU-Xray.xlsx')

假设第一列是图片名称,第二列是图片的描述

假设第一列是图片名称,第二列是图片的描述

image_names = df.iloc[:, 0]  # 获取图片名称列

image_descriptions = df.iloc[:, 1]  # 获取图片描述列

创建一个新的DataFrame,其中包含我们想要的键名

new_df = pd.DataFrame({

    'image_id': image_names,

    'caption': image_descriptions

})

分割数据集(这里只是简单地将数据分为两部分,你可以根据需求进行更复杂的分割)

例如,我们随机选择70%的数据作为训练集,剩下的30%作为测试集

train_size = int(0.7 * len(df))

test_size = len(df) - train_size

使用pandas的sample方法进行分割(如果需要随机性的话)

train_df = df.sample(n=train_size, random_state=42)

test_df = df.drop(train_df.index)

假设第一列是图片名称,第二列是图片的描述

image_names1 = train_df.iloc[:, 0]  # 获取图片名称列

image_descriptions1 = train_df.iloc[:, 1]  # 获取图片描述列

创建一个新的DataFrame,其中包含我们想要的键名

train_df = pd.DataFrame({

    'image_id': image_names1,

    'caption': image_descriptions1

}) 

假设第一列是图片名称,第二列是图片的描述

image_names2 = test_df.iloc[:, 0]  # 获取图片名称列

image_descriptions2 = test_df.iloc[:, 1]  # 获取图片描述列  

创建一个新的DataFrame,其中包含我们想要的键名

test_df = pd.DataFrame({

    'image_id': image_names2,

    'caption': image_descriptions2

})

将数据集保存为JSON格式

如果你的DataFrame中不包含复杂的数据类型(如日期或自定义对象),可以直接使用to_json方法

train_json = train_df.to_json(orient='records')

test_json = test_df.to_json(orient='records')

将JSON字符串写入文件

with open('train_dataset.json', 'w', encoding='utf-8') as f:

    json.dump(json.loads(train_json), f, ensure_ascii=True, indent=4) 

with open('test_dataset.json', 'w', encoding='utf-8') as f:

    json.dump(json.loads(test_json), f, ensure_ascii=True, indent=4)  格式转换部分代码 import json

from tqdm import tqdm   with open('test_dataset.json') as f:

    data = json.load(f)

data_info = []

for i in tqdm(range(len(data['annotations']))):

    img = data['annotations'][i]['image_id']

    prompt = '通过这张胸部X光影像可以诊断出什么?'

    label = data['annotations'][i]['caption']

    json_data = {

                'img': './data/Xray/'+str(img),

                'prompt': prompt,

                'label': str(label)

                }

    data_info.append(json_data)

with open('test-ui-prompt.json', 'w+') as f1:

    json.dump(data_info, f1)

``

最后成功获得可训练数据集。

三、任务2——微调VisualGLM并记录结果

这部分工作由我和团队成员宗亚静共同完成,具体的微调结果如下:

image.png

image.png

image.png

训练结果对比

image.png

同时,我们整理了训练后模型的回答和医生回答的对比

image.png

观察到模型基本上可以实现正确的描述图片中的问题。

四、前端****

1. 本周我们正式开始web系统前端的编写,首先我们完成了静态页面的布局

  image.png

image.png

2. 在基于初步的静态页面基础上,我们会进一步开始动态页面相关工作。

五、总结

本周,我们团队在多个方面取得了显著进展。首先,在XrayGLM模型的初步微调工作中,我们也取得了积极成果。通过对模型性能的综合评估,我们识别了潜在的优势和改进点,为模型在特定应用场景下的性能提升打下了坚实基础。

最后,我们正式启动了系统前端的编写工作。这一步骤标志着我们从模型研发阶段向系统实现阶段的转变,对于构建用户友好、功能完善的系统至关重要。我们计划按照既定的开发计划逐步推进,确保前端界面能够满足用户需求并具备良好的用户体验。

综上所述,本周我们团队在模型微调和系统前端编写方面均取得了实质性进展,为后续工作的顺利开展奠定了坚实基础。