umich cv-2-1
UMICH CV Linear Classifiers
对于使用线性分类器来进行图片分类,我们可以给出这样的参数化方法:

而对于这样一个式子,我们怎么去理解呢?
首先从代数的角度,这个f(x,W)就是一张图片的得分,我们可以将一张图片所有的像素点输入,乘以一个权重矩阵,再加上一个偏置项b,就得到f(x,W)
举个具体的例子:

上面权重矩阵有三行分别对应三种类别,有四列每列对应着一个像素点的权重,最终得到的结果也是一个三行的矩阵,每一行对应着该图片在每个类别上面的得分
下面这张图应该会更加直观:

对于f(x,W)=Wx + b这个式子,我们也可以选择把偏置项合并,呈现下面这个形式:

其次我们从可视化的角度来看,线性分类器实质上是为每个分类创建了一个模板,我们将一个图片输入线性分类器实质上就是寻求与模板的匹配:

最后从几何的角度来看,线性分类器实际上在划分空间,判断输入的图片应该属于哪个分类的空间:

而针对线性分类器存在的问题,我们也可以从以上三个方面来认识:
首先从代数方面,线性分类器意味着我们得到的关系是线性的,我们的权重矩阵减半,相应的分数也会减半,这就很难去包含一些复杂的图形关系,导致分类效果不好
其次从可视化方面,从前面那张图我们可以看到线性分类器得到的仅仅是每类简单的模板,很难去捕捉到数据复杂的特征,上图中马对应的分类甚至有两个头
最后是几何方面,有时候对于线性分类器来说分隔平面是一件无法完成的事,比如说著名的XOR问题等等:


显然对于上面的区域,我们很难训练线性分类器让它来找到划分平面的方法
在大致了解了线性分类器的工作原理之后,我们面临的问题是如何去判断并找出对于分类问题来说最好的权重矩阵
为了做到上面两点,我们需要引入损失函数的概念:

我们通过损失函数来判断权重矩阵的好坏,具体来说,损失函数是在计算我们模型得到的得分与正确分类得分的差距
一个常见的损失函数是SVM loss:


具体来说,上面这个图我们计算了猫这张图片在三个分类上的得分分别是3.2,5.1,-1.7,其中在cat类上的得分3.2是正确分类的得分,所有我们计算其它两个类与该类得分的差距,注意这里还要加上一个1,表示margin,大致的意思就是我们对权重矩阵的要求比较高,正确分类的得分不仅要比其它所有分类高,还要高出一定的分数

在上图中,使用不同的权重矩阵得到了一样的loss值,那么我们怎么去判断哪个权重才是更好的呢?
这里引入了正则化的概念,用于表达对某种权重矩阵的preference,同时也能防止模型的过拟合(一般来说正则化都会选择更简单的模型):


具体来说,比如我们选择L2正则化,现在有w1与w2两个权重矩阵,它们计算的得分一致,但是显然w1正则化的数值比w2要大,所以w2优于w1,L2正则化函数显然倾向于分布比较均匀的权重矩阵,它是将每个权重的平方和累和
另一种常见的损失是交叉熵损失:


这里具体的解释与推导需要用到一些信息论的知识,我这方面也不是很了解,留个坑以后懂了再填吧,感兴趣的同学可以自行搜索,这里的计算过程就和上面这张图一样,先取e的指数然后归一化,再取负对数,这里值得注意的是对数的底数一般都取e,所以最后的损失函数还可以化简一下,在assignment2中的交叉熵损失的实现就是拆分之后的。
umich cv-2-1的更多相关文章
- 关于国内外CV领域牛人的博客链接 .
此文为转载文章,尊重知识产权http://blog.csdn.net/carson2005/article/details/6601109此为原文链接,感谢作者! 以下链接是关于计算机视觉(Compu ...
- 计算机视觉(ComputerVision, CV)相关领域的站点链接
关于计算机视觉(ComputerVision, CV)相关领域的站点链接,当中有CV牛人的主页.CV研究小组的主页,CV领域的paper,代码.CV领域的最新动态.国内的应用情况等等. (1)goog ...
- 几个常用的CV知识点
刚结束一段实习,图像算法工程师.总结一下图像算法的几个基本的操作,图像操作算子各式各样,各显神通,光是滤波filter这一个专题就可以有很多的技巧和功能. 我从做过的两个小项目入手, 简单介绍一下该项 ...
- 基于Emgu CV的人脸检测代码
这个提供的代码例子是Emgu CV提供的源码里面自带的例子,很好用,基本不需要改,代码做的是人脸检测不是人脸识别,这个要分清楚.再就是新版本的Emgu CV可能会遇到系统32位和64位处理方式有区别的 ...
- 自己积累的一些Emgu CV代码(主要有图片格式转换,图片裁剪,图片翻转,图片旋转和图片平移等功能)
using System; using System.Drawing; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; na ...
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划 ...
- Emgu.CV 播放视频
using Emgu.CV; using System; using System.Drawing; using System.Threading; using System.Windows.Form ...
- Emgu.CV/opencv 绘图 线面文字包括中文
绘图很简单 Emgu.CV.Image<Bgr, Byte> image; 使用image.Draw可以画各种图形和文字包括英文及数字,不支持中文 CircleF circle = ...
- yuv420p转为emgucv的图像格式Emgu.CV.Image<Bgr, Byte>
GCHandle handle = GCHandle.Alloc(yuvs, GCHandleType.Pinned); Emgu.CV.Image<Bgr, Byte> image = ...
- "Emgu.CV.CvInvoke”的类型初始值设定项引发异常 解决办法
系统win7 32位,只在这一台电脑上出现这种问题,已知VS编译是X86,在数台电脑上测试都正常. 后来把opencv的dll路径例如 E:\...\x86 加入到系统环境变量中就正常了. emgu ...
随机推荐
- DLang 与 C 语言交互
DLang 与 C 语言交互 很难受的是,这部分的文档太少了,根本没有 教程向 的文章.所以我写了此文以做分享. 本文原址链接(防止机器搬运):https://www.cnblogs.com/jeef ...
- Maven进阶学习指南
前言 当我们在开发项目时,有时需要用到外部依赖组件,例如当我们需要Json序列化的时候需要用到FastJson组件,我们可以通过下载对应jar包加载到项目中.但当一个大的项目同时需要依赖各种各样的外部 ...
- UE5打包SDK未正确安装的问题
正文 Windows(笔者之前用的电脑是windows10,最新电脑使用的是windows11)下UE5打包项目的需要安装Visual Studio. 而且安装的时候需要选择上C++ 游戏开发相关模块 ...
- Python 潮流周刊第 11 期(2023-07-15)
查看全文:Python潮流周刊#11:如何使用 Golang 运行 Python 代码? 文章&教程 1.使用 Golang 和 Docker 运行 Python 代码 2.答案在代码中:&q ...
- C#选择排序(Selection Sort)算法
选择排序原理介绍 选择排序(Selection Sort)是一种简单的排序算法,其实现原理如下: 遍历待排序数组,从第一个元素开始. 假设当前遍历的元素为最小值,将其索引保存为最小值索引(minInd ...
- 2021-11-29 Wpf的ViewModel和xaml绑定
ViewModel代码 public class MainViewModel { MainWindow _mainWindow; public MainViewModel(MainWindow mai ...
- 查看UUID
查看硬盘UUID: 1. ls -l /dev/disk/by-uuid 2. blkid /dev/sda5 修改硬盘UUID: 1.新建和改变分区的UUID sudo uuidgen | xarg ...
- Oracle11gR2单实例的安装与部署
1 安装目标与规划 交易系统1台HP DL580 G9服务器将安装Oracle11gR2 . 1.1 安装介质版本 主机名 his1 IP地址 192.168.40.102(非生产环境ip) O ...
- Unity的BuildPlayerProcessor:深入解析与实用案例
Unity BuildPlayerProcessor Unity BuildPlayerProcessor是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目时自动执行一些操作.这个功能可 ...
- MySQL配置简单优化与读写测试
测试方法 先使用sysbench对默认配置的MySQL单节点进行压测,单表数据量为100万,数据库总数据量为2000万,每次压测300秒. sysbench --db-driver=mysql --t ...