🚀 CLIP-L微调模型
这是对CLIP-L的微调模型,原模型为 openai/clip-vit-large-patch14,该微调模型在ImageNet/ObjectNet上有着前所未有的约0.90的准确率(原预训练模型OpenAI的CLIP约为0.85)。
🚀 快速开始
集成到Huggingface Transformers / Diffusers管道
自2024年9月23日更新后,已实现Huggingface Transformers / Diffusers管道。示例脚本见:Integrating my CLIP-L with Flux.1。也可以像使用任何HF模型一样使用它:
from transformers import CLIPModel, CLIPProcessor, CLIPConfig
model_id = "zer0int/CLIP-GmP-ViT-L-14"
config = CLIPConfig.from_pretrained(model_id)
✨ 主要特性
- 高精度:在ImageNet/ObjectNet上有着约0.90的准确率,高于原预训练模型。
- 多版本可选:提供文本编码器仅.safetensors、完整模型.safetensors、状态字典pickle、完整模型pickle等四种版本。
- 新损失函数:使用带有标签平滑的自定义损失函数进行微调。
📦 安装指南
暂未提供具体安装步骤。
💻 使用示例
基础用法
from transformers import CLIPModel, CLIPProcessor, CLIPConfig
model_id = "zer0int/CLIP-GmP-ViT-L-14"
config = CLIPConfig.from_pretrained(model_id)
📚 详细文档
模型版本选择
如果你正在寻找用于Flux.1(或SD3、SDXL、SD等)的文本编码器来替代CLIP-L,一般建议选择“仅TE”的.safetensors文件:
- “TEXT”模型:具有卓越的提示跟随能力,尤其适用于文本,对其他细节也有很好的处理效果。下载
- “SMOOTH”模型:在图像中没有文本时,有时能呈现更好的细节。下载
- “GmP”初始微调模型:已弃用,效果不如上述模型,但仍可下载。
模型性能
- 模态差距:“TEXT”模型的模态差距为0.80(OpenAI预训练模型为0.82),通过高温0.1训练和调整实现。
- 准确率:“SMOOTH”和“TEXT”模型在ImageNet/ObjectNet上的准确率约为0.91(预训练模型约为0.84)。
微调方法
2024年8月11日更新,新增表现最佳的CLIP ViT-L/14 'GmP-smooth'模型,可直接下载名为 BEST 的文件。也可以自行微调:
- 几何参数化(GmP)
- 对“副词神经元”进行激活值操作
- 新增:带有标签平滑的自定义损失函数
详细细节见 GitHub。
模型结构
"Normal" CLIP MLP (multi-layer perceptron):
(mlp): Sequential(
|-(c_fc): Linear(in_features=1024, out_features=4096, bias=True)
| (gelu): QuickGELU()
|-}-(c_proj): Linear(in_features=4096, out_features=1024, bias=True)
| |
| |-- visual.transformer.resblocks.0.mlp.c_fc.weight
| |-- visual.transformer.resblocks.0.mlp.c_fc.bias
|
|---- visual.transformer.resblocks.0.mlp.c_proj.weight
|---- visual.transformer.resblocks.0.mlp.c_proj.bias
GmP CLIP MLP:
Weight decomposition into:
- radial component 'r' as norm of pre-trained weights
- angular component 'theta' as normalized direction
-> preserves weight vectors' directionality and magnitude
(mlp): Sequential(
|-(c_fc): GeometricLinear()
| (gelu): QuickGELU()
|-}-(c_proj): GeometricLinear()
| |
| |-- visual.transformer.resblocks.0.mlp.c_fc.r
| |-- visual.transformer.resblocks.0.mlp.c_fc.theta
| |-- visual.transformer.resblocks.0.mlp.c_fc.bias
|
|---- visual.transformer.resblocks.0.mlp.c_proj.r
|---- visual.transformer.resblocks.0.mlp.c_proj.theta
|---- visual.transformer.resblocks.0.mlp.c_proj.bias
(Same thing for [text] transformer.resblocks)
🔧 技术细节
本微调模型使用几何参数化(GmP)方法,将权重分解为径向分量'r'(预训练权重的范数)和角向分量'theta'(归一化方向),从而保留权重向量的方向性和大小。通过这种方法以及对“副词神经元”的激活值操作和带有标签平滑的自定义损失函数,实现了在ImageNet/ObjectNet上的高精度。
📄 许可证
本项目基于MIT许可证,原预训练CLIP模型由OpenAI提供,许可证为 MIT License。
⚠️ 重要提示
关于训练和评估的详细信息,请见 https://github.com/zer0int/CLIP-fine-tune。你可以使用 "exp-acts-ft-finetune-OpenAI-CLIP-ViT-L-14-GmP-manipulate-neurons.py" 来复现我的精确模型微调。
💡 使用建议
如果你喜欢这个CLIP模型,在条件允许的情况下可以支持一下。除了数据,CLIP的训练还需要大量的时间和昂贵的电力。感谢支持!如果你想自己微调模型,所有微调代码和更多内容都在 GitHub 上。