再谈Fisher Vector

2024-08-28 19:58
文章标签 vector 再谈 fisher

本文主要是介绍再谈Fisher Vector,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:http://bucktoothsir.github.io/blog/2014/11/24/9-th/


Fisher Vector(1)

高斯混合模型中,我提到了特征处理的一般流程:

Alt text

事实上高斯混合模型完成的是k-means的任务,那么通过高斯混合模型聚类后,也用一般的基于距离的方法进行feature encoding么?不是的,高斯混合模型通常和Fisher Vector一起使用(而Kmeans一般与Bag of Words一起使用,BOW模型一般也是上述流程框图)。现在就来对Fisher Vector做个简单介绍。

Kernel Trick

要理解Fisher Vector, 也要先了解下Kernel。知乎上关于Kernel的问题我比较赞同第三个答案。Kernel不是一种神秘的东西,只是一种计算的trick。 在CV界中亘古不变的主题分类中,假设要训练一个 (1,1) 的二分类器,则当有一个新样本的时候,则其属于一类 y 的概率为:


可以看出这是一个判别模型,利用logistic function对其建模(为什么使用logistic function可以参考Andrew Ng的机器学习讲义):


我们的目标是找到最好的θ(θ是向量),如果样本很多的话,可以通过最大似然估计找到一组最佳的θ^来达到最好的分类效果。但是在样本较少的情况下,可假设θ的先验概率分布服从均值0的高斯分布,即θ~N(0,ξ),ξ可通过统计样本得到,那么有


利用最大后验概率来估计,假设一共有N个样本xi(i=1,2,3,…,N),且相互独立,则



对lθ两边取ln对数,则:


对θ求导:


L(θ)θ=0 ,有


求解过程如下:



将结果带入 P(y|x;θ),最终得到:

令K(xi,x)=xTiξx为核函数,该核函数为线性核。


Fisher Vector(2)


Fisher Vector(1) 中介绍了线性核,为了满足不同的需求,实际应用中会使用多种多样的核函数,Fisher Kernel就是其中的一种。  # Fisher Kernel 







这篇关于再谈Fisher Vector的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115735

相关文章

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

C++提高编程三(vector容器、deque容器)

文章目录 vector容器vector赋值操作vector容量和大小vector插入和删除vector数据存取vector互换容器vector预留空间deque容器构造函数deque赋值操作deque大小操作deque 插入和删除deque 数据存取deque 排序 vector容器 vector容器数据结构和数组相似,也称为单端数组。区别在于数组是静态空间,vector可以

STL-vector

string中拷贝构造的现代写法 string(const string& s):_str(nullptr){string tmp(s);swap(_str,tmp._str);} //s1=s3string& operator=(string s){swap(_str,s._str);return *this;} s(由s3调拷贝构造而来)是一个临时对象出了作用域要调析构函数。

容器第二课,List,ArrayList,LinkedList,Vector用法详解

package com.pkushutong.Collection;import java.util.ArrayList;import java.util.Date;import java.util.List;public class Test01 {public static void main(String[] args) {List list = new ArrayList<>();/*

Error: label vector and instance matrix must be double的解决方法

在使用uci下载的数据时,建模时出现这个错误的解决方法 首先现在UCI上面下载数据 然后右键另存为就行了。这样我们就从UCI里面下载到了训练数据 在matlab 点 导入数据,数据类型要记得选第二个, 如果选择最后一个table就会出现这个问题 最后附上代码 %%之前先import wine.date IMPORTED DATA 设为Numeric Matrix (数值矩

【C++】C++ STL探索:Vector使用与背后底层逻辑

C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C++内存管理模板初阶String使用String模拟实现 在string类文章中提及了STL容器间的接口是大差不差的,本篇将直接通过模拟实现Vector来讲解底层实现与使用。 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔

【C++】vector的简单模拟实现

目录 一、vector的基本实现机制: 二、vector的部分接口模拟实现: 1、构造与析构: 1、普通构造: 2、拷贝构造: 3、析构函数: 2、关于扩容: 1、reserve: 2、resize 3、增删查改: 1、在pos位置插入: 2、[]符号访问修改: 3、删除pos位置的值: 4、重载=运算符: 一、vector的基本实现机制: 如上所

再谈协议--定制协议

目录 1 协议 2 自定义协议 3 常用的序列化和反序列化方法 1 协议 协议是一种约定,这是我们前面的理解。 在我们之前使用 socket 进行 udp或者tcp通信时,我们默认都是按照字符串或者说字节流的方式来发送和读取的,可是如果我们要传输一些结构化的数据,该怎么办呢? 就比如我们使用qq进行聊天,可能我们发送一条消息,实际上发送到网络中的不止这条消息本身,还有

STL—Vector详解

1.vector的介绍和使用  vector实际上是一个类模板,allocator (对象分配的元素的类型) 是第二个模板参数。 2.vector的使用 (1) vector的定义 int TestVector1(){// constructors used in the same order as described above:vector<int> first;

新手小白都能一步到位的vector

目录 前言 1.vector的介绍 2.vector的部分使用 2.1(constructor)构造函数声明 2.2vector的遍历(与string是相似的)  2.3 vector容量空间  2.4vector的增删查改 3.vector的嵌套 结束语 前言 前面我们学习C++的string部分,其中的接口,函数都很多,vector相较与string的学习就会