机器学习 之 Haar特征

2023-05-16

Haar特征

Haar特征原理综述

Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用 黑色矩形像素和 减去 白色矩形像素和来表示这个模版的特征值。例如:脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。

这里写图片描述

如上图A、B、D模块的图像Haar特征为:v=Sum白-Sum黑
C 模块的图像Haar特征为:v=Sum白(左)+Sum白(右)-2*Sum黑
这里要保证白色矩形模块中的像素与黑色矩形的模块的像素数相同,所以乘2

对于一幅图像来说,可以通过通过改变特征模板的大小和位置,可穷举出大量的特征来表示一幅图像。上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。例如在24*24大小的图像中可以以坐标(0,0)开始宽为20高为20矩形模版计算上图A特征,也可以以坐标(0,2)开始宽为20高为20矩形模版计算上图A特征,也可以以坐标(0,0)开始宽为22高为22矩形模版计算上图A特征,这样矩形特征值随着类别、大小和位置的变化,使得很小的一幅很小的图像含有非常多的矩形特征。矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。

Haar特征计算方法

首先介绍下积分图:如下述代码所示,是opencv中存储图像积分图的结构体,可以看到有两种积分图sum积分图,titled sum积分图。sum积分图用来计算一般的垂直或水平的矩形特征,如下面的(a)、(b)、(c)、(d)。。。,而titled sum积分图用来计算倾斜45度的积分图,如下面的(1c)、(1d)、(2c)。。。

/* Prepared for training samples */
typedef struct CvHaarTrainingData
{
    CvSize winsize;     /* training image size */
    int    maxnum;      /* maximum number of samples */
    CvMat  sum;         /* sum images (each row represents image) */
    CvMat  tilted;      /* tilted sum images (each row represents image) */
    CvMat  normfactor;  /* normalization factor */
    CvMat  cls;         /* classes. 1.0 - object, 0.0 - background */
    CvMat  weights;     /* weights */

    CvMat* valcache;    /* precalculated feature values (CV_32FC1) */
    CvMat* idxcache;    /* presorted indices (CV_IDX_MAT_TYPE) */
} CvHaarTrainigData;

sum积分图主要的思想是将图像从起点开始到各个点所形成的矩形区域像素之和作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素,不用重新计算这个区域的像素和。例如:对一个X*Y图像它的积分图也是一个X*Y的元素为int型的积分图,对应积分图中(x,y)位置值表示就是原图像矩形框[(0,0), (x,y)]内所有像素的和。如下图所示:

这里写图片描述

用公式表示:
其中p(i,j)表示原图在(i,j)位置像素值,f(x,y)表示积分图在(x,y)位置值

积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。如下图所示图片不位置不同大小矩形框的两个A特征,他们的计算方式分别为:
[f(x,y)+f(i,j)-f(s,t)-f(l,m)]-[f(s,t)+f(h,k)-f(i,j)-f(n,o)]
[f(X,Y])+f(I,J)-f(S,T)-f(L,M)]-[f(S,T)+f(H,K)-f(I,J)-f(N,O)]
可见两个不同大小的特征计算量却一样!!!

这里写图片描述

titled sum类积分图计算的是45°旋角的矩形特征。为了便于计算45°旋角的矩形特征,我们定义titled sum类积分图中(x,y)点值为RSAT(x,y),它表示原始图像中(x,y)左上角45°区域和左下角45°区域的像素和。
这里写图片描述
用公式表示如下:

对于每一点的积分图计算方法有如下递推公式 ,来节约性能,减少生重复计算:

而计算矩阵特征的特征值,是位于十字行矩形RSAT(x,y)之差。如下图的矩形特征为:
[RSAT(m,n)-RSAT(i,j)-RSAT(k,l)+RSAT(s,t)]-[RSAT(o,p)-RSAT(m,n)-RSAT(x,y)+RSAT(k,l)]
这里写图片描述

同理,该积分图也能够在多种尺度下,使用相同的时间(常数时间)来计算不同的45度矩形特征。

Haar特征对应的opencv源码

Viola提出的haar特征:
这里写图片描述

Lienhart等牛们提出的Haar-like特征:
这里写图片描述

opencv源码中负责创建几种haar特征的是函数icvCreateIntHaarFeatures, 在进入分类器训练函数后执行该函数,它根据大小为winsize的图,计算所有HaarFeature的rect的顶点坐标来确定特征并将它存入CvIntHaarFeatures结构体数组中。后续针对不同的图像只需用这些矩形框的顶点来获得积分图在该点的值就可以计算也图像该特征的具体值了。symmetric为0时表示创建所有特征,为1时表示目标图形是垂直对称的所以只需创建所有中心在左半边部位的特征。mode==0表示Viola提出的原始矩形特征,mode==1表示所有垂直的haar特征,mode==2表示所有特征

具体每种特征的名称如下图::
这里写图片描述

下面在源码中通过注释具体分析下代码的逻辑::::

/*
 * icvCreateIntHaarFeatures
 *
 * Create internal representation of haar features
 *
 * mode:
 *  0 - BASIC = Viola
 *  1 - CORE  = All upright
 *  2 - ALL   = All features
 */
static
CvIntHaarFeatures* icvCreateIntHaarFeatures( CvSize winsize,
                                             int mode,
                                             int symmetric )
{
    CvIntHaarFeatures* features = NULL;
    CvTHaarFeature haarFeature;

    /*内存存储器是一个可用来存储诸如序列,轮廓,图形,子划分等动态增长数据  结构的底层结构。
    它是由一系列以同等大小的内存块构成,呈列表型*/
    CvMemStorage* storage = NULL;
    CvSeq* seq = NULL;
    CvSeqWriter writer;

    int s0 = 36; /* minimum total area size of basic haar feature     */
    int s1 = 12; /* minimum total area size of tilted haar features 2 */
    int s2 = 18; /* minimum total area size of tilted haar features 3 */
    int s3 = 24; /* minimum total area size of tilted haar features 4 */

    int x  = 0;
    int y  = 0;
    int dx = 0;
    int dy = 0;

    float factor = 1.0F;

    factor = ((float) winsize.width) * winsize.height / (24 * 24);
#if 0    
    s0 = (int) (s0 * factor);
    s1 = (int) (s1 * factor);
    s2 = (int) (s2 * factor);
    s3 = (int) (s3 * factor);
#else
    s0 = 1;
    s1 = 1;
    s2 = 1;
    s3 = 1;
#endif

    /* CV_VECTOR_CREATE( vec, CvIntHaarFeature, size, maxsize ) */
    storage = cvCreateMemStorage();/*创建一个内存存储器*/

    cvStartWriteSeq( 0, sizeof( CvSeq ), sizeof( haarFeature ), storage, &writer );
    /*定义了writer工具每次写入数据的大小,以及写入到哪个内存存储器。
      在之后调用 CV_WRITE_SEQ_ELEM( haarFeature, writer )时就可以自动将一个haarFeature类型的数据写入内存存储器中*/

    for( x = 0; x < winsize.width; x++ )
    {
        for( y = 0; y < winsize.height; y++ )/*xy确定了特征矩形的左上角坐标,所以这是遍历整个窗口*/
        {
            for( dx = 1; dx <= winsize.width; dx++ )
            {/*dx,dy确定了特征矩形的大小,所以这是遍历不矩形大小的特征*/
                for( dy = 1; dy <= winsize.height; dy++ )
                {/*接下来是针对不同的模版分别计算特征*/
                    // haar_x2
                    if ( (x+dx*2 <= winsize.width) && (y+dy <= winsize.height) ) {
                        if (dx*2*dy < s0) continue;
                        if (!symmetric || (x+x+dx*2 <=winsize.width)) {/*haar_x2::对应上述haar_x2图特征Sum黑-Sum白*/
                            haarFeature = cvHaarFeature( "haar_x2",
                                x,    y, dx*2, dy, -1,
                                x+dx, y, dx  , dy, +2 );
                            /* CV_VECTOR_PUSH( vec, CvIntHaarFeature, haarFeature, size, maxsize, step ) */
                            CV_WRITE_SEQ_ELEM( haarFeature, writer );
                        }
                    }


                    // haar_y2
                    if ( (x+dx <= winsize.width) && (y+dy*2 <= winsize.height) ) {
                        if (dx*2*dy < s0) continue;
                        if (!symmetric || (x+x+dx <= winsize.width)) {/*haar_y2::对应上图图haar_y2特征Sum黑-Sum白*/
                            haarFeature = cvHaarFeature( "haar_y2",
                                x, y,    dx, dy*2, -1,
                                x, y+dy, dx, dy,   +2 );
                            CV_WRITE_SEQ_ELEM( haarFeature, writer );
                        }
                    }

                    // haar_x3
                    if ( (x+dx*3 <= winsize.width) && (y+dy <= winsize.height) ) {
                        if (dx*3*dy < s0) continue;
                        if (!symmetric || (x+x+dx*3 <=winsize.width)) {/*haar_x3::对应上图图haar_x3特征,Sum黑*2-Sum白左-Sum白右*/
                            haarFeature = cvHaarFeature( "haar_x3",
                                x,    y, dx*3, dy, -1,
                                x+dx, y, dx,   dy, +3 );
                            CV_WRITE_SEQ_ELEM( haarFeature, writer );
                        }
                    }

                    // haar_y3
                    if ( (x+dx <= winsize.width) && (y+dy*3 <= winsize.height) ) {
                        if (dx*3*dy < s0) continue;
                        if (!symmetric || (x+x+dx <= winsize.width)) {/*haar_y3::对应上图图haar_y3特征,Sum黑*2-Sum白上-Sum白下*/
                            haarFeature = cvHaarFeature( "haar_y3",
                                x, y,    dx, dy*3, -1,
                                x, y+dy, dx, dy,   +3 );
                            CV_WRITE_SEQ_ELEM( haarFeature, writer );
                        }
                    }

                    if( mode != 0 /*BASIC*/ ) {
                        // haar_x4
                        if ( (x+dx*4 <= winsize.width) && (y+dy <= winsize.height) ) {
                            if (dx*4*dy < s0) continue;
                            if (!symmetric || (x+x+dx*4 <=winsize.width)) {/*haar_x4::对应上图图haar_x4特征,Sum黑-Sum白左-Sum白右*/
                                haarFeature = cvHaarFeature( "haar_x4",
                                    x,    y, dx*4, dy, -1,
                                    x+dx, y, dx*2, dy, +2 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }

                        // haar_y4
                        if ( (x+dx <= winsize.width ) && (y+dy*4 <= winsize.height) ) {
                            if (dx*4*dy < s0) continue;
                            if (!symmetric || (x+x+dx   <=winsize.width)) {/*haar_y4::对应上图图haar_y4特征,Sum黑-Sum白上-Sum白下*/
                                haarFeature = cvHaarFeature( "haar_y4",
                                    x, y,    dx, dy*4, -1,
                                    x, y+dy, dx, dy*2, +2 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }
                    }

                    // x2_y2
                    if ( (x+dx*2 <= winsize.width) && (y+dy*2 <= winsize.height) ) {
                        if (dx*4*dy < s0) continue;
                        if (!symmetric || (x+x+dx*2 <=winsize.width)) {/*haar_x2_y2::对应上图图haar_x2_y2特征,Sum黑左上-Sum白上右-Sum白下左+Sum黑右下*/
                            haarFeature = cvHaarFeature( "haar_x2_y2",
                                x   , y,    dx*2, dy*2, -1,
                                x   , y   , dx  , dy,   +2,
                                x+dx, y+dy, dx  , dy,   +2 );
                            CV_WRITE_SEQ_ELEM( haarFeature, writer );
                        }
                    }

                    if (mode != 0 /*BASIC*/) {                
                        // point
                        if ( (x+dx*3 <= winsize.width) && (y+dy*3 <= winsize.height) ) {
                            if (dx*9*dy < s0) continue;
                            if (!symmetric || (x+x+dx*3 <=winsize.width))  {/*point::对应上图图point特征,Sum黑中*8-Sum白*/
                                haarFeature = cvHaarFeature( "haar_point",
                                    x   , y,    dx*3, dy*3, -1,
                                    x+dx, y+dy, dx  , dy  , +9);
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }
                    }

                    if (mode == 2 /*ALL*/) {                
                        // tilted haar_x2                                      (x, y, w, h, b, weight)
                        if ( (x+2*dx <= winsize.width) && (y+2*dx+dy <= winsize.height) && (x-dy>= 0) ) {
                            if (dx*2*dy < s1) continue;

                            if (!symmetric || (x <= (winsize.width / 2) )) {/*tilted haar_x2::对应上图图tilted haar_x2特征,在tilted积分图中求得*/
                                haarFeature = cvHaarFeature( "tilted_haar_x2",
                                    x, y, dx*2, dy, -1,
                                    x, y, dx  , dy, +2 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }

                        // tilted haar_y2                                      (x, y, w, h, b, weight)
                        if ( (x+dx <= winsize.width) && (y+dx+2*dy <= winsize.height) && (x-2*dy>= 0) ) {
                            if (dx*2*dy < s1) continue;

                            if (!symmetric || (x <= (winsize.width / 2) )) {/*tilted haar_y2::对应上图图tilted haar_y2特征,在tilted积分图中求得*/
                                haarFeature = cvHaarFeature( "tilted_haar_y2",
                                    x, y, dx, 2*dy, -1,
                                    x, y, dx,   dy, +2 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }


                        // tilted haar_x3                                   (x, y, w, h, b, weight)
                        if ( (x+3*dx <= winsize.width) && (y+3*dx+dy <= winsize.height) && (x-dy>= 0) ) {
                            if (dx*3*dy < s2) continue;

                            if (!symmetric || (x <= (winsize.width / 2) )) {/*tilted haar_x3::对应上图图tilted haar_x3特征,在tilted积分图中求得*/
                                haarFeature = cvHaarFeature( "tilted_haar_x3",
                                    x,    y,    dx*3, dy, -1,
                                    x+dx, y+dx, dx  , dy, +3 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }

                        // tilted haar_y3                                      (x, y, w, h, b, weight)
                        if ( (x+dx <= winsize.width) && (y+dx+3*dy <= winsize.height) && (x-3*dy>= 0) ) {
                            if (dx*3*dy < s2) continue;

                            if (!symmetric || (x <= (winsize.width / 2) )) {/*tilted haar_y3::对应上图图tilted haar_y3特征,在tilted积分图中求得*/
                                haarFeature = cvHaarFeature( "tilted_haar_y3",
                                    x,    y,    dx, 3*dy, -1,
                                    x-dy, y+dy, dx,   dy, +3 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }


                        // tilted haar_x4                                   (x, y, w, h, b, weight)
                        if ( (x+4*dx <= winsize.width) && (y+4*dx+dy <= winsize.height) && (x-dy>= 0) ) {
                            if (dx*4*dy < s3) continue;

                            if (!symmetric || (x <= (winsize.width / 2) )) {/*同上*/
                                haarFeature = cvHaarFeature( "tilted_haar_x4",


                                    x,    y,    dx*4, dy, -1,
                                    x+dx, y+dx, dx*2, dy, +2 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }

                        // tilted haar_y4                                      (x, y, w, h, b, weight)
                        if ( (x+dx <= winsize.width) && (y+dx+4*dy <= winsize.height) && (x-4*dy>= 0) ) {
                            if (dx*4*dy < s3) continue;

                            if (!symmetric || (x <= (winsize.width / 2) )) {/*同上*/
                                haarFeature = cvHaarFeature( "tilted_haar_y4",
                                    x,    y,    dx, 4*dy, -1,
                                    x-dy, y+dy, dx, 2*dy, +2 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                            }
                        }


                        /*

                          // tilted point
                          if ( (x+dx*3 <= winsize.width - 1) && (y+dy*3 <= winsize.height - 1) && (x-3*dy>= 0)) {
                          if (dx*9*dy < 36) continue;
                          if (!symmetric || (x <= (winsize.width / 2) ))  {/*tilted point::对应上图图tilted point特征,在tilted积分图中求得*/
                            haarFeature = cvHaarFeature( "tilted_haar_point",
                                x, y,    dx*3, dy*3, -1,
                                x, y+dy, dx  , dy,   +9 );
                                CV_WRITE_SEQ_ELEM( haarFeature, writer );
                          }
                          }
                        */
                    }
                }
            }
        }
    }

    seq = cvEndWriteSeq( &writer );
    features = (CvIntHaarFeatures*) cvAlloc( sizeof( CvIntHaarFeatures ) +
        ( sizeof( CvTHaarFeature ) + sizeof( CvFastHaarFeature ) ) * seq->total );
    features->feature = (CvTHaarFeature*) (features + 1);
    features->fastfeature = (CvFastHaarFeature*) ( features->feature + seq->total );
    features->count = seq->total;
    features->winsize = winsize;
    cvCvtSeqToArray( seq, (CvArr*) features->feature );
    cvReleaseMemStorage( &storage );

    /*特征的rect由坐标表示转换为由像素索引表示*/
    icvConvertToFastHaarFeature( features->feature, features->fastfeature,
                                 features->count, (winsize.width + 1) );

    return features;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习 之 Haar特征 的相关文章

  • 自信息量和一阶熵

    信息论中 自信息量和一阶熵是用来度量信息的重要概念 它们提供了一种方式来理解和量化信息的不确定性和平均量 对于解决信息传输 编码和存储等问题非常有用 首先 让我们来了解一下自信息量 自信息量是用来度量一个事件的信息量或不确定性的大小 假设有
  • 其他:机器学习算法速查表

    概述 机器学习可以被认为是计算机科学中最有前途和最受期待的领域之一 借助先前的数据 机器学习试图使计算机能够独立学习新事物 机器学习模型接收数据 执行各种计算 并最大限度地提高模型的精度和准确度 机器学习的主要任务包括图像分割 语音识别和推
  • 推荐系统:机器学习中基于内容的过滤

    概述 顾名思义 基于内容的筛选是一种机器学习实现 它使用系统中收集的内容或功能来提供类似的建议 根据用户观察结果从数据集中获取最相关的信息 最常见的例子是 Netflix Myntra Hulu Hotstar Instagram Expl
  • Keras 3.0正式发布:可用于TensorFlow、JAX和PyTorch

    经过 5 个月的更新迭代 Keras 3 0 终于来了 大新闻 我们刚刚发布了 Keras 3 0 版本 Keras 之父 Fran ois Chollet 在 X 上激动的表示 现在你可以在 JAX TensorFlow 以及 PyTor
  • 人工智能智能控制系统:引领未来智能化时代

    导言 人工智能智能控制系统是当今科技领域的热点之一 它不仅在工业生产中发挥着关键作用 也在生活中展现出前所未有的智能化特征 本文将深入探讨人工智能智能控制系统的定义 应用领域和未来发展趋势 深入探讨如何实现智能控制系统与人工智能的有机结合
  • 软件测试/测试开发/人工智能丨机器学习中特征的含义,什么是离散特征,什么是连续特征。

    在机器学习中 特征 Feature 是输入数据中的属性或变量 用于描述样本或数据点 特征对于机器学习模型而言是输入的一部分 模型通过学习样本的特征与其对应的标签 或输出 之间的关系来做出预测或分类 特征可以分为不同类型 其中两个主要的类型是
  • .h5文件简介

    一 简介 HDF5 Hierarchical Data Format version 5 是一种用于存储和组织大量数据的文件格式 它支持高效地存储和处理大规模科学数据的能力 HDF5 是一种灵活的数据模型 可以存储多种数据类型 包括数值数据
  • 一网打尽目前常用的聚类方法,详细介绍了每一种聚类方法的基本概念、优点、缺点!!

    目前常用的聚类方法 1 K 均值聚类 K Means Clustering 2 层次聚类 Hierarchical Clustering 3 DBSCAN聚类 DBSCAN Clustering 4 谱聚类 Spectral Cluster
  • Python-一键爬取图片、音频、视频资源

    前言 使用Python爬取任意网页的资源文件 比如图片 音频 视频 一般常用的做法就是把网页的HTML请求下来通过XPath或者正则来获取自己想要的资源 这里我做了一个爬虫工具软件 可以一键爬取资源 媒体文件 但是需要说明的是 这里爬取资源
  • 机器学习 项目结构 数据预测 实验报告

    需求 我经过处理得到了测试值 然后进一步得到预测和真实值的比较 然后再把之前的所有相关的参数 评估指标 预测值 比较结果都存入excel 另外我还打算做测试报告模板 包括敏感性分析等 您建议我这些功能如何封装这些功能 哪些功能放到一个文件中
  • 【提示工程】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

    解决问题 探索大语言模型解决推理问题的能力 从头训练或微调模型 需要创建大量的高质量含中间步骤的数据集 成本过大 相关工作 1 使用中间步骤来解决推理问题 1 使用自然语言通过一系列中间步骤解决数学应用题 2 通过创建更大的数据集微调语言模
  • 第二部分相移干涉术

    典型干涉图 相移干涉术 相移干涉术的优点 1 测量精度高 gt 1 1000 条纹 边缘跟踪仅为 1 10 边缘 2 快速测量 3 低对比度条纹测量结果良好 4 测量结果不受瞳孔间强度变化的影响 独立于整个瞳孔的强度变化 5 在固定网格点获
  • 互操作性(Interoperability)如何影响着机器学习的发展?

    互操作性 Interoperability 也称为互用性 即两个系统之间有效沟通的能力 是机器学习未来发展中的关键因素 对于银行业 医疗和其他生活服务行业 我们期望那些用于信息交换的平台可以在我们需要时无缝沟通 我们每个人都有成千上万个数据
  • 详解数据科学自动化与机器学习自动化

    过去十年里 人工智能 AI 构建自动化发展迅速并取得了多项成就 在关于AI未来的讨论中 您可能会经常听到人们交替使用数据科学自动化与机器学习自动化这两个术语 事实上 这些术语有着不同的定义 如今的自动化机器学习 即 AutoML 特指模型构
  • 时间序列平稳性相关检验方法

    理解平稳性 一般来说 平稳时间序列是指随着时间的推移具有相当稳定的统计特性的时间序列 特别是在均值和方差方面 平稳性可能是一个比较模糊的概念 将序列排除为不平稳可能比说序列是平稳的更容易 通常不平稳序列有几个特征 平均值随时间推移发生变化
  • 蒙牛×每日互动合作获评中国信通院2023“数据+”行业应用优秀案例

    当前在数字营销领域 品牌广告主越来越追求品效协同 针对品牌主更注重营销转化的切实需求 数据智能上市企业每日互动 股票代码 300766 发挥自身数据和技术能力优势 为垂直行业的品牌客户提供专业的数字化营销解决方案 颇受行业认可 就在不久前举
  • 机器学习:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 机器学习算法实战案例:LSTM实现多变量多步负荷预测

    文章目录 1 数据处理 1 1 数据集简介 1 2 数据集处理 2 模型训练与预测 2
  • AI在广告中的应用——预测性定位和调整

    营销人员的工作就是在恰当的时间将适合的产品呈现在消费者面前 从而增加他们购买的可能性 随着时间的推移 营销人员能够深入挖掘越来越精准的客户细分市场 他们不仅具备了实现上述目标的能力 而且这种能力还在呈指数级提升 在AI技术帮助下 现在的营销
  • GPT4+Python近红外光谱数据分析及机器学习与深度学习建模

    详情点击链接 GPT4 Python近红外光谱数据分析及机器学习与深度学习建模 第一 GPT4 入门基础 1 ChatGPT概述 GPT 1 GPT 2 GPT 3 GPT 3 5 GPT 4模型的演变 2 ChatGPT对话初体验 注册与

随机推荐

  • 【数据清洗】总结

    写在前面 xff08 201908 xff09 xff1a 数据质量问题往往会影响到工作效果 xff0c 我们学习现代工具后 xff0c 很容易就建立起一个初步的模型 但是真正的工作是如何优化它 xff0c 而关键节点就包括数据的清洗和模型
  • Ubuntu安装Proxychains4

    平时在使用github的时候 xff0c 偶尔发现无法Clone仓库 xff0c 此时就需要用特别的上网的方式解决 一 安装proxychains4 sudo apt get install proxychains4 注意 国内某些软件源没
  • 关于OLSR协议中的MPR机制的阅读与理解

    主要参考Request For Comments7181 OLSRv2 及RFC文档进行理解 MPR机制简介 简介 MPR MultiPoint Relay多点中继 机制是OLSR Optimized Link State Routing最
  • open /run/flannel/subnet.env: no such file or directory

    查看pod的信息时发现报错 xff1a open run flannel subnet env no such file or directory 一是查看各个节点 xff0c 包括master 节点是否有 run flannel subn
  • maven 依赖com.google.code.kaptcha

    前言 在工程的pom xml文件里已经加了 span class hljs tag lt span class hljs title dependency span gt span span class hljs tag lt span c
  • 灰度共生矩阵GLCM及其matlab实现

    Prerequisites 概念 计算方式 对于精度要求高且纹理细密的纹理分布 我们取像素间距为 d 1 d 1 d 1 以下是方向的说明 我们来看 matlab内置工具箱中的灰度共生矩阵的生成函数graycomatrix gray lev
  • np.max 与 np.maximum

    1 参数 首先比较二者的参数部分 xff1a np max xff1a a axis 61 None out 61 None keepdims 61 False 求序列的最值最少接收一个参数axis xff1a 默认为列向 xff08 也即
  • matlab 中使用 GPU 加速运算

    为了提高大规模数据处理的能力 xff0c matlab 的 GPU 并行计算 xff0c 本质上是在 cuda 的基础上开发的 wrapper xff0c 也就是说 matlab 目前只支持 NVIDIA 的显卡 1 GPU 硬件支持 首先
  • Linux Ubuntu系统设置成中文语言

    1 打开 系统设置 xff1a 可以从右上角弹出菜单 xff0c 选择 System Settings 打开系统设置 也可以点击左侧 xff08 齿轮和扳手 xff09 快捷图标打开 2 首先选择软件更新服务器 xff0c 选择国内的 3
  • VNC 灰屏

    用vnc连接服务器的时候 xff0c 出现了灰屏 xff0c xff08 在xshell可以正常运行 xff09 上面会显示三个checkbox xff1a Accept clipboard from viewers Send clipbo
  • 从零开始学习树莓派4B与ROS历程(1)——安装ubantu系统,ROS以及配置远程SSH(一系列错误解决办法,无显示屏外设也可以安装系列)

    目录 安装ubuntu系统文件 1 使用显示器连接树莓派 2 使用SSH xshell安装 安装ROS 安装ubuntu系统文件 1 下载ubuntu系统文件Ubuntu18版 xff0c 目前最新都是21版本了 xff0c 但是树莓派处理
  • Ubuntu服务器端与客户端(RV1126)配置NFS实现文件夹共享

    这里写目录标题 1 NFS简介2 NFS实现步骤3 测试平台3 NFS安装方法1 xff09 安装 NFS 软件包2 xff09 设置 NFS 共享目录3 xff09 主机启动NFS 4 客户端配置方法1 xff09 连接客户端和服务器2
  • 由xubuntu桌面系统恢复到ubuntu桌面系统

    假定读者原来的系统为ubuntu桌面系统 xff0c 并且根据如下命令更换到xubuntu桌面系统 sudo apt get install xrdp sudo apt get install vnc4server sudo apt get
  • 设置Chrome以https方式访问指定网址

    1 打开Chrome xff0c 在地址栏键入chrome net internals xff0c 回车 2 在HSTS选项卡下的Domain中输入你想要实现这个强制跳转的域名 xff0c 如 twitter com gt https tw
  • winfrom自适应布局技巧

    两个技巧 控件的布局属性 Anchor技巧Dock技巧 FillLeftRightBottomTop 以上方法可能达不到想要的效果 xff0c 可以使用下面的方法 表格布局控件应用 TableLayoutPanel 对控件进行行列编辑 xf
  • x0vncserver

    vncserver By default a logged in user has a desktop provided by X Server on display 0 A user can share their desktop usi
  • k8s安装flannel组件出错

    安装完flannel组建后 xff0c 查看pod xff0c 显示Error 查看log 提示 xff1a Error registering network failed to acquire lease subnet 34 10 24
  • openjdk下载与安装

    openjdk下载与安装 官方网站和文档参考 http openjdk java net install 安装说明 http jdk java net 11 openjdk下载地址
  • DirectUI简介

    DirectUI界面库 取名自微软的一个窗口类名 DirectUIHWND xff0c 意为Paint on parent dc directly 即子窗口不以窗口句柄的形式创建 xff0c 只是逻辑上的窗口 xff0c 绘制在父窗口之上
  • 机器学习 之 Haar特征

    Haar特征 Haar特征原理综述 Haar特征是一种反映图像的灰度变化的 xff0c 像素分模块求差值的一种特征 它分为三类 xff1a 边缘特征 线性特征 中心特征和对角线特征 用黑白两种矩形框组合成特征模板 xff0c 在特征模板内用