开源之夏:MegEngine 补充跨模态模型的实现——CLIP
目前完成了CLIP各个模型的前向对齐,绝对误差控制在1e-6内,精度在ImageNetV2 matched-frequency上与官方实现的精度对比,其中官方实现使用PIL前处理,本实现使用opencv,有小幅涨点
| 模型 | text误差 | image误差 | top-1 acc | top-5 acc |
|---|---|---|---|---|
| RN50 | 3.25e-07 | 4.88e-08 | 53.50%(52.9) | 81.65%(81.41) |
| RN101 | 2.82e-07 | 7.70e-08 | ||
| RN50x4 | 3.34e-07 | 1.21e-07 | ||
| RN50x16 | 4.94e-07 | 1.47e-07 | ||
| RN50x64 | 6.12e-07 | 9.17e-07 | ||
| ViT-B/32 | 3.09e-07 | 3.56e-07 | 56.62% (55.96 ) | 83.62% (83.41) |
| ViT-B/16 | 3.11e-07 | 3.06e-07 | ||
| ViT-L/14 | 5.04e-07 | 7.15e-07 | ||
| ViT-L/14@336px | 4.32e-07 | 6.98e-07 |
float16下精度对比:
| 模型 | top-1 acc | top-5 acc |
|---|---|---|
| RN50 | 53.54(52.91) | 81.65(81.42) |
| ViT-B/32 | 56.61 (55.89) | 83.63 (83.46) |
转换后的模型已全部上传谷歌云盘,有劳上传到megengine的网站上。
进展:
- [x] MultiheadAttention编写
- [x] MultiheadAttention对齐
- [x] CLIP编写
- [x] CLIP float32对齐
- [x] CLIP float16对齐
- [x] CLIP预训练权重转换
- [x] 推理结果
- [x] 文档
测试发现float16下conv与linear与torch有较大的误差,测试代码
Amazing Work.
精度在ImageNetV2上与官方实现约有4%的掉点(主要误差可能集中在图像处理部分,本实现采用opencv中的双三次插值,官方实现使用PIL,经过测试输入约有1e-2级别的误差)
这个掉点有点多,感觉只是差值方式应该没这么大差异,想确认一下图像 RGB channel 顺序是否有问题?(PIL 是 RGB,opencv 是 BGR)
这个掉点有点多,感觉只是差值方式应该没这么大差异,想确认一下图像 RGB channel 顺序是否有问题?(PIL 是 RGB,opencv 是 BGR)
检查了一下,是转换了的
这里的4%计算方式是差值除以原始值,并不是下降了4%,RN50,top-1 acc下降了2.43,top 5 acc 下降了1.71
晚点我测试下使用PIL的精度
这个掉点有点多,感觉只是差值方式应该没这么大差异,想确认一下图像 RGB channel 顺序是否有问题?(PIL 是 RGB,opencv 是 BGR)
检查了一下,是转换了的
这里的4%计算方式是差值除以原始值,并不是下降了4%,RN50,top-1 acc下降了2.43,top 5 acc 下降了1.71
晚点我测试下使用PIL的精度
尝试使用 np.testing.assert_allclose(y_torch, y_mge) 看看统计值吧
Multimodel 是不是应该叫 Multimodality 更合适?
@xxr3376 @MegChai Hi, 是否可以先进行review呢?
之前沟通过fp16的精度问题,求补充下目前的精度呗
之前沟通过fp16的精度问题,求补充下目前的精度呗
精度已经补充在描述里了,和float32差别不大
LGTM