一键抠图1:Python实现人像抠图 (Portrait Matting)

一键抠图1:Python实现人像抠图 (Portrait Matting)

目录

一键抠图1:Python实现人像抠图 (Portrait Matting)

1. 项目介绍

2. 抠图算法

3. Matting数据集

4. MODNet模型

 (1) 项目安装

 (2) 数据集说明

 (3) MODNet模型

5. Demo测试效果 

6. 源码下载(Python)

7.人像抠图C++版本

8.人像抠图Android版本


1. 项目介绍

抠图算法(英文中,一般称为Matting)有多种实现方式,一种是基于辅助信息输入的,加入一些先验信息(如Trimap,背景图,用户交互信息,深度等信息)提供抠图效果,如比较经典的Deep Image Matting和Semantic Image Matting这些算法加入Trimap; Background Matting算法需要提供背景图等;另一种是无需辅助信息,输入RGB图像,直接预测matte的方法,其效果相对第一种方法,会差很多。而对Portrait Matting(人像抠图),现在有很多方案在无需Trimap条件下,也可以获得不错的抠图效果,比如MODNet,Fast Deep Matting等算法,真正实现一健抠图的效果。

本篇博客是一键抠图项目系列之《Python实现人像抠图 (Portrait Matting)》,项目将在MODNet人像抠图算法基础上进行模型压缩和优化,开发一个效果相当不错的Matting算法,可以达到头发细致级别的人像抠图效果,为了方便后续模型工程化和Android平台部署,项目提供高精度版本人像抠图和轻量化快速版人像抠图,并提供Python/C++/Android多个版本;

尊重原创,转载请注明出处】https://blog.csdn.net/guyuealian/article/details/134784803

Android Demo APP下载地址:https://download.csdn.net/download/guyuealian/63228759

先展示一下一键人像抠图效果:


更多项目《一键抠图》系列文章请参考:

  1. 一键抠图1:Python实现人像抠图 (Portrait Matting)https://blog.csdn.net/guyuealian/article/details/134784803
  2. 一键抠图2:C/C++实现人像抠图 (Portrait Matting)https://blog.csdn.net/guyuealian/article/details/134790532
  3. 一键抠图3:Android实现人像抠图 (Portrait Matting)https://blog.csdn.net/guyuealian/article/details/134801795


2. 抠图算法

基于深度学习的Matting分为两大类:

  • 一种是基于辅助信息输入。即除了原图和标注图像外,还需要输入其他的信息辅助预测。最常见的辅助信息是Trimap,即将图片划分为前景,背景及过度区域三部分。另外也有以背景或交互点作为辅助信息。

  • 一种是不依赖任何辅助信息,直接对Alpha进行预测。如本博客复现的MODNet

第一种方法,需要加入辅助信息,而辅助信息一般较难获取,这也限制其应用,为了提升Matting的应用性,针对Portrait Matting领域MODNet摒弃了辅助信息,直接实现Alpha预测,实现了实时Matting,极大提升了基于深度学习Matting的应用价值。

更多抠图算法(Matting),请参考我的一篇博客《图像抠图Image Matting算法调研》:

图像抠图Image Matting算法调研_image matting调研-CSDN博客文章浏览阅读4.3k次,点赞8次,收藏68次。1.Trimap和StrokesTrimap和Strokes都是一种静态图像抠图算法,现有静态图像抠图算法均需对给定图像添加手工标记以增加抠图问题的额外约束。Trimap,三元图,是对给定图像的一种粗略划分,即将给定图像划分为前景、背景和待求未知区域Strokes则采用涂鸦的方式在图像上随意标记前景和背景区域,剩余未标记部分则为待求的未知区域Trimap是最常用的先验知识,多数抠图算法采用了Trimap作为先验知识,顾名思义Trimap是一个三元图,每个像素取值为{0,128,..._image matting调研https://blog.csdn.net/guyuealian/article/details/119648686可能,有小伙伴搞不清楚分割(segmentation)和抠图(matting)有什么区别,我这里简单说明一下:

  •  分割(segmentation):从深度学习的角度来说,分割本质是像素级别的分类任务,其损失函数最简单的莫过于是交叉熵CrossEntropyLoss(当然也可以是Focal Loss,IOU Loss,Dice Loss等);对于前景和背景分割任务,输出Mask的每个像素要么是0,要么是1。如果拿去直接做图像融合,就很不自然,Mask边界很生硬,这时就需要使用抠图算法了
  •  抠图(matting): 而抠图本质是一种回归任务,其损失函数可以是MSE Loss,L1 Loss,L2 Loss等,对于前景和背景抠图任务,输出Mask的每个像素是0~1之间的连续值,可看作是对图像透明通道(Alpha)的回归预测。可以用公式表示为C = αF + (1-α)B ,其中α(不透明度)、F(前景色)和B(背景色),alpha是[0, 1]之间的连续值,可以理解为像素属于前景的概率。在人像分割任务中,alpha只能取0或1,而抠图任务中,alpha可取[0, 1]之间的连续值,
  • 本质上就是一句话:分割是分类任务,而抠图是回归任务。

3. Matting数据集

一些开源的matting数据集

数据集

说明

matting_human_datasets

  • 本数据集为目前已知最大的人像matting数据集,包含34427张图像和对应的matting结果图。
  • 数据集由北京玩星汇聚科技有限公司高质量标注,使用该数据集所训练的人像软分割模型已商用。
  • 数据集中的原始图片来源于Flickr、百度、淘宝。经过人脸检测和区域裁剪后生成了600*800的半身人像。
  • GitHub - aisegmentcn/matting_human_datasets: 人像matting数据集,包含34427张图像和对应的matting结果图。
  • PS:Matting比较粗糙,没有达到头发细致抠图;不过数据比较大,可以作为pretrained数据集使用

Deep Image Matting

  • Adobe Research论文《Deep Image Matting》提供的Matting Dataset。大约有455张图片,论文将MSCOCO和PASCAL VOC当做背景图,与455张图片进行合成后,大概有45500张训练图片和1000张测试图片
  • 论文地址:https://sites.google.com/view/deepimagematting
  • 项目地址:GitHub - Joker316701882/Deep-Image-Matting: This is tensorflow implementation for paper "Deep Image Matting"
  • PS:该数据集发邮箱给作者申请即可,一般作为通用物体Matting数据集,比较精细;如果用于人像抠图,需要自行把含有人的图片挑选出来

PPM-100

  • PPM-100 是论文 MODNet (Github | Arxiv) 中提出的一个人像抠图基准,它包含了100张来自Flickr的人像图片,具有以下特点:

  • 精细标注 - 所有图像都被仔细标注并检查。
  • 丰富多样 - 图像涵盖全身/半身人像和各种姿态。
  • 高分辨率 - 图像的分辨率介于1080P和4K之间。
  • 自然背景 - 所有图像都包含原始无替换的背景。
  • 项目地址:GitHub - ZHKKKe/PPM: A High-Quality Photograpy Portrait Matting Benchmark

PPM-100下载:https://github.com/PaddlePaddle/PaddleSeg/tree/release/2.3/contrib/Matting

RealWorldPortrait-636

  • real-world portrait dataset
  • 项目地址:GitHub - yucornetto/MGMatting: This repository includes the official project of Mask Guided (MG) Matting, presented in our paper: Mask Guided Matting via Progressive Refinement Network

 Compsition-1k

  • 使用Deep Image Matting合成的数据集
  • 项目地址:GitHub - Yaoyi-Li/GCA-Matting: Official repository for Natural Image Matting via Guided Contextual Attention

HAttMatting

  • 项目地址:GitHub - yuhaoliu7456/CVPR2020-HAttMatting: Attention-Guided Hierarchical Structure Aggregation for Image Matting(CVPR2020)

 AM-2k

  • AM-2k contains 2,000 high-resolution natural animal images from 20 categories along with manually labeled alpha mattes. Some examples are shown as below, more can be viewed in the video demo (YouTube | bilibili | Google drive).

    AM-2k can be accessed from here (Google Drive | Baidu Wangpan (pw: 29r1)), please make sure that you have read this agreement before accessing the dataset. Please refer to the readme.txt in the dataset folder for more details.

  • 项目地址:GitHub - JizhiziLi/GFM: [IJCV 2022] Bridging Composite and Real: Towards End-to-end Deep Image Matting

BG-20k

  • BG-20k contains 20,000 high-resolution background images excluded salient objects, which can be used to help generate high quality synthetic data. Some examples are shown as below, more can be viewed in the video demo (YouTube | bilibili | Google drive).

    BG-20k can be accessed from here (Google Drive | Baidu Wangpan (pw: dffp)), please make sure that you have read this agreement before accessing the dataset. Please refer to the readme.txt in the dataset folder for more details.

  • 项目地址:GitHub - JizhiziLi/GFM: [IJCV 2022] Bridging Composite and Real: Towards End-to-end Deep Image Matting

VideoMatte240K

  • Background Matting V2 数据集

PhotoMatte85

其他的:

  • VideoMatte240K
  • PhotoMatte85
  • GitHub - thuyngch/Human-Segmentation-PyTorch: Human segmentation models, training/inference code, and trained weights, implemented in PyTorch
  • Automatic Portrait Segmentation for Image Stylization: 1800 images
  • Supervisely Person: 5711 images

4. MODNet模型

 (1) 项目安装

 整套工程项目基本结构如下:

 项目依赖python包请参考requirements.txt,使用pip安装即可:

numpy==1.21.6
matplotlib==3.2.2
Pillow==8.4.0
bcolz==1.2.1
easydict==1.9
onnx==1.8.1
onnx-simplifier==0.2.28
onnxoptimizer==0.2.0
onnxruntime==1.6.0
opencv-contrib-python==4.5.2.52
opencv-python==4.5.1.48
pandas==1.1.5
PyYAML==5.3.1
scikit-image==0.17.2
scikit-learn==0.24.0
scipy==1.5.4
seaborn==0.11.2
sklearn==0.0
tensorboard==2.5.0
tensorboardX==2.1
torch==1.7.1+cu110
torchvision==0.8.2+cu110
tqdm==4.55.1
xmltodict==0.12.0
pycocotools==2.0.2
pybaseutils==0.9.4
basetrainer

项目安装教程请参考(初学者入门,麻烦先看完下面教程,配置好开发环境):

  • 项目开发使用教程和常见问题和解决方法
  • 视频教程:1 手把手教你安装CUDA和cuDNN(1)
  • 视频教程:2 手把手教你安装CUDA和cuDNN(2)
  • 视频教程:3 如何用Anaconda创建pycharm环境
  • 视频教程:4 如何在pycharm中使用Anaconda创建的python环境

 (2) 数据集说明

关于训练数据如何生成的问题:

  • 原论文MODNet使用了PPM-100数据集+私有的数据集,并合成了大部分训练数据
  • 鄙人复现时,先使用matting_human_datasets数据集训练base-model当作pretrained模型;然后合并多个数据集(PPM-100 + RealWorldPortrait-636 + Deep Image Matting),采用背景图来自VOC+COCO+BG-20k ,一共合成了5W+的训练数据和500+的测试数据
  • 合成的方法有两种:方法1:利用公式:合成图 = 前景*alpha+背景*(1-alpha) ;方法二:前景+mask+背景通过GAN生成;

这是Python实现的背景合成,需要提供原始图像image,以及image的前景图像alpha,和需要合成的背景图像bg_img:

    def image_fusion(image: np.ndarray, alpha: np.ndarray, bg_img=(219, 142, 67)):
        """
        图像融合:合成图 = 前景*alpha+背景*(1-alpha)
        :param image: RGB图像(uint8)
        :param alpha: 单通道的alpha图像(uint8)
        :param bg_img: 背景图像,可以是任意的分辨率图像,也可以指定指定纯色的背景
        :return: 返回与背景合成的图像
        """
        if isinstance(bg_img, tuple) or isinstance(bg_img, list):
            bg = np.zeros_like(image, dtype=np.uint8)
            bg_img = np.asarray(bg[:, :, 0:3] + bg_img, dtype=np.uint8)
        if len(alpha.shape) == 2:
            # alpha = cv2.cvtColor(alpha, cv2.COLOR_GRAY2BGR)
            alpha = alpha[:, :, np.newaxis]
        if alpha.dtype == np.uint8:
            alpha = np.asarray(alpha / 255.0, dtype=np.float32)
        sh, sw, d = image.shape
        bh, bw, d = bg_img.shape
        ratio = [sw / bw, sh / bh]
        ratio = max(ratio)
        if ratio > 1:
            bg_img = cv2.resize(bg_img, dsize=(math.ceil(bw * ratio), math.ceil(bh * ratio)))
        bg_img = bg_img[0: sh, 0: sw]
        image = image * alpha + bg_img * (1 - alpha)
        image = np.asarray(np.clip(image, 0, 255), dtype=np.uint8)
        return image

当然,为了方便JNI调用,我这里还实现C++版本图像合成算法,这部分图像处理的基本工具,都放在我的base-utils中

/***
 * 实现图像融合:out = imgBGR * matte + bg * (1 - matte)
 * Fix a Bug: 1-alpha实质上仅有B通道参与计算,多通道时(B,G,R),需改Scalar(1.0, 1.0, 1.0)-alpha
 * @param imgBGR 输入原始图像
 * @param matte  输入原始图像的Mask,或者alpha,matte
 * @param out    输出融合图像
 * @param bg     输入背景图像Mat(可任意大小),也可以通过Scalar指定纯色的背景
 */
void image_fusion(cv::Mat &imgBGR, cv::Mat matte, cv::Mat &out, cv::Mat bg) {
    assert(matte.channels() == 1);
    out.create(imgBGR.size(), CV_8UC3);
    vector<float> ratio{(float) imgBGR.cols / bg.cols, (float) imgBGR.rows / bg.rows};
    float max_ratio = *max_element(ratio.begin(), ratio.end());
    if (max_ratio > 1.0) {
        cv::resize(bg, bg, cv::Size(int(bg.cols * max_ratio), int(bg.rows * max_ratio)));
    }
    bg = image_center_crop(bg, imgBGR.cols, imgBGR.rows);
    int n = imgBGR.channels();
    int h = imgBGR.rows;
    int w = imgBGR.cols * n;
    // 循环体外进行乘法和除法运算
    matte.convertTo(matte, CV_32FC1, 1.0 / 255, 0);
    for (int i = 0; i < h; ++i) {
        uchar *sptr = imgBGR.ptr<uchar>(i);
        uchar *dptr = out.ptr<uchar>(i);
        float *mptr = matte.ptr<float>(i);
        uchar *bptr = bg.ptr<uchar>(i);
        for (int j = 0; j < w; j += n) {
            //float alpha = mptr[j] / 255; //循环体尽量减少乘法和除法运算
            float alpha = mptr[j / 3];
            float _alpha = 1.f - alpha;
            dptr[j] = uchar(sptr[j] * alpha + bptr[j] * _alpha);
            dptr[j + 1] = uchar(sptr[j + 1] * alpha + bptr[j + 1] * _alpha);
            dptr[j + 2] = uchar(sptr[j + 2] * alpha + bptr[j + 2] * _alpha);
        }
    }
}

 (3) MODNet模型

本文主要在MODNet人像抠图算法基础上进行模型压缩和优化,关于《MODNet: Trimap-Free Portrait Matting in Real Time》,请参考:

  • Paper: https://arxiv.org/pdf/2011.11961.pdf
  • 官方Github: GitHub - ZHKKKe/MODNet: A Trimap-Free Solution for Portrait Matting in Real Time 

 MODNet模型学习分为三个部分,分别为:语义部分(S),细节部分(D)和融合部分(F)

  • 在语义估计中,对high-level的特征结果进行监督学习,标签使用的是下采样及高斯模糊后的GT,损失函数用的L2-Loss,用L2loss应该可以学到更soft的语义特征;
  • 在细节预测中,结合了输入图像的信息和语义部分的输出特征,通过encoder-decoder对人像边缘进行单独地约束学习,用的是交叉熵损失函数。为了减小计算量,encoder-decoder结构较为shallow,同时处理的是原图下采样后的尺度。
  • 在融合部分,把语义输出和细节输出结果拼起来后得到最终的alpha结果,这部分约束用的是L1损失函数。

官方GitHub仅仅放出推理代码,并未提供训练代码和数据处理代码 ;鄙人参考原论文花了几个星期的时间,总算复现了其基本效果,并做了一些轻量化和优化的工作,主要有:

  • 复现Pytorch版本的MODNet训练过程和数据处理
  • 增加了数据增强方法:如多尺度随机裁剪,Mosaic(拼图),随机背景融合等方法,提高模型泛化性
  • 对MODNet骨干网络backbone进行轻量化,减少计算量
  • 模型压缩,目前提供三个版本:高精度人像抠图modnet+快速人像抠图modnet0.75+超快人像抠图modnet0.5
  • 转写模型推理过程,实现C++版本人像抠图算法
  • 实现Android版本人像抠图算法,支持CPU和GPU
  • 提供高精度版本人像抠图,可以达到精细到发丝级别的抠图效果(Android GPU 150ms,  CPU 500ms左右)
  • 提供轻量化快速版人像抠图,满足基本的人像抠图效果,可以在Android达到实时的抠图效果(Android GPU 60ms,  CPU 140ms左右)

高精度人像抠图modnet+快速人像抠图modnet0.75+超快人像抠图modnet0.5的模型参数量和计算量:

模型input sizeFLOPs and Params
modnet416×416Model FLOPs 10210.24M, Params 6.44M
modnet0.75320×320Model FLOPs 3486.23M, Params 3.64M
modnet0.5320×320Model FLOPs 1559.07M, Params 1.63M

最近发现,百度PaddleSeg团队也复现了MODNet算法(基于PaddlePaddle框架,非Pytorch版本),提供了更丰富的backbone模型选择,如MobileNetV2,ResNet50,HRNet_W18,可适用边缘端、服务端等多种任务场景,有兴趣的可以看看:

 PaddlePaddle版本:https://github.com/PaddlePaddle/PaddleSeg/tree/release/2.3/contrib/Matting


5. Demo测试效果 

项目环境配置好后,运动demo.py即可测试抠图效果,方法

  • 测试图片
# 测试图片
python demo.py --model_type "modnet" --model_file "work_space/modnet_416/model/best_model.pth" --image_dir "data/test_images"
  • 测试视频文件
# 测试视频文件
python demo.py --model_type "modnet" --model_file "work_space/modnet_416/model/best_model.pth" --video_file "data/video/video-test1.mp4"

  • 测试摄像头
# 测试摄像头
python demo.py --model_type "modnet" --model_file "work_space/modnet_416/model/best_model.pth" --video_file 0

下图GIF是Python版本的视频抠图效果

实际使用中,建议你:

  • 背景越单一,抠图的效果越好,背景越复杂,抠图效果越差;建议你实际使用中,找一比较单一的背景,如墙面,天空等
  • 上半身抠图的效果越好,下半身或者全身抠图效果较差;本质上这是数据的问题,因为训练数据70%都是只有上半身的
  • 白种人抠图的效果越好,黑人和黄种人抠图效果较差;这也是数据的问题,因为训练数据大部分都是隔壁的老外

下图是高精度版本人像抠图和快速人像抠图的测试效果,相对而言,高精度版本人像抠图可以精细到发丝级别的抠图效果;而快速人像构图目前仅能实现基本的抠图效果

高精度版本人像抠图快速人像抠图

6. 源码下载(Python)

项目源码下载地址:Python实现人像抠图 (Portrait Matting)

项目源码内容包含:

  • 提供Python的推理代码(不含训练代码和不含数据集)
  • 提供高精度版本人像抠图模型(modnet_416),可以达到精细到发丝级别的抠图效果
  • 提供轻量化快速版人像抠图模型(modnet0.75_320和modnet0.5_320),满足基本的人像抠图效果,
  • Demo支持图片抠图,视频抠图,摄像头抠图

7.人像抠图C++版本

一键抠图2:C/C++实现人像抠图 (Portrait Matting)https://blog.csdn.net/guyuealian/article/details/134790532


8.人像抠图Android版本

一键抠图3:Android实现人像抠图 (Portrait Matting)https://blog.csdn.net/guyuealian/article/details/134801795

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/221801.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows循环检测,直到网络通/断后执行指定命令

前言 前几天&#xff0c;一个朋友让我帮他做个脚本或者批处理&#xff0c;要实现的功能很简单&#xff1a;开机时检测网络是否联通&#xff0c;如果联通了就执行一个指定的程序&#xff0c;然后脚本就可以退出了。 批处理的解决方法 手动操作时&#xff0c;我们通常使用ping…

(2)(2.4) TerraRanger Tower/Tower EVO(360度)

文章目录 前言 1 安装传感器并连接 2 通过地面站进行配置 3 参数说明 前言 TeraRanger Tower 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用距离约为 4.5m。 TeraRanger Tower EVO 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用…

电子编曲软件FL Studio2024汉化中文免费版下载

电子编曲需要什么软件&#xff1f;市面上的宿主软件都可以完成电子编曲的工作&#xff0c;主要适用电子音乐风格编曲的宿主软件有FL Studio、Ableton Live等。电子编曲需要什么基础&#xff1f;需要对于电子音乐足够熟悉、掌握基础乐理知识以及宿主软件的使用方法。 就我个人的…

TinyMPC - CMU (卡耐基梅隆大学)开源的机器人 MPC 控制器

系列文章目录 CasADi - 最优控制开源 Python/MATLAB 库 文章目录 系列文章目录前言一、机器人硬件对比1.1 Teensy 上的微控制器基准测试1.2 机器人硬件1.3 BibTeX 二、求解器三、功能&#xff08;预期&#xff09;3.1 高效3.2 鲁棒3.3 可嵌入式3.4 最小依赖性3.5 高效热启动3.…

Geoserver发布2000坐标系遇到的问题总结

在Geoserver上发布2000坐标系的服务时&#xff0c;要想正常发布服务&#xff0c;不仅仅是要涉及2000坐标系&#xff0c;还需要在发布的时候选择对坐标系。具体问题描述如下&#xff1a; 1.问题描述&#xff1a; 在发布好2000坐标系的服务后&#xff0c;在超图的平台加载服务时&…

回溯算法:复原IP地址 子集 子集II

93.复原IP地址 思路&#xff1a; 与分割回文串相似&#xff0c;复原ip地址是将给定字符串分割成点分十进制的四段&#xff0c;切割问题就可以使用回溯搜索法把所有可能性搜出来。回溯三部曲&#xff1a; 递归参数&#xff1a;除了传入的需要分割的字符串&#xff0c;仍然需要…

每天五分钟计算机视觉:VGG网络相对于AlexNet网络有哪些不同?

本文重点 在前面的课程中&#xff0c;我们已经学习了VGG网络模型&#xff0c;也学习了AlexNet网络模型&#xff0c;AlexNet模型先于VGG网络模型产生&#xff0c;所以VGG在一定程度上要优于AlexNet模型&#xff0c;二者来看一下&#xff0c;二者究竟有什么不同&#xff1f; 深度…

数据湖和中央数据仓库的设计

设计数据湖或中央数据仓库是许多大型组织的主要职能&#xff0c;这些组织每天处理数百万笔交易&#xff0c;并对这些交易进行进一步的报告、预测或机器学习项目分析。 为了将所有来自源系统&#xff08;我们称之为“上游”&#xff09;到其他业务应用&#xff08;所谓“下游”&…

基于ssm vue技术的品牌银饰售卖平台源码和论文737

摘 要 本论文主要是针对品牌银饰售卖而开发进行概述&#xff0c;主要包括对研究的背景和研究现状&#xff0c;以及研究目的等的阐述&#xff0c;也对该系统的各种功能要求&#xff0c;对系统结构&#xff0c;数据库的设计等进行讨论。随着科技与技术的发展&#xff0c;利用计…

【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中

前言 2023年11月14日英特尔 FPGA中国技术日&#xff0c;Intel刚发布了新的FPGA系列&#xff0c;官网信息太多&#xff0c;我这里结合以前的信息&#xff0c;简单汇总更新一下&#xff0c;方便大家快速了解Intel/Altera FPGA家族。 目录 前言 Altera和Intel 型号汇总 1. Agi…

Pycharm的字体缩放设置

法1 法2 放大操作 increase 缩小操作 decrease 保存操作&#xff0c;点击OK结束

数学建模-基于机器学习的家政行业整体素质提升因素分析

基于机器学习的家政行业整体素质提升因素分析 整体求解过程概述(摘要) 家政服务业即为家庭提供多种类服务的专门行业&#xff0c;在第三产业中占有重要地位。但近年来&#xff0c;由于人工智能家居产业的发展与客户对家政从业者的要求水平不断提高&#xff0c;家政行业仍面对较…

Token 和 N-Gram、Bag-of-Words 模型释义

ChatGPT&#xff08;GPT-3.5&#xff09;和其他大型语言模型&#xff08;Pi、Claude、Bard 等&#xff09;凭何火爆全球&#xff1f;这些语言模型的运作原理是什么&#xff1f;为什么它们在所训练的任务上表现如此出色&#xff1f; 虽然没有人可以给出完整的答案&#xff0c;但…

基于Java SSM框架实现社区疫情防控管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现社区疫情防控管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;社区疫情防控管理信息系统当然也不能排除在外。社区疫情防控管理信息系…

记录:Unity脚本的编写9.0

目录 射线一些准备工作编写代码 突然发现好像没有写过关于射线的内容&#xff0c;我就说怎么总感觉好像少了什么东西&#xff08;心虚 那就在这里写一下关于射线的内容吧&#xff0c;将在这里实现射线检测鼠标点击的功能 射线 射线是一种在Unity中检测碰撞器或触发器的方法&am…

vivado如何进行增量编译

情况1 如果是根据 placement 或者 routing 进行增量编译&#xff0c;直接右键点击要跑的 implement,&#xff0c;选择set incremental implement &#xff0c; 然后选第二项&#xff0c;指定 要参考的 routing.dcp 或者 placement.dcp 的路径即可 情况2 如果只参考 synthesis …

网络层之IPv6

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

2023年【危险化学品经营单位主要负责人】及危险化学品经营单位主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人根据新危险化学品经营单位主要负责人考试大纲要求&#xff0c;安全生产模拟考试一点通将危险化学品经营单位主要负责人模拟考试试题进行汇编&#xff0c;组成一套危险化学品经营单位主要…

linux无法打开M4a格式音频的解决方法

linux是开源系统&#xff0c;之所以打不开&#xff0c;是因为部分linux系统为了避免版权问题&#xff0c;没有m4a的解码插件。所以&#xff0c;解决的办法是安装如下两个非常小的转换器&#xff0c;我们一般用不到转换器的功能&#xff0c;而是反向应用&#xff0c;通过两个几十…

jenkins搭建文档

jenkins搭建文档 简介一、安装运行环境1、安装JDK环境1&#xff09;查询自带的JDK2&#xff09;卸载自带的JDK3&#xff09;创建java文件夹并将jdk上传到该文件夹4&#xff09;解压5&#xff09;配置环境变量6&#xff09;配置生效7&#xff09;验证是否成功 2、安装maven环境1…