/images/avatar.jpg

我的个人博客

hinge loss

参考 Hinge loss专用于二分类问题,标签值y=±1,预测值$\hat{y}\in R$。该二分类问题的目标函数的要求如下: 当$\hat{y}$大于等于+1或者小于等于-1时,都是分类器确定的分类结果,此时的损失函数loss为0;而当预测值$\hat{y}\in (-1,1)$时,分类器对分类结果不确定,loss不为0。显然,当时$\hat{y}=0$,loss达到最大值。 对于输出y=±1,当前$\hat{y}$的损失为**: $$ \mathcal{L}=max(0,1-y \cdot \hat{y}) $$ 上式是Hinge loss在二分类问题的的变体,可以看做双向Hinge loss。难以理解的话,可以先看单方向的hinge loss。以y=+1,为例。当y⩾1时,loss为0,否则loss线性增大。函数图像如下所示:

human parser

人体解析是指将在图像中捕获的人分割成多个语义上一致的区域,例如, 身体部位和衣物。作为一种细粒度的语义分割任务,它比仅是寻找人体轮廓的人物分割更具挑战性。 人体解析对于以人为中心的分析非常重要,并且具有许多工业上的应用,例如,虚拟现实,视频监控和人类行为分析等等。

if __name__=='__main__'的理解

直观理解: 对于当前运行的程序one.py而言,name 变量的值是”main"。 如果two.py调用了one.py,即import one,那么对one.py而言__name__变量的值是”one",对于two.py而言__name__变量的值是”main"。 背后原因: 有时我们写了可以直接被执行的模块(.py文件),但是在另一个程序中调用它时,我们其实只是想用一用里面写好的函数,而不是全都执行一遍。那么我们就可以把执行的部分放到if name == ‘main’ 中进行判断。 如果if name == ‘main’ 为真,就说明我们是在直接执行这个模块,那么所有的操作都要运行一遍;但如果为假,就说明我们是引用了这个模块,只有在需要用到它的函数时,才会被调用执行。 1 2 3 4 5 6 7 8 9 定义一个py文件:one.py def func(): print("func() in one.py") #此时"__name__"等于“__main_-” if __name__ == "__main__": print("one.py is being run directly") else: print("one.py is being imported into another module") 1 2 运行one.py的结果如下: one.py is being run directly 1 2 3 4 5 6 7 8 9 10 11 12 13 定义一个py文件:two.

Java基础

Java简介 Java将源代码编译成一种“字节码”,虚拟机(JVM)负责加载字节码并执行。 名词解释 JDK:Java Development Kit JRE:Java Runtime Environment 简单地说,JRE就是运行Java字节码的虚拟机。但是,如果只有Java源码,要编译成Java字节码,就需要JDK,因为JDK除了包含JRE,还提供了编译器、调试器等开发工具。 在JDK的bin目录下可以找到很多可执行文件: javac : 这是java的编译器,它用于把java源文件(以.java后缀结尾)编译成java字节码文件(以.class后缀结尾); java : 这其实就是虚拟机(JVM),负责执行java字节码。 第一个java程序 1 2 3 4 5 public class Hello{ public static mean(String[] args){ System.out.println("hello,world!"); } } 在java程序中 1 2 3 public class Hello{ ... } 为类的定义,Hello为类名,public表示这个类是公开的。 在类中定义了方法: 1 2 3 public static mean(String[] args){ ... } 方法是可执行代码块,mean为方法名,用()括起来的是方法参数,这里的参数类型为String[],参数名为args,public,static用来修饰方法,表明该方法为公开静态方法,void为方法的返回类型,{}中间为方法的代码,这才是真正执行的代码,必须以;结尾。 把代码保存为文件时,文件名必须和类名Hello一样,为Hello.java。 如何运行Java程序 注意javac是编译器,java是虚拟机

KL散度

参考 KL散度用来做什么? KL散度的用途:比较两个概率分布的接近程度。 在统计应用中,我们经常需要用一个简单的,近似的概率分布f∗ 来描述一个复杂的概率分布f。这个时候,我们需要一个量来衡量我们选择的近似分布 f∗相比原分布f究竟损失了多少信息量,这就是KL散度起作用的地方。 熵 为了更好的理解KL散度,在这里首先抛出熵的概念。在信息论这门学科中,一个很重要的目标就是量化描述数据中含有多少信息。 为此,提出了熵的概念,记作H,一个概率分布所对应的熵表达如下: $$ H= −\sum_{i=1}^N=p(x_i)⋅\log (p(x_i)) $$ 果我们使用 log⁡2 作为底,熵可以被理解为:我们编码所有信息所需要的最小位数。 需要注意的是:通过计算熵,我们可以知道信息编码需要的最小位数,却不能确定最佳的数据压缩策略。怎样选择最优数据压缩策略,使得数据存储位数与熵计算的位数相同,达到最优压缩,是另一个庞大的课题。 KL散度的计算 现在,我们能够量化数据中的信息量了,就可以来衡量近似分布带来的信息损失了。KL散度的计算公式其实是熵计算公式的简单变形,在原有概率分布 p 上,加入我们的近似概率分布 q,计算他们的每个取值对应对数的差: $$ D_{KL}(p||q)= ∑_{i=1}^Np(x_i)⋅(log(p(x_i))−log(q(x_i)))\ =∑_{i=1}^Np(x_i)⋅log \frac{p(x_i)}{q(x_i)} $$ 换句话说,KL散度计算的就是数据的原分布与近似分布的概率的对数差的期望值。 在对数以2为底时,log2 ,可以理解为“我们损失了多少位的信息” KL散度的连续定义: $$ D_{KL}(p||q)=\int p(x)⋅log \frac{p(x)}{q(x)}dx $$

MISC: Multi-condition Injection and Spatially-adaptive Compositing for Conditional Person Image Synthesis

该文章实现了不同背景下多条件人物图像生成。 该文提出了一个概念:图像生成(image generation)和图像合成(image compositing) Introduction 条件人物图像生成可以分为两个阶段: conditional generation phase : 在几何条件的基础上,生成人物的细粒度纹理 adaptive compositing phase : 根据不同的背景调整生成人物的色调,使得生成的人物能够和背景更加的融合。 对于conditional generation phase,以三个条件作为输入:geometry、pattern(灰度纹理)和color,对应到具体的输入为parsing mask、Gaussian noise以及multi-valued color attributes。其中patteern 和 color是抽象的并且与geometry相关。因此条件人物图像生成可以视为抽象条件的视觉具体化。 另一方面,adaptive compositing phase 需要将生成的人物图像更好的与背景相融合。 ​ MISC包含两个模块: conditional person generation model spatially-adaptive image composition model 其中conditional person generation model : 对于pattern condition ,将它视为Gaussian noise,引入一个条件归一化层:GAIN,通过Gaussian 来调剂激活值。 对于color condition,使用bipartite network project method 来讲attribute 映射到人物相应的几何位置上,并使用预训练的cross-modality similarity model 来增强attribute embedding的语义意义。 而对于spatially-adaptive image composition model: