Skip to content

JY-Ou/florence2-lora

Repository files navigation

使用LoRA微调多模态Florence2模型

实现对布匹瑕疵进行检测

纺织布匹瑕疵

从真实布匹厂采集数据:

布匹瑕疵

  1. 工厂生产过程中会出现断针,从而导致布匹表面出现各种瑕疵
  2. 将瑕疵分为wrinkle,drop,broken三类

这里布匹数据由于私有原因,只放出几张图片

模型架构

  • 模型以图像和文本prompt作为输入,最后输出文本格式。
  • 利用DaViT视觉编码器将图像转换为token embeddings,与由BERT生成的文本embeddings进行拼接,最后通过模态编码解码器进行处理,以生成响应结果
  • Florence-2系列包含两个模型:Florence-2-base和Florence-2-large,分别拥有0.23亿和0.77亿个参数。

数据处理

  1. 使用Labellmg标注布匹瑕疵
  2. 将标注格式转换为Floren2接受的格式
将标注数据先归一化(通过除以图像分辨率,将值缩放为0到1之间的浮点数),然后乘以1000并四舍五入为整数。
最终,x1, y1, x2, y2的值是在0到999的闭区间内的整数。

具体格式:
{"prefix":"<OD>","suffix":"drop<loc_732><loc_481><loc_748><loc_501>","image":"0 (1).jpg"}
{"prefix":"<OD>","suffix":"drop<loc_252><loc_481><loc_268><loc_501>drop<loc_667><loc_464><loc_682><loc_481>","image":"flipped_0 (1).jpg"}

`<OD>`为任务类型的特俗Token,`drop`为瑕疵类型,<loc_732><loc_481><loc_748><loc_501>为对应坐标

  1. 标注数据中选择对应的特殊token标注,如<OD>为目标检查任务,<DENSE_REGION_CAPTION>为区域caption生成任务

使用LoRA微调

Florence2应用Lora可以使用在q_proj, out_proj, k_proj, v_proj, linear, Conv2d, lm_head, fc2, fc1 这些层中,一般选择应用在q_proj, k_proj, v_proj。但具体应用哪些层需要逐步去实验,以达到最佳效果。这里训练选择q_proj, k_proj, v_projlm_head, fc2, fc1

训练时实验发现:

  • 在多次实验中,发现一般alphar的两倍会达到比较好的效果,r控制LoRA矩阵的大小,alpha控制LoRA的应用程度

  • 微调时设置r为 8、16、32、256,r越大,参数矩阵越大,训练越慢,但模型损失却没有明显下降

  • 训练时可以选择只训练文本编码器,冻结视觉编码器,但多次实验发现将文本编码器和视觉编码器一起训练效果会比冻结的好

  • 训练数据的构成顺序也有关系,由于训练数据里包含ODDENSE_REGION_CAPTIONCAPTION_TO_PHRASE_GROUNDING,这三种数据的混合顺序对损失也有影响,相同设置下,训练顺序为ODDENSE_REGION_CAPTIONCAPTION_TO_PHRASE_GROUNDING会有较到损失

  • 训练收敛速度快,3-4回合就收敛

实验结果

实验设置 单卡3090、epoch=10、r=8、alpha=16、lr=1e-6、模型均无冻结、使用Florence-2-base

训练集:2672,,测试:540

在epoch=3是损失收敛

学习率过大时损失会发散 lr = 3e-6

lr = 5e-6

语义分割,输入broken-weft

输入图像or文本or图像+文本 输出 bbox or 文本
语义分割,输入broken-weft

输入图片做目标检测

输入图像生成caption

Caption:

fabric with wrinkle-weft. The fabric is laid out on a green cutting mat. There are various tools and materials scattered around thefabric. The image appears to be taken in a workshop or studio
目标检测测试结果

gradio界面

参考

How to Fine-tune Florence-2 for Object Detection Tasks

Improving LoRA: Implementing Weight-Decomposed Low-Rank Adaptation (DoRA) from Scratch

About

使用LoRA微调多模态Florence2模型

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages