文章目录
- 前言
- 一、数据格式标签
- 二、LazySupervisedDataset的__gettitem__函数源码解读
- 1、source获取
- 2、图像数据处理
- 1、对话内容source获取(存在图像条件)
- 2、对话内容source获取(不存在图像条件)
- 3、对话文本数据加工
- 4、data_dict进一加工
- 5、data_dict的image元素添加
- 6、返回结果
- 三、图像处理
- 1、获取加工函数与路径
- 2、读取图片
- 3、图像pad数字
- 4、图像pad填充
- 1、图像pad方法
- 2、图像pad示意图
- 5、图像加工成模型输入格式
- 1、图像加工主函数
- 2、图像rescale处理
- 3、图像normal处理
- 4、更换通道
- 四、对话文本处理
- 1、文本加工主函数
- 2、preprocess文本处理函数
- 3、返回结果
- 五、对话文本处理(preprocess_v1)
- 1、preprocesss_v1函数调用与参数
- 2、preprocesss_v1完整源码
- 3、角色获取
- 3、对话数据获取(conversations)
- 4、获得input_ids
- 1、tokenizer_image_token调用源码
- 2、tokenizer_image_token完整源码
- 3、通过<image>切分文本
- 4、构建新input_ids
- 5、数据格式转换
- 6、返回结果
- 5、获得 targets
- 1、完整源码
- 2、targets初始化赋值
- 3、循环体源码-for conversation, target in zip(conversations, targets)
- 1、源码注释解读
- 2、变量结果说明
- 6、preprocess_v1返回结果
- 六、dataloader(DataCollatorForSupervisedDataset)
- 1、input_ids与labels的pad
- 2、attention_mask获取
前言
本篇文章直接介绍llava模型数据加工部分,整体结构说明llava多模态模型输入数据格式,其中包含input_ids/labels/attention_mask与image格式,并给出对应代码位置与整个数据加工流程。最重要,通过debug给出数据解释与代码解读,也通过一个真实数据给出模型输入格式说明。当你阅读完此篇文章,绝对透彻理解llava数据加工过程与内容。上一篇文章给出了数据处理大轮廓,本篇文章将解读LazySupervisedDataset类的__getitem__函数内容。
一、数据格式标签
在后面解读模型前,我先给出llava数据格式标签,以便更好理解后面源码解读,其数据格式如下:
[
{"id": "000000319154","image": "coco/train2017/000000319154.jpg",