CLIP 对比学习 源码理解快速学习

最快的学习方法,理清思路,找视频讲解,看源码逻辑:
CLIP 源码讲解 唐宇

输入: 图像-文本成对配对的数据
训练模型的过程(自己理解):

怎么做的?:利用数据内部特征,相似与不相似,学习到能够同时表示图像和文本的潜在特征(相当于把图像和文本在同一个潜在空间里进行特征学习和表示)

为什么能学到呢?:相当于我已知这个图像跟这个文本是配对的,是相似的,或者说这两个东西是一个意思,然后把这两个当成正样本,计算正样本的相似度要越大越好,即学习到的图像和文本的潜在特征表示进行运算后得到的相似度要越大越好,所以反向约束表示图像和文本的特征要能够彼此互通,图像的特征向量能够跟文本的特征向量在语义上能够互相认识彼此,从而认出彼此是相似的。

对比损失函数:
对比损失函数
si,i :正样本相似度
si,k:负样本相似度
优化方向:分母的负样本相似度越小越好,小到0可忽略不计,这时正样本上下抵消为1,log1=0,loss为0.
τ是一个神秘的参数,大部分论文都默认采用较小的值来进行自监督对比学习(例如0.05)

  • 对比损失是一个具备困难负样本自发现性质的损失函数,这一性质对于学习高质量的自监督表示是至关重要的。关注困难样本的作用是:对于那些已经远离的负样本,不需要让其继续远离,而主要聚焦在如何使没有远离的负样本远离,从而使得表示空间更均匀(Uniformity)
  • τ的作用是调节模型困难样本的关注程度:τ 越小,模型越关注于将那些与本样本最相似的负样本分开

累加是相当于i要跟多个非i的剩余负样本计算,比如有5-5的图像文本对,1-1为正样本,1跟2~5都为负样本,都要计算相似度,所以要累加。

模型能力(用训练好的模型进行推理):

  1. 给一个模型没见过的图像,和几个没见过的文本,能够判断图像跟哪个文本是更加配对的~ 具有泛化能力,相当于我模型已经能够编码图像和文本并且让图像和文本能够互相认识彼此。
  2. 给一个模型没见过的文本,和几个没见过的图像,能够判断文本跟哪个图像更加配对,同理。

对应CLIP源代码实现细节: (图略有些糊)

  1. 计算图像和文本的表示向量
    在这里插入图片描述

  2. 计算对比损失
    2.1. 计算相似度(具体有两种情况,但最终都是一样,计算图像和文本相似度)
    在这里插入图片描述
    在这里插入图片描述

    2.2 按照损失公式的运算计算对比损失(exp,log等操作)
    exp 运算
    在这里插入图片描述
    计算分子(正样本相似度), 需要用matrix_diag 标记区分
    在这里插入图片描述
    matrix_diag 对角矩阵(矩阵斜线上都为true(表示正样本),其余为false ,(表示负样本))
    在这里插入图片描述
    计算分母(负样本相似度)t.masked_fill(pos_mask,0) 把斜对角线上设置为0(正样本),其余设置为1
    在这里插入图片描述

最终计算contrastive loss,loss计算加上 -log在这里插入图片描述
取平均作为最终的loss
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# 为什么修改Font导致Location 变化

搜索引擎、各种人工智能,只有这个帮我解决了问题 然后我发现了这个 我就奇怪,一行行调试代码,最终发现设置Font,Location就变了,完全想不通

例如,用一个DatabaseRow类型表示一个数据库行(容器),用泛型Column<T>作为它的键

以下是一个简单的示例&#xff0c;演示如何使用泛型的Column<T>作为DatabaseRow的键&#xff0c;表示一个数据库行&#xff08;容器&#xff09;&#xff1a; // 列定义 class Column<T> {private String columnName;private T value;public Column(String column…

spring 笔记七 Spring JdbcTemplate

文章目录 Spring JdbcTemplateJdbcTemplate概述JdbcTemplate开发步骤Spring产生JdbcTemplate对象 Spring JdbcTemplate JdbcTemplate概述 它是spring框架中提供的一个对象&#xff0c;是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如&am…

【深度学习目标检测】七、基于深度学习的火灾烟雾识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…

【Docker】实战:nginx、redis

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ Nginx 拉取 Nginx 镜像nginx.conf启动 Nginx访问 Nginx 2️⃣ redis拉取 Redis 镜像启动 Redis 容器测试 Redis &#x1f4d6; 参考资料 &#x1f6eb; 导读 开发环境 版本号描述文章日期2023-12-15操作系统Win10 - 22H222621.2…

【离线】牛客小白月赛39 G

登录—专业IT笔试面试备考平台_牛客网 题意 思路 考虑离线Bit做法 这种离线Bit&#xff0c;一般都是去考虑二维数点就能写清楚了 确定好两维&#xff1a;x 轴是1 ~ n&#xff0c; y 轴是 k 的大小 然后去遍历值域&#xff0c;如果值域很大的话需要排序离散化&#xff0c;但…

metagpt学习实践

metagpt 官方库目录 一级目录 tree -L 1 -I "__pycache__" . ├── actions ├── _compat.py ├── config.py ├── const.py ├── document_store ├── environment.py ├── __init__.py ├── inspect_module.py ├── learn ├── llm.py ├── …

JVM类加载器的分类以及双亲委派机制

目录 前言 1. 类加载器的分类&#xff1a; 1.1 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;&#xff1a; 1.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;&#xff1a; 1.3 应用程序类加载器&#xff08;Application ClassLoader&#xff…

Linux第一个小程序——进度条

Linux第一个小程序——进度条 1. 前言2. 缓冲区概念3. \r && \n4. 进度条实现4.1 初级进度条4.2 升级进度条 1. 前言 在我们写这个小程序之前&#xff0c;我们要用到我们学的三个知识点 gcc的使用vim的使用make/makefile的使用 除此之外还需要一些其他的知识点&…

学习Django从零开始之三

搭建虚拟python环境 搭建开发环境有多种方式&#xff0c;其中包括本地直接安装Python的可执行文件&#xff0c;使用virtualenv&#xff0c;以及使用Anaconda和Miniconda等工具。这些工具在创建Python虚拟环境方面各有特点。具体不同之处感兴趣的同学可以自行查阅相关资料。 简…

IP代理如何影响网站的速度?代理ip服务器有哪些作用?

目录 前言 一、如何影响速度 二、代理服务器的作用 1. 隐藏真实IP地址 2. 绕过访问限制 3. 分布式访问 4. 数据缓存和加速 总结 前言 IP代理是一种通过在用户和目标网站之间引入代理服务器来访问目标网站的方式。代理服务器充当中间人&#xff0c;将用户的请求转发给目…

flyway快速入门基础教程

flyway快速入门 一、flyway是什么&#xff1f;二、flyway使用目的1. 使用原因&#xff1a;2. 举个例子&#xff1a; 三、flyway工作原理四、flyway使用约定和命名规则1. 数据库版本文件整体约定2. 数据库版本文件夹管理约定3. 数据库版本文件命名约定4. 禁止项 五、flyway配置和…

功能测试转向自动化测试 。10 年 心路历程——愿测试人不再迷茫

十年测试心路历程&#xff1a; 由于历史原因&#xff0c;大部分测试人员&#xff0c;最开始接触都是纯功能界面测试&#xff0c;随着工作年限&#xff0c;会接触到一些常用测试工具&#xff0c;比如抓包&#xff0c;数据库&#xff0c;linux 等。 我大学学的计算机专业&#…

Python自动化测试如何自动生成测试用例?

汽车软件开发自动化测试攻略 随着软件开发在造车行业中占有越来越重要的地位&#xff0c;敏捷开发的思想在造车领域中也逐渐地被重视起来&#xff0c;随之而来的是整车厂对自动化测试需求越来越强烈。本文结合北汇在自动化测试方面的丰富经验&#xff0c;简单介绍一下实施自动…

一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程

MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档&#xff0c;数据结…

【问题解决】Buildroot文件系统dropbear 上位机scp命令Permission denied, please try again.

前提&#xff1a; 上位机&#xff1a;Ubuntu虚拟机与开发板同局域网开发板&#xff1a;Buildroot文件系统&#xff0c;开启了dropbear&#xff0c;已经联网与虚拟机同局域网 liefyuanubuntu:~/tcp-test/tcp-c-client$ scp tcp_client root192.168.8.199:/opt root192.168.8.1…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR&#xff1a;ControlNet 使得我们能通过输入额外的条件图&#xff08;如 Canny 边缘、人体姿态、深度图等&#xff09;&#xff0c;对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

音频ncm格式转mp3格式

做个笔记&#xff0c;ncm格式转mp3格式 参考&#xff1a;传送门 import os import json import base64 import struct import logging import binascii from glob import glob from tqdm.auto import tqdm from textwrap import dedent from Crypto.Cipher import AES from mu…

【MySQL学习之基础篇】SQL

文章目录 1. SQL的通用语法2. SQL 分类3. 数据定义语言&#xff08;DDL&#xff09;3.1. 数据库操作3.2. 表操作3.2.1. 数据类型3.2.2. 表的创建和查询操作3.2.3. 应用案例3.2.3. 表的修改操作3.2.4. 表的删除操作 4. 数据操作语言(DML)4.1. 添加数据4.2. 修改数据4.3. 删除数据…

微信小程序ec-canvas(echarts)显示地图【以甘肃省为例】

文章目录 一、效果图二、实现1、下载echarts插件2、定制图形&#xff0c;生成 echarts.min.js 文件3、小程序中使用&#xff08;1&#xff09;下载甘肃地图&#xff08;2&#xff09;使用 参考文档《微信小程序使用echarts显示全国地图》《如何在微信小程序开发中使用echarts以…