精华内容
下载资源
问答
  • alpha
    千次阅读
    2021-08-03 16:55:55

    什么是Alpha通道

    阿尔法通道(α Channel或Alpha Channel)是指一张图片的透明和半透明度。

    例如:一个使用每个像素16比特存储的位图,对于图形中的每一个像素而言,可能以5个比特表示红色,5个比特表示绿色,5个比特表示蓝色,最后一个比特是阿尔法。在这种情况下,它要么表示透明要么不是,因为阿尔法比特只有0或1两种不同表示的可能性。

    又如一个使用32个比特存储的位图,每8个比特表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度,因为阿尔法通道有8个比特可以有256种不同的数据表示可能性。

    在图像处理中alpha到底是什么

    Alpha通道是计算机图形学中的术语,指的是特别的通道,意思是“非彩色”通道,主要是用来保存选区和编辑选区。

    为什么用Alpha表示透明度

    Alpha 没有透明度的意思,是透明度的属性。opacity 和 transparency 才和透明度有关,前者是不透明度,后者是透明度。比如 css 中的「opacity: 0.5」就是设定元素有 50% 的不透明度。后来 Alvy Ray Smith 提出每个像素再增加一个 Alpha 通道,取值为0到1,用来储存这个像素是否对图片有「贡献」,0代表透明、1代表不透明。也就是说,「Alpha 通道」储存一个值,其外在表现是「透明度」,Alpha 和透明度本身没啥关系。

    通道

    通道作为图像的组成部分,是与图像的格式密不可分的,图像颜色,格式的不同决定了通道的数量和模式,在通道面板中可以直观的看到。通道的不同,自然我们给它们的命名就不同。

    RGBA

    RGBA是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha的色彩空间。虽然它有的时候被描述为一个颜色空间,但是它其实仅仅是RGB模型的附加了额外的信息。采用的颜色是RGB,可以属于任何一种RGB颜色空间,但是Catmull和Smith在1971至1972年间提出了这个不可或缺的alpha数值,使得alpha渲染和alpha合成变得可能。提出者以alpha来命名是源于经典的线性插值方程αA + (1-α)B所用的就是这个希腊字母。(线性插值是数学、计算机图形学等领域广泛使用的一种简单插值方法)

    真正让图片变透明的不是Alpha 实际是Alpha所代表的数值和其他数值做了一次运算 。

    Alpha 通道用法

    Alpha 通道是为保存选择区域而专门设计的通道。在计算机图形学中,一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道。

    Alpha通道使用8位二进制数,就可以表示256级灰度,即256级的透明度。白色(值为255)的Alpha像素用以定义不透明的彩色像素,而黑色(值为0)的Alpha通道像素用以定义透明像素,介于黑白之间的灰度(值为30-255)的Alpha像素用以定义不同程度的半透明像素。因而通过一个32位总线的图形卡来显示带Alpha通道的图形,就可能呈现出透明或半透明的视觉效果。

    在生成一个图像文件时,并不必须产生 Alpha 通道。通常它是由人们在图像处理过程中人为生成,并从中读取选择区域信息的。因此在输出制版时, Alpha 通道会因为与最终生成的图像无关而被删除。但也有时,比如在三维软件最终渲染输出的时候,会附带生成一张 Alpha 通道,用以在平面处理软件中作后期合成。

    除了 photoshop 的文件格式 PSD 外, GIF 与 TIFF 格式的文件都可以保存 Alpha 通道。而 GIF 文件还可以用 Alpha 通道作图像的去背景处理。因此,我们可以利用 GIF 文件的这一特性制作任意形状的图形。

    一个透明或半透明图形的数学模型

    设Alpha值[0,255]区间映射为[0,1]区间相对应的值表示,即Alpha值为0—1之间的数值。则图形文件中各个像素点可表示为:

    Graphx(Redx,Greenx,Bulex,Alphax)
    

    屏幕上相应像素点的显示值就转换为:

    Dispx(Redx*Alphax,Greenx*Alphax,Bluex*Alphax)
    

    Alpha通道不仅用于单个图形的透明或半透明显示,更重要的是在图像合成中被广泛运用。

    Alpha通道数据进行图像混合的算法

    我们把需要组合的颜色计算出不含Alpha分量的原始RGB分量然后相加便可。如:两幅图像分别为A和B,由这两幅图像组合而成的图像称为C,则可用如下四元组表示图A和B,三元组表示图像C:

    A:(Ra,Ga,Ba,Alphaa)
    B:(Rb,Gb,Bb,Alphab)
    C:(Rc,Gc,Bc)
    

    根据上述算法,则:

    Rc=Ra*Alphaa+Rb*Alphab
    Gc=Ga*Alphaa+Gb*Alphab
    Bc=Ba*Alphaa+Bb*Alphab
    

    这就是两图像混合后的三原色分量。如果有多幅图像需要混合,则按照以上方法两幅两幅地进行混合。

    Alpha通道在多媒体开发中的应用

    1)图像处理软件Photoshop中的Alpha通道
    在图像处理软件Photoshop中,通道是一个最为基本的概念,颜色通道代表了该图像的主要色彩信息,附加通道有用于印刷的专色通道和存储、修改选取区域的Alpha通道。

    通常情况下,单独创建的新通道就是Alpha通道,这个通道并不存储图像的色彩,而是将选择域作为8位灰度图像存放并被加入到图像的颜色通道中。因而Alpha通道的内容代表的不是图像的颜色,而是选择区域,其中的白色表示完全选取区域,黑色为非选取区域,不同层次的灰度代表不同的选取百分率,最多可有256级灰阶。

    对Alpha通道内容的操作,即是创建、存储、修改我们所需要的选取区域。如在目标图层上载入该选区(即运用该Alpha通道)便可实现任意层次的选取。通过多个Alpha通道之间的计算或Alpha通道与图层的合成便能够产生许多特殊的效果。因此,Alpha通道功能可以说是Photoshop编辑合成多媒体作品中所使用的背景图片、主题图片、按钮、导航标志等素材的一大法宝。

    2)Alpha通道在动画创作软件中的应用
    Alpha通道无论是在二维动画软件还是三维动画软件中都有广泛的应用。

    大家熟知的3DMAX动画软件中提供了动画作品后期合成的工作环境(即VIDEO POST),利用VIDEO POST的图像合成功能可以实现一次处理许多不同层次的图像文件与动画场景合成的设定。其中使用最频繁的合成方式Alpha composing就是靠Alpha通道来实现的。

    3DMAX能根据文件的输出格式产生包含Alpha通道的32位文件格式(特别是32位的Targa图像文件)。当进行渲染时,任何不含物体的区域的Alpha值为0,实色的物体的Alpha值为255,而透明材质的Alpha值介于0~255间。利用3DMAX的这一特性可在该软件或其它软件中实现各种透明重叠的图像或动画效果。

    Flash矢量动画中同样具有Alpha通道功能的运用。Alpha是Flash动画场景中图形符号(graphic)的一个主要属性,改变其值(0~100之间)便可改变对象符号的透明程度。如在各关键帧设定某图形符号以不同的Alpha值,则该图形符号就呈现出动态变化的透明效果。通过编写动作脚本(Action scripting),用户交互式地改Alpha值,更能使动画作品生动有趣。

    3)利用Alpha通道在视频编辑软件中实现高叠轨道的透明合成
    在视频处理软件中,通常要将多个视频片段按照要求重叠在一起形成透明或半透明效果。Premiere电影编辑软件里提供了多达97个视频高叠轨道用以实现影像片段的合成。在高叠片段的video Option命令中有一个专门用于合成的透明设置选项Transparency,它提供了许多key Type基本(透明)类型。其中Alpha channel key就是利用影像或图片的Alpha通道在片段上选定区域形成透明效果。

    一些影视创作人员在节目编辑中,为了把广告的图标、报道题花等图案作为标记或栏目标题叠加在画面上,使用Photoshop、3DMAX或Cool3d等软件生成带Alpha通道的32位TGA图片或图片序列,在非编系统软件中运用Alpha channel key功能实现标题字幕或图标的高叠。

    Alpha通道技术本身并不复杂,但其运用上的创意是无限的。不断总结在多媒体课件作品开发中运用Alpha通道技术的途径以提高作品技术质量、增强作品艺术感染力,是一个永无止境的课题。

    opengl 里面,alpha值通常是在激活了混合操作之后起作用的。用来将已经处理过的片元颜色值与存储在帧缓存中的像素颜色值结合起来。如果不进行混合操作,每个新的片元都将被opengl当成是不透明的,覆盖掉已经存在的所有颜色值。利用混合操作可以实现半透明等状态。可以这样看alpha值,将片元的RGB分量考虑为对颜色的表示,而将alpha值分量考虑为颜色的不透明度。

    更多相关内容
  • 产生alpha稳定分布噪声的matlab程序
  • alphapose2onnx.py

    2021-02-24 16:39:30
    此代码用于将pytorch训练的AlphaPose模型转换为onnx模型,以便在openCV中调用。
  • alpha shapes提取点云边界特征(C++版本)基于PCL库写的alpha shapes算法,具体实现原理参考:https://blog.csdn.net/qq_36686437/article/details/115168516或者参考论文:[1]刘科. 平面点云边界提取算法研究[D].长沙...
  • DirectX编程:Alpha混合示例程序
  • ALPHA5 系列伺服的Loader 软件 ,支持:Alpha5 SX 总线,E-SX总线伺服的调试。Smart \Smart PLUS\RYU 多轴伺服的调试。
  • 在线流特征选择算法 alpha_investing 源码
  • alpha稳定分布样本产生,alpha稳定分布样本产生
  • 富士电机生产的FUJI ALPHA5 Smart Plus用户手册完整版
  • 易语言模块Tooltip272Alpha版.rar 易语言模块Tooltip272Alpha版.rar 易语言模块Tooltip272Alpha版.rar 易语言模块Tooltip272Alpha版.rar 易语言模块Tooltip272Alpha版.rar 易语言模块Tooltip272Alpha版.rar
  • alpha稳定分布产生非高斯的脉冲噪声序列,可用于alpha稳定分布的仿真,适合初学者
  • 超标处理器设计的不错参考 alpha , 处理器 , 结构 , 源代码 , 资料
  • 对脉冲噪声进行建模,模型为alpha噪声模型
  • alpha-go-ZERO原文

    2018-05-08 14:24:00
    alpha-go-ZERO原文alpha-go-ZERO原文alpha-go-ZERO原文alpha-go-ZERO原文alpha-go-ZERO原文
  • Alpha stable distribution code for MATLAB
  • 信号处理中,生成alpha稳定分布脉冲噪声的程序,可以用作阵列信号处理的噪声环境仿真。
  • VB.NET中的Alpha透明显示通道实例VB.NET in the Alpha channel transparency shows examples of
  • 上海交大刚刚开源的人体姿态估计alphapose源代码-pytorch版本
  • alpha的交叉编译器

    2013-09-14 21:54:33
    在x86的机器下跑alpha的程序,可以用该交叉编译器,把程序交叉编译成alpha的,我是在gem5的fullsystem下跑程序,需要用到交叉编译
  • Alpha Blend Toolbar Alpha Blend Toolbar
  • iOS之深入解析预乘透明度Premultiplied Alpha

    万次阅读 多人点赞 2021-10-18 15:32:35
    Premultiplied Alpha 的概念,做过游戏开发的应该都知道,Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied Alpha,Texture Packer 中也有Premultiplied Alpha 的选项。那么,...

    一、前言

    • Premultiplied Alpha 的概念,做过游戏开发的应该都知道,Xcode 的工程选项里有一项 Compress PNG Files,会对 PNG 进行 Premultiplied Alpha,Texture Packer 中也有Premultiplied Alpha 的选项。那么,Premultiplied Alpha 到底是什么呢?
    • Alpha Blending: To Pre or Not To Pre 一文中,详情地阐明了 Premultiplied Alpha 的相关解释,如果还需要深入理解的可以阅读《Real Time Rendering》这本书。

    二、Alpha Blending

    ① Alpha Blending 的原理

    • 在图形学中,Alpha 指的是除了颜色的三个分量(RGB)外的第四个分量:透明度。因此一个真彩色(指利用 RGB 分量合成颜色)的像素就变成由四个分量组成:R、G、B、A。我们这里讨论,设 R、G、B、A 均为从 0 到 1 的值,其中 Alpha = 0 为完全透明,Alpha = 1 为完全覆盖,中间的数值代表半透明,这样的设定是为了能使本文独立于显示硬件,我们把诸如(R,G,B,A)这样的东西称为四元组。一个这样的四元组代表一个由 RA、GA、B*A 组合而成的颜色。
    • 有一点重要的是,要清楚分辨如下两个关键像素的意义:
    	黑色 = (0,0,0,1)
    	完全透明 = (0,0,0,0
    • 那么,如何根据 Alpha 通道数据进行混合的算法呢?
      • 简单地,只需要把需要组合的颜色计算出不含 Alpha 分量的原始 RGB 分量然后相加便可,比如现在有两幅图象,分别称为图象 A 和图象 B,由这两幅图象组合而成的图象称为 C,则有如下的四元组:
    	A: (Ra,Ga,Ba,Alpha_a)
    	B: (Rb, Gb, Bb, Alpha_b)
    
      • 以及组合后的 RGB 三元组:
    C: (Rc, Gc, Bc)
    
      • 那么:
    Rc = Ra * Alpha_a + Rb * Alpha_b
    Gc = Ga * Alpha_a + Gb * Alpha_b
    Bc = Ba * Alpha_a + Bb * Alpha_b
    
      • 便可得出混合后的颜色。如果有多幅图像需要混合,则按照以上方法两幅两幅地进行混合。

    ② Alpha Blending 的混合公式

    • 最常见的像素表示格式是 RGBA8888 即 (r, g, b, a),每个通道 8 位,0255。例如红色 60% 透明度就是(255, 0, 0, 153),为了表示方便,Alpha 通道一般记成正规化后的 0~1 的浮点数,也就是(255, 0, 0, 0.6)。而 Premultiplied Alpha 则是把 RGB 通道乘以透明度也就是(r * a, g * a, b * a, a),50% 透明红色就变成了(153, 0, 0, 0.6)。
    • 透明通道在渲染的时候通过 Alpha Blending 产生作用,如果一个透明度为 as 的颜色 Cs 渲染到颜色 Cd 上,混合后的颜色通过以下公式计算:

    在这里插入图片描述

    • 以 60% 透明的红色渲染到白色背景为例:

    在这里插入图片描述

    • 也就是说,从视觉上(255, 0, 0, 0.6)渲染到白色背景上和(255, 102, 102)是同一个颜色。如果颜色以 Premultiplied Alpha 形式存储,也就是 Cs 已经乘以透明度了,所以混合公式变成:

    在这里插入图片描述

    三、为什么要 Premultiplied Alpha?

    • Premultiplied Alpha 后的像素格式变得不直观,因为在画图的时候都是先从调色板中选出一个 RGB 颜色,再单独设置透明度,如果 RGB 乘以透明度就搞不清楚原色是什么。
    • 从前面的 Alpha Blending 公式可以看出,Premultiplied Alpha 之后,混合的时候可以少一次乘法,这可以提高一些效率,但这并不是最主要的原因,最主要的原因是:没有 Premultiplied Alpha 的纹理无法进行 Texture Filtering(除非使用最近邻插值)。
    • 以最常见的 filtering 方式线性插值为例,一个宽 2px 高 1px 的图片,左边的像素是红色,右边是绿色 10% 透明度,如果把这个图片缩放到 1x1 的大小,那么缩放后 1 像素的颜色就是左右两个像素线性插值的结果,也就是把两个像素各个通道加起来除以2,如果使用没有 Premultiplied Alpha 的颜色进行插值,那么结果就是:
    ((255, 0, 0, 1) + (0, 255, 0, 0.1)) * 0.5 = (127, 127, 0, 0.55)
    
    • 如果绿色 Premultiplied Alpha,也就是(0, 255 * 0.1, 0, 0.1),和红色混合后:
    ((255, 0, 0, 1) + (0, 25, 0, 0.1)) * 0.5 = (127, 25, 0, 0.55)
    
    • Premultiplied Alpha 最重要的意义是使得带透明度图片纹理可以正常的进行线性插值,这样旋转、缩放或者非整数的纹理坐标才能正常显示,否则就会像上面的例子一样,在透明像素边缘附近产生奇怪的颜色。

    四、纹理处理

    • 使用的 PNG 图片纹理,一般是不会 Premultiplied Alpha 的。游戏引擎在载入 PNG 纹理后会手动处理,然后再 glTexImage2D 传给 GPU,比如 Cocos2D-x 中的 CCImage::premultipliedAlpha:
    void Image::premultipliedAlpha() {
        unsigned int* fourBytes = (unsigned int*)_data;
        for (int i = 0; i < _width * _height; i++) {
            unsigned char* p = _data + i * 4;
            fourBytes[i] = CC_RGB_PREMULTIPLY_ALPHA(p[0], p[1], p[2], p[3]);
        }  
        _hasPremultipliedAlpha = true;
    }
    
    • 而 GPU 专用的纹理格式,比如 PVR、ETC 一般在生成纹理都是默认 Premultiplied Alpha 的,这些格式一般是 GPU 硬解码,引擎用 CPU 处理会很慢。
    • 总之 glTexImage2D 传给 GPU 的纹理数据最好都是 Multiplied Alpha 的,要么在生成纹理时由纹理工具 Pre-multiplied,要么载入纹理后由游戏引擎或 UI 框架 Post-multiplied。

    五、iOS 中的 Premultiplied Alpha

    • Core Graphics 的 CGImage.h 对图像透明度信息有如下定义:
    typedef CF_ENUM(uint32_t, CGImageAlphaInfo) {
        // ...
        /* For example, premultiplied RGBA */
        kCGImageAlphaPremultipliedLast, 
        /* For example, premultiplied ARGB */ 
        kCGImageAlphaPremultipliedFirst, 
        // ...
    };
    
    • 预乘透明度(Premultiplied Alpha)图像简单地说,即每个颜色分量都乘以 alpha 通道值作为结果值:
    color.rgb *= color.alpha
    
    • 为什么关注预乘透明度图像?微信团队因 AR 抢红包场景的 OpenGL 混色结果出错引起注意:
    Premultiplied alpha is better than conventional blending for several reasons:
    
    It works properly when filtering alpha cutouts _(see below)_
    
    It works properly when doing image composition _(stay tuned for my next post)_
    
    It is a superset of both conventional and additive blending. If you set alpha to zero while RGB is non zero, you get an additive blend. This can be handy for particle systems that want to smoothly transition from additive glowing sparks to dark pieces of soot as the particles age.
    
    It plays nice with DXT compression, which only supports transparent pixels with an RGB of zero.
    

    六、理解 Premultiplied Alpha 的 Tips

    ① 理解 Alpha 混合

    • 最常见的混合是“over”混合,假设已经有一张 RenderTexture,RT 上像素的 RGB 称其为 RGBdst,Alpha 为 Adst 。现在有一个像素(RGBsrc,Asrc)要和 RT 上的像素混合,那正确的混合会这样进行:

    在这里插入图片描述
    在这里插入图片描述

    • 最终混合出来的颜色由两部组成:
      • Asrc * RGBsrc 代表 RGBsrc 对最终颜色的贡献,它受 Alpha 影响,如果 Alpha 为 0 则对最终像素没有影响,如果 Alpha 为 1 则贡献 100% 的 RGBsrc
      • Adst * RGBdst 是 RT 中像素原本没有其它像素覆盖时的贡献值,但是现在被一个新来的像素遮挡了,被遮挡了 (1 - Asrc),因此 RT 中像素最终贡献 (Adst * RGBdst)*(1 - Asrc)。
    • 由此可见,无论对于 src 还是 dst, A * RGB 才是实际的有效颜色,称其为 premultiplied alpha。令:

    在这里插入图片描述

    • 则颜色混合可以改写为:

    在这里插入图片描述

    • 这么看就更加清楚:
    最终的输出 = 新叠加像素的有效颜色 + RT 中原有像素的有效颜色 * 新像素的遮挡
    

    ② SrcAlpha,OneMinusSrcAlpha 颜色混合正确有前提

    • 在 Unity 中的透明混合,默认采用 SrcAlpha,OneMinusSrcAlpha 方式,用符号表示出来:

    在这里插入图片描述

    • 对比之前给出的计算:

    在这里插入图片描述

    • 加号右侧少乘 Adst ,这是为什么呢?因为 SrcAlpha, OneMinusSrcAlpha 正确的前提是混合目标是不透明的,即 Adst 为 1。
    • 平时渲染时,常见的情况是先渲染不透明物体,再渲染不透明的天空盒,最后再渲染半透明物体做 Alpha 混合,在这种情况下渲染目标是不透明的,不透明物体的有效颜色即其颜色本身。
    • 在满足这个前提下:

    在这里插入图片描述

    • 才会成立,其本质为:

    在这里插入图片描述

    • 依然是符合上文中给出的结论:

    在这里插入图片描述

    • 只不过此时的 RGBdst 等于 RGBdst。可能有人会产生疑问,不透明背景上混合半透明后,怎么看待混合后的透明度?我们看看上文中的 Alpha 的计算:

    在这里插入图片描述

    • 发现没有,其本质是以 Asrc 作为参数的 Adst 到 1.0 线性插值。当 Adst 为 1.0 时,无论 Asrc 是何值,最终输出都是 1.0。回到现实中,这很好理解,砖墙前放一块玻璃,当我们将玻璃和墙看作一个整体时,它们是不透明的。

    ③ SrcAlpha, OneMinusSrcAlpha 混合出来的 Alpha 值是无意义的

    • 这种常见混合方式根据上文 ② 中的,其已默认渲染目标的 Alpha 为 1,因此它不关心 Alpha 结果的正确性。根据其表达式:

    在这里插入图片描述

    • 可以清晰的看到,这里没有出现 Adst ,得出正确的 RGB 与 RT 中的 Alpha 存什么没有任何关联。
    • 通过 SrcAlpha, OneMinusSrcAlpha 方式计算得到:

    在这里插入图片描述

    • 这个结果没有意义。有些情况下,可以利用这种性质,将 RT 中没有被用到的 Alpha 通道利用起来,例如存储 bloom 系数。

    ④ 理解预乘 Alpha 混合公式的颜色部分

    • Premultiplied alpha 混合采用 One, OneMinusSrcAlpha,其实我们在 ① 中就已经看到:

    在这里插入图片描述

    • 即:

    在这里插入图片描述

    • One 就是这里的 1.0 而 OneMinusSrcAlpha 就是 (1 - Asrc) 。RGBdst 来自于混合的结果,真正的问题是 RGBrsc 如何获得,最简单方式就是纹理中的 RGB 预乘好 Alpha,那么采样得到的颜色直接就是有效 RGB。

    ⑤ 纹理预乘 Alpha 实践上可能有潜在问题

    • 在实践中,纹理的数据源大多是 RGBA32,即单通道 8 比特,只能表示 0-255 的整数,同时游戏资产还会根据目标平台做纹理压缩。
    • 由于精度问题,原本相近的颜色在预乘后会存储为更相近,甚至相同的颜色,经压缩后很容易产生大量 artifacts。要使用预乘 Alpha 的纹理,一般会建议采用单通道 16 位的存储。
    • 由于这种情况,即使预乘有很好的纹理过滤特性,也没有被广泛采用,我所了解 WebGL 由于网页对于 Alpha composition 的天然需求,做了这方面的支持。

    ⑥ 即使不纹理预乘,采用预乘 Alpha 的混合公式也有好处

    • 采用 One, OneMinusSrcAlpha 混合有个很好的特性,可以统一 Blend 和 Additive,减少 BlendState 切换,还能增加效果,推荐阅读:A Mind Forever Programming
    • 简单理一下思路:
      • 把非预乘纹理的采样到的 RGBA,在 shader 中输出 (RGB*A, A) 就是 Blend 模式;
      • 把非预乘纹理的采样到的 RGBA,在 shader 中输出 (RGB*A, 0) 就是 Additive 模式。
    • 输出的 Alpha 可以定义一个 uniform t 控制,输出 (RGBA, At ),这样通过 t 就是控制 Blend 和 Additive 模式之间的过渡。
    • 如果再定义一个 uniform s,输出 (RGBAs, Ats),还可以通过 s 控制其整体透明度,用于淡入淡出,简直就是特效的救星。
    • 众所周知,采用 Additive 模式的特效,在亮的场景中几乎看不到效果,而 Blend 模式的特效在暗的场景中提不亮。采用 One OneMinusSrcAlpha 就可以使用中间态来做出适配比较好的特效,而且不需要 framebuffer fetch。

    ⑦ Premultiplied Alpha 运算是封闭的

    • 换言之,预乘 alpha 混合得到的颜色也是预乘 alpha 的。细心的你可能会注意到,在 ① 中:

    在这里插入图片描述

    • 作为运算结果的 RGBresult 是有 prime 符号的,正是想提示这一点。最终输出的有效颜色来自两部分:
      • 叠加上去的 src 像素贡献的有效颜色;
      • 背景 dst 像素贡献的有效颜色,它被 src 遮挡掉一部分,遮挡的量是 (1 - Asrc)。
    • 观察 ① 中给出的两式:

    在这里插入图片描述

    • (1)(2) 的计算过程是一样的,这就不禁会产生疑问:(1)式混合两个未预乘 alpha 的RGB,结果是预乘 Alpha 的RGB?这没错,未预乘 Alpha 的颜色经混合得到的是预乘 Alpha 的颜色。
    • 那平时用 SrcAlpha, OneMinusSrcAlpha 为什么能得到未预乘的结果呢?正是 ② 中的原因,由于 SrcAlpha, OneMinusSrcAlpha 混合隐含了一个假设,渲染目标是不透明的,在这个前提下,用正确的混合公式计算,可以得到:
      • 预乘 Alpha 的 RGBresult
      • Aresult = 1.0。
    • 在 ② 中已经讲过,与不透明目标混合得到的 Alpha 恒为 1。显而易见,当 Alpha 为 1 时, RGBresult 等于 RGBresult 。因此(1)式在当渲染目标是不透明时,改成下式是成立的:

    在这里插入图片描述

    ⑧ 理解预乘 Alpha 混合公式的 Alpha 部分

    • 预乘 Alpha 混合时,颜色分量和 Alpha 分量的运算是一致的,对比一下:

    在这里插入图片描述

    • 都是:

    在这里插入图片描述

    • 因此,不需要额外指定 Alpha 分量的混合公式,就能得到有意义的 Alpha 值,而且无论渲染目标是透明还是不透明,结果都是正确的。

    ⑨ 仅当必要时 Unmultiply

    • 凡是讲 premultiplied alpha 都会告诉你,可以通过以下方式,还原未预乘的颜色值:

    在这里插入图片描述

    • 常见的、未预乘的颜色值也叫 straight alpha 或 unassociated alpha,而预乘好的叫 premultiplied alpha 或 associated alpha。这种还原操作在渲染自己可控的环境下几乎用不到。
    • 根据上文中的 Premultiplied Alpha 运算是封闭的,预乘 Alpha 混合时运算封闭,可以多次混合不需要还原 straight alpha。但如果用未预乘 Alpha 混合时,如果渲染目标是半透明的,每次混合完成都要 unmultiply 回 straight alpha 才能继续混合,而且当一个网格有多层透明叠加时结果是错误的。
    • 从实践上讲,预乘 Alpha 混合的结果需要 unmultiply 主要就这种情况:三方组件只接受 straight alpha 表示的纹理。Framebuffer 显示到屏幕上输出时,RT 最终总是不透明的,不透明的 Alpha 为 1,预乘和未预乘没有区别,也不用特殊处理。

    ⑩ Bleed Alpha 与预乘 Alpha 原理不同,目的相同,结果略有不同

    • 预乘 alpha 和 bleed alpha 目的都是减少半透明纹理过滤产生的瑕疵,但它们有一些比较显著的区别:
      • Bleed alpha 不需要修改混合公式;
      • Bleed alpha 只能优化完全透明和非完全透明像素边缘的过滤瑕疵;
      • 预乘 alpha 不仅可以达到 bleed alpha 的结果,半透像素之间的过滤效果也能得到优化;
      • 预乘 alpha 需要修改混合公式,可能产生 tip6 中提到的情况。
    • 当不使用 premultiplied alpha 时,预处理贴图 bleed alpha 是一个“免费”替代品。虽然效果上会有折扣,但性价比极高。

    ⑪ 纹理预乘 Alpha 可以减少纹理过滤带来的 artifacts

    展开全文
  • alpha-beta剪枝算法原理(附代码)

    千次阅读 2022-04-16 09:10:14
    alpha-beta剪枝算法原理(附代码)背景Max-Min算法alpha-beta剪枝代码 背景   由于笔者最近要写人工智能课的大作业,所以这两天在学习博弈论相关的知识,但网上对alpha-beta剪枝的原理讲的都不是很清晰,很多细节...

    alpha-beta剪枝算法原理

    背景

      由于笔者最近要写人工智能课的大作业,所以这两天在学习博弈论相关的知识,但网上对alpha-beta剪枝的原理讲的都不是很清晰,很多细节都忽略了,让初学者会有一种脑子说会了,但手并不会的感觉,导致一写起代码就懵,所以笔者决定整理一下知识点,让初学者更容易接受。本文适合想深入理解算法原理的读者,如果您只是需要在工程中使用,请直接到文章最后ctrl cv代码即可。

      不管是alpha-beta剪枝算法还是它的前身Max-Min算法,都是用于在不同阵营进行博弈的问题中计算理论最优解。注意这里的两个关键词:不同阵营、理论最优解。

      我们平时玩的五子棋、象棋等游戏中,玩家被分为两个阵营,且在棋盘上所有棋子位置一定时,两方进行的操作不同,因为双方需要考虑己方棋子移动的最优解并且只能移动己方棋子,这种游戏可以使用上述两种算法。但还有一种游戏,它是没有严格划分阵营的,也就是说如果当前游戏的局面一定,对于两个玩家来说,他们选择的理论最优解应该是相同的,比如两个人从n个石子中取走石子,每次至多可以取m(0 < m < n)个石子,取完石子的人胜利,这类游戏我们乘为Nim游戏,本文中不过多介绍,有兴趣了解的请查找Nim游戏SG函数相关资料。

      我们再来看第二个关键词:理论最优解,我们在算法中所做的所有推演,都是基于对手也会选择对它理论上的最优解,但在实际的人机对战中,人类很难做到这一点,况且在机机对战中,如果各自的评价函数(即量化当前操作的优劣)不同,各自的理论最优解也不同。

    Max-Min算法

      在讲alpha-beta剪枝之前,不得不提的就是它的前身Max-Min算法,可以说Max-Min算法是灵魂,alpha-beta剪枝不过是加了一点trick节约搜索资源。

    图源:Bug_Programmer

      这是一个经典的博弈树,它记录了博弈中所有可能的情况。注意到,博弈进行到叶结点即结束,这里需要说明,搜索结束不代表游戏结束。比如在五子棋中,如果我们想一直搜索直到游戏结束,复杂度是指数级增长的,计算机没有那么多计算资源也没必要使用那么多计算资源,我们可以设置一个最大搜索深度,当博弈树搜索到最大深度时开始计算当前最优解,换句话来说,我们在搜索范围过大时,只考虑局部最优解而不去考虑全局最优解。

      Max-MIn算法将决策树中不同深度的层分为Max层和Min层,Max层选择自己的最优解,Min层选择对方的最优解。决策树的根结点是自己当前所选择的操作,显然它是一个Max层,往后以此类推,方形代表Max层,圆形代表Min层

      在确定完Max和Min层后,我们就要开始计算每个结点能取到的最优解了。这个最优解是经过评价函数量化的,不同游戏的评价函数定义不同,你可以根据自己的需求个性化选择评价函数,但不管是什么定义方式,它本质上就是一个量化当前局面对自己来说优劣的函数。

      该算法的核心在于逆推,即从当前操作所导致的结果推出当前操作的最优解。 当搜索到叶结点时,我们计算所有叶节点的评价值,然后计算父结点的评价值,计算方式为:Max层的结点取它的子结点中的最大值,Min层的结点取它的子结点中的最小值。 用图中最左面的分支来举例,当进行到Min层时,此时他有两个选择,评价值分别为3和17,那么作为你的对手,他一定会让你的评价值最小,因此他会选择评价值为3的操作,同理可知Max层选择评价值最大的操作。

      由此我们就可以计算根结点的操作,即选择当前能达到的最大评价值所对应的操作。

    alpha-beta剪枝

      我们终于开始讲这个神秘的alpha-beta剪枝算法了,如果你理解了Max-Min算法,那么理解这个应该也很轻松。

      我们很容易发现,Max-Min算法有它明显的缺陷——计算量大,即使我们做了搜索深度限制,计算量仍十分庞大,算法工程师们总是不满足暴力搜索的,因此就有了alpha-beta剪枝算法。

      现在请思考一个问题,如果你已经有了一个评价值为10的操作,那么再遍历其他结点时,你发现它最大能达到的评价值是5,那么你还会继续遍历这个结点的其他子结点吗?显然不会,因为你已经有了一个更优的选择了,除非有一个比10更大的评价值,否则你不会再搜索下去。同理,如果你的对手已经有了一个评价值为5的操作,那么它还会让你选择评价值更大的操作吗?也不会,因为它是你的对手,理论上它总想让你玩的最不舒服。

      理解了这个,你就理解了alpha-beta剪枝的精髓——剪掉那些一定不会选择的分支。

      下面我们来详细介绍一下这个“聪明”的算法。

    在这里插入图片描述图源:急流

      上图是我们用DFS搜索第一条路径的结果,两个叶结点分别是3和17,当我们搜索到第一个叶结点3时,此时17的结点还未被搜索到,那么由于它的父结点在Min层,所以它的父结点一定会选择一个评价值小于等于3的值, 请仔细思考这句话,很重要!换句话说,目前来看,父结点的上界是3,由此引出该算法的第一个参数——β,它是一个结点所能选取的评价值的上界。现在我们假设两个叶结点在Min层,它们的父结点在Max层,此时由于我们搜索的顺序仍是从左向右,父结点一定会选择一个评价值大于等于3的值, 也就是说父结点评价值的下界是3,由此引出该算法的第二个参数——α,它是一个结点所能选取的评价值的下界。

            
    知道了α和β的定义,我们来介绍一下alpha-beta剪枝中最重要的性质:
    1. Max层的α = max(α, 它的所有子结点的评价值),Max层的β = 它的父结点的β
    2. Min层的β = min(β, 它的所有子结点的评价值),Min层的 α = 它的父结点的α
    3. 当某个结点的 α >= β,停止搜索该节点的其他子结点
    4. 叶结点没有 α 和 β

        
    我们一一说明这四条性质:
    首先我们假设所有非叶结点的α初始化为负无穷,β初始化为正无穷。

    1. 若Max层中发现有一个子结点的评价值比当前所能达到的评价值更大,换句话说就是子结点的操作更优,那么将当前所能达到的评价值换成该子节点的评价值。并且由于它的父结点是从该Max层中选择最小的评价值,那么他就要判断一下当前的α是否大于它父结点的β。为了方便起见,我们将父结点的β赋给它自己的β,这样我们只需要比较它自己的α和β就可以了。
    2. 跟第一条类似,如果发现子结点中有比当前更优的操作(对对手更优,即对自己更差),那么就替换β,同时比较父结点最优解与当前解的大小,如果父结点已经有一个更优解,则不必继续搜索了。
    3. Max层中,若某个结点的最优解已经大于它的父结点的最差解,则不必继续搜索,剪枝;Min层中,若某个结点的最差解已经小于它的父结点的最优解,则不必继续搜索,剪枝。
    4. 由于叶结点没有子结点,自然不需要计算 α 和 β。

    在这里插入图片描述图源:急流
    (原谅我懒得画图)

    代码

    棋类游戏博弈

            def AlphaBeta(self, player, alpha, beta):
            # 当前可以下的位置
            movable_positons = self.Move()
            if (self.Winner() != "continue"):
                return self.Evaluate()
    
            if(player == "man"): # min层
                for mov in movable_positons:
                    self.chessboard[mov[0]][mov[1]] = 1
                    # Min层的beta = min(beta, 子结点的alpha)
                    beta = min(beta, self.AlphaBeta("machine", alpha, beta))
                    self.chessboard[mov[0]][mov[1]] = 0
    
                    if alpha >= beta:
                        return alpha
    
                return beta
    
            elif(player == "machine"): # max层
                for mov in movable_positons:
                    self.chessboard[mov[0]][mov[1]] = -1
                    alpha = max(alpha, self.AlphaBeta("man", alpha, beta))
                    self.chessboard[mov[0]][mov[1]] = 0
    
                    # beta是父结点的alpha,即为max层结点的beta
                    if alpha >= beta:
                        return beta
    
                return alpha
    
    展开全文
  • 1 Alphapose github地址:https://github.com/MVIG-SJTU/AlphaPose Alphapose最初发布采用的是pytorch 0.4.0版本,不过现在使用的都是Pytorch 1.1+版本。 目前Pytorch 1.1+版本不像之前pytorch 0.4.0版本的安装只...

    1 Alphapose

    github地址:https://github.com/MVIG-SJTU/AlphaPose

    Alphapose最初发布采用的是pytorch 0.4.0版本,不过现在使用的都是Pytorch 1.1+版本。

    目前Pytorch 1.1+版本不像之前pytorch 0.4.0版本的安装只需要使用:

    pip install -r requirements.txt
    

    安装即可,目前这里面有很多坑,下面来一步一步的进行说明。

    截止写博客的时间,当前的版本为0.4.0。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ykAjc01h-1617008869158)(https://www.stubbornhuang.com/wp-content/uploads/2021/03/wp_editor_md_1c3210b78d0f30e288a6e02771f6ba31.jpg)]

    2 环境配置

    2.1 官方安装说明

    文档地址:https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/INSTALL.md

    依赖说明:

    • 操作系统:Linux和Windows均可
    • Cuda
    • Python 3.5+
    • Cython
    • PyTorch 1.1+, 如果使用Pytorch 1.5以及更高版本,需要在拉取仓库之后合并远程代码:git pull origin pull/592/head
    • torchvision 0.3.0+
    • numpy

    从这里看出需要首先安装好Cuda,Python版本需要在3.5以上,Pytorch版本最好使用1.1.0,如果需要使用Pytorch 1.5以及1.5+版本的则需要在已有分支上再合并代码,同时torchvision的版本最好使用0.3.0,另外的就是安装numpy。

    下面我们根据上述官方安装文档一步一步配置Alphapose的环境,揭露下在windows中配置环境遇到的一些坑。

    2.2 Anaconda创建虚拟环境Alphapose

    使用Anaconda创建一个新的虚拟环境Alphapose,在系统命令行工具中输入以下命令,我现在使用的命令行工具为Cmder:

    conda create -n Alphapose python=3.6
    

    上述命令在创建一个Alphapose的虚拟环境的设置Python版本为3.6并自动安装了Python版本。

    2.3 获取Alphapose仓库

    使用git将Alphapose克隆到本地,这里不再赘述。

    2.4 安装相关依赖库

    2.4.1 激活虚拟环境Alphapose

    在命令行工具使用:

    activate Alphapose
    

    激活当前虚拟环境,将Alphapose虚拟环境作为当前操作环境。

    2.4.2 安装Pytorch和torchvision

    在虚拟环境Alphapose下使用以下命令安装pytorch 1.1.0 torchvision 0.3.0:

    conda install pytorch=1.1.0 torchvision=0.3.0 -c pytorch
    

    2.4.3 安装cython

    在虚拟环境Alphapose下使用以下命令安装cpython:

    pip install cython
    

    2.4.4 运行python setup.py build develop --user

    安装完上述三个库之后,我们使用:

    python setup.py build develop --user
    

    安装更多的依赖库,可能有些库会因为网络问题安装失败,多次尝试或者修改Anaconda的conda镜像源以及pip镜像源即可,根据错误提示,一个一个依次安装未安装好的库即可。

    2.5 踩的坑

    在运行2.4.4的命令过程中,会遇到一些坑,这里详细进行说明并给出解决方案,不过之前先说明下本机已经安装了vs2015和vs2019,至于没有安装这两个开发环境导致其他的问题不在本节说明的范围之内。

    2.5.1 pycocotools

    在Alphapose仓库的setup.py中的main函数中,我们发现进行了这样一行说明:

    Windows need pycocotools here: https://github.com/philferriere/cocoapi#subdirectory=PythonAPI

    这个pycocotools在这个 https://github.com/philferriere/cocoapi 的子目录PythonAPI下,而官方强调了windows系统需要安装这个库,但是在安装过程中,经常会因为网络问题失败,不能使用pip远程安装github仓库,所以我们需要将这个仓库克隆下来手动切换到该仓库的PythonAPI文件夹下,使用该文件夹下的setup.py文件手动安装pycocotools库,操作步骤如下。

    记住所有的操作必须处于Alphapose虚拟环境之下,在PythonAPI目录下执行以下命令:

    # 编译
    python setup.py build
    # 安装
    python setup.py install
    

    通过这种方式即可完成pycocotools的安装。

    我们可以再次运行2.4.4中的

    python setup.py build develop --user
    

    查看所有依赖是否安装完成。

    2.5.2 deform_conv_cuda

    官方安装指南对于Windows系统特别的添加了下面一段话:

    The installation process is same as above. But note that Windows users may face problem when installing cuda extension. Thus we disable the cuda extension in the setup.py by default. The affect is that models ended with “-dcn” is not supported. If you force to make cuda extension by modify this line to True, you should install Visual Studio due to the problem mentioned here. We recommend Windows users to run models like FastPose, FastPose-duc, etc., as they also provide good accuracy and speed.

    对于windows用户在安装cuda扩展上可能会出现问题,所以官方在setup.py的124行默认设置为False。这导致即使我们按照2.4.4节安装了所有的依赖库,在我们运行demo的时候会出现以下错误:

    cannot import name 'deform_conv_cuda'
    

    导致demo运行不成功,所以我们必须手动的将setup.py的124行修改为True:

    在这里插入图片描述

    强制编译cuda扩展。

    修改完成之后,再次运行2.4.4节中的命令行:

    python setup.py build develop --user
    

    上述官方说明是需要安装visual studio,正如前文提到的,我已经在本机上安装了visual studio 2015和visual studio 2019,但是还是出现了以下的错误:

    unsupported Microsoft Visual Studio version! Only the versions between 2013 and 2017 (inclusive) are supported!

    可是我明明装了vs2015啊!

    我以为到这一步所做的工作都白费了,但是皇天不服有心人!

    直到我看见这两位大神的解决方案:

    先使用everything全局搜索host_config.h文件,在我本机上该文件的路径为:

    D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\crt

    果然在该文件的143行找到了错误提示

    在这里插入图片描述

    根据上述两篇博文的提示,将该文件的141行,从:

    #if _MSC_VER < 1700 || _MSC_VER >= 1920
    

    修改为:

    #if _MSC_VER < 1700 || _MSC_VER >= 2000 /*1920*/
    

    保存。

    然后再次运行2.4.4安装依赖,发现没有出现那个错误,编译正常,所有库都安装完成,bingo!!!

    注意:编译完成之后建议马上恢复默认!

    2.5.3 deform_conv_cuda编译出错时的解决方案

    如果按照2.5.2节编译出现了错误,其实也没有很大的关系,官方是这么说的:

    The installation process is same as above. But note that Windows users may face problem when installing cuda extension. Thus we disable the cuda extension in the setup.py by default. The affect is that models ended with “-dcn” is not supported.

    如果cuda extension没有安装成功只是会影响-dcn结尾的模型加载,也就是说只影响以下模型的加载:
    在这里插入图片描述
    所以我们大可以保持默认,即setup.py第124行

    force_comile=False
    

    保持不变。

    然后修改两处地方:

    • alphapose\models\layers\dcn\deform_conv.py注释第9行:from . import deform_conv_cuda
    • alphapose\models\layers\dcn\deform_pool.py注释第7行:from . import deform_pool_cuda

    这样就不会再出现

    ImportError: cannot import name ‘deform_conv_cuda’ from ‘alphapose.models.layers.dcn’

    这种错误了,只要不是加载-dcn的模型,其他模型还是可以正常使用的!

    2.6 nonzero(Tensor input, *, Tensor out)的警告

    当使用Pytorch1.5+版本时,会出现以下类似的警告:

    nonzero(Tensor input, *, Tensor out)
    Consider using one of the following signatures instead:
    nonzero(Tensor input, *, bool as_tuple) (Triggered internally at …\torch\csrc\utils\python_arg_parser.cpp:766.)
    ind_nz = torch.nonzero(prediction[:,:,4]).transpose(0,1).contiguous()

    参考链接:https://blog.csdn.net/dong_liuqi/article/details/106526403以及官方文档

    即将:

    ind_nz = torch.nonzero(prediction[:,:,4]).transpose(0,1).contiguous()
    

    修改为:

    ind_nz = torch.nonzero(prediction[:,:,4],as_tuple =False).transpose(0,1).contiguous()
    

    即可消除警告。

    as_tuple未true的时候意思就是返回一个bool元组。而我们一般都是想让其返回一个tensor,因此这里该参数就赋值为false。

    2.7 所有的依赖库

    所有安装的依赖库可参照如下:

    blas                      1.0                         mkl    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    certifi                   2020.12.5        py36haa95532_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    cffi                      1.14.5           py36hcd4344a_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    chardet                   4.0.0                    pypi_0    pypi
    cudatoolkit               10.0.130                      0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    cycler                    0.10.0                   pypi_0    pypi
    cython                    0.29.22                  pypi_0    pypi
    cython-bbox               0.1.3                    pypi_0    pypi
    freetype                  2.10.4               hd328e21_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    idna                      2.10                     pypi_0    pypi
    intel-openmp              2020.2                      254    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    jpeg                      9b                   hb83a4c4_2    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    jsonpatch                 1.32                     pypi_0    pypi
    jsonpointer               2.1                      pypi_0    pypi
    kiwisolver                1.3.1                    pypi_0    pypi
    libpng                    1.6.37               h2a8f88b_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    libtiff                   4.2.0                hd0e1b90_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    lz4-c                     1.9.3                h2bbff1b_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    matplotlib                3.3.4                    pypi_0    pypi
    mkl                       2020.2                      256    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    mkl-service               2.3.0            py36h196d8e1_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    mkl_fft                   1.3.0            py36h46781fe_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    mkl_random                1.1.1            py36h47e9c7a_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    ninja                     1.10.2           py36h6d14046_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    numpy                     1.19.2           py36hadc3359_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    numpy-base                1.19.2           py36ha3acd2a_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    olefile                   0.46                     py36_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    opencv-python             4.5.1.48                 pypi_0    pypi
    pillow                    8.1.2            py36h4fa10fc_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    pip                       21.0.1           py36haa95532_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    pycocotools               2.0                      pypi_0    pypi
    pycparser                 2.20                       py_2    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    pyparsing                 2.4.7                    pypi_0    pypi
    python                    3.6.13               h3758d61_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    python-dateutil           2.8.1                    pypi_0    pypi
    pytorch                   1.1.0           py3.6_cuda100_cudnn7_1    pytorch
    pyzmq                     22.0.3                   pypi_0    pypi
    requests                  2.25.1                   pypi_0    pypi
    scipy                     1.1.0                    pypi_0    pypi
    setuptools                52.0.0           py36haa95532_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    six                       1.15.0           py36haa95532_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    sqlite                    3.35.2               h2bbff1b_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    terminaltables            3.1.0                    pypi_0    pypi
    tk                        8.6.10               he774522_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    torchfile                 0.1.0                    pypi_0    pypi
    torchvision               0.3.0              py36_cu100_1    pytorch
    tornado                   6.1                      pypi_0    pypi
    urllib3                   1.26.4                   pypi_0    pypi
    vc                        14.2                 h21ff451_1    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    vs2015_runtime            14.27.29016          h5e58377_2    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    websocket-client          0.58.0                   pypi_0    pypi
    wheel                     0.36.2             pyhd3eb1b0_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    wincertstore              0.2              py36h7fe50ca_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    xz                        5.2.5                h62dcd97_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    zlib                      1.2.11               h62dcd97_4    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    zstd                      1.4.5                h04227a9_0    http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    

    3 下载预训练模型和配置文件

    1. Download the object detection model manually: yolov3-spp.weights(Google Drive | Baidu pan). Place it into detector/yolo/data.
    2. Download our pose models. Place them into pretrained_models. All models and details are available in our Model Zoo.
    3. For pose tracking, please refer to our tracking docments for model download
    1. 下载目标检测模型yolov3-spp.weights放到目录detector/yolo/data文件夹下
    2. 下载姿态模型,放置到pretrained_models文件夹下,除了下载配置文件之外还需要下载cfg配置文件,具体下载地址参考:https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/MODEL_ZOO.md

    4 demo试运行

    官方文档:https://github.com/MVIG-SJTU/AlphaPose/blob/master/docs/GETTING_STARTED.md

    具体使用可参考如上文档,这里放一下我的命令行:

    python scripts/demo_inference.py --cfg pretrained_models/256x192_res50_lr1e-3_1x.yaml --checkpoint pretrained_models/fast_res50_256x192.pth --video pretrained_models/P01_01_00_0_color.avi --outdir examples/res --save_video
    

    然后经典的cxk篮球课堂来了!

    在这里插入图片描述
    如果有兴趣可以访问我的个人站哦:https://www.stubbornhuang.com

    展开全文
  • 对几种不同的声音信号进行alpha稳定分布分析
  • 自己做量化交易软件(40)小白量化实战13–Alpha101及自编因子公式 2015年底World Quant发表了论文《101 Formulaic Alpha》。论文中给出了101个现实中的alpha。初期因子数据挖掘量化投资取得了不错的收益,后来实战...
  • Unity支持播放带Alpha通道视频的方法
  • ALPHA GO 原论文转载

    2016-04-26 08:46:08
    ALPHA GO 原论文转载
  • 轻量化AlphaPose

    千次阅读 热门讨论 2021-08-02 18:07:16
    目录前言AlphaPose介绍这里强调一下轻量化什么yolo目标检测的轻量化单人姿态估计网络的轻量化训练轻量化的单人姿态估计模型下载数据集创建FastPoseMobile创建训练文件开始训练训练结果训练项目和数据集 前言 Alpha...
  • jai_imageio-1.1-alpha,swingx-1.0.zip,swingx-1.0.jar,jai_imageio-1.1-alpha.jar
  • 本文旨在向读者介绍Alpha的相关基本概念,以及寻找和检验Alpha的主要流程和方法。之前我们梳理了 WorldQuant经典读本FindingAlphas的概要以及WebSim的使用,在下篇中我们会介绍相关方法在BigQuant平台上的实现。 一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 592,871
精华内容 237,148
关键字:

alpha