精华内容
下载资源
问答
  • 人像分割是指从背景中分割人的过程。 在这里,我们使用语义分割的概念来预测图像中每个像素的标签(密集预测)。 此技术广泛用于计算机视觉应用程序,例如移动设备上的背景替换和背景模糊。 在这里,我们将自己限制...
  • Tensorflow实现图像分割的自动人像分割
  • 人像分割专栏

    千次阅读 2019-03-18 23:28:02
    人像分割数据集 对于人像分割任务,可以利用human parsing的几个公开数据集,如LIP、ATR、Multi-parsing数据集。 可以在其官方网站中下载对应数据集,也可以在CSDN中的连接下载, 人像分割代码: ...

    人像分割数据集

    对于人像分割任务,可以利用human parsing的几个公开数据集,如LIP、ATR、Multi-parsing数据集。
    可以在其官方网站中下载对应数据集,也可以在CSDN中的连接下载,

    人像分割代码:

    https://github.com/BOBrown/deeparsing-master

    展开全文
  • Unet用于人像分割

    2021-05-31 21:19:43
    人像分割简介UNet的简介UNet实现人像分割 人像分割简介 人像分割的相关应用非常广,例如基于人像分割可以实现背景的替换做出各种非常酷炫的效果。我们将训练数据扩充到人体分割,那么我们就是对人体做美颜特效处理,...

    论文地址:U-Net: Convolutional Networks for Biomedical Image Segmentation

    主要内容

    人像分割简介UNet的简介UNet实现人像分割
    人像分割简介

    人像分割的相关应用非常广,例如基于人像分割可以实现背景的替换做出各种非常酷炫的效果。我们将训练数据扩充到人体分割,那么我们就是对人体做美颜特效处理,同时对背景做其他的特效处理,这样整张画面就会变得更加有趣,更加提高颜值了,这里我们对人体前景做美颜调色处理,对背景做了以下特效:

    ①景深模糊效果,用来模拟双摄聚焦效果;②马赛克效果③缩放模糊效果④运动模糊效果⑤油画效果⑥线条漫画效果⑦Glow梦幻效果⑧铅笔画场景效果⑨扩散效果

    而在在实现这些效果之前,所需要的一步操作都是需要将人像抠出来。今天的主要内容是要介绍如何使用UNet实现人像分割。

    UNet的简介

    UNet的结构非常简单,广泛应用于医学图像分割,2015年发表在 MICCAI,谷歌学术上目前引用量8894,可以看出来其影响力。

    UNet的结构,有两个最大的特点,U型结构和skip-connection(如下图)。

    在这里插入图片描述

    UNet网络,形似一个U字母:首先进行Conv(两次)+Pooling下采样;然后Deconv反卷积进行上采样(部分采用resize+线性插值上采样),crop之前的低层feature map,进行融合;然后再次上采样。重复这个过程,直到获得输出388x388x2的feature map,最后经过softmax获得output segment map。总体来说与FCN思路非常类似。
    人像分割项目链接:

    https://github.com/leijue222/portrait-matting-unet-flask
    
    官方下载链接:http://www.cse.cuhk.edu.hk/leojia/projects/automatting/index.html
    
    或者:
    
    百度网盘:http://pan.baidu.com/s/1dE14537
    
    密码:ndg8
    

    定义UNet 需要用的主要模块

    """ Parts of the U-Net model """
    
    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    
    
    class DoubleConv(nn.Module):
        """(convolution => [BN] => ReLU) * 2"""
    
        def __init__(self, in_channels, out_channels):
            super().__init__()
            self.double_conv = nn.Sequential(
                nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1),
                nn.BatchNorm2d(out_channels),
                nn.ReLU(inplace=True),
                nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1),
                nn.BatchNorm2d(out_channels),
                nn.ReLU(inplace=True)
            )
    
        def forward(self, x):
            return self.double_conv(x)
    
    
    class Down(nn.Module):
        """Downscaling with maxpool then double conv"""
    
        def __init__(self, in_channels, out_channels):
            super().__init__()
            self.maxpool_conv = nn.Sequential(
                nn.MaxPool2d(2),
                DoubleConv(in_channels, out_channels)
            )
    
        def forward(self, x):
            return self.maxpool_conv(x)
    
    
    class Up(nn.Module):
        """Upscaling then double conv"""
    
        def __init__(self, in_channels, out_channels, bilinear=True):
            super().__init__()
    
            # if bilinear, use the normal convolutions to reduce the number of channels
            if bilinear:
                self.up = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
            else:
                self.up = nn.ConvTranspose2d(in_channels // 2, in_channels // 2, kernel_size=2, stride=2)
    
            self.conv = DoubleConv(in_channels, out_channels)
    
        def forward(self, x1, x2):
            x1 = self.up(x1)
            # input is CHW
            diffY = torch.tensor([x2.size()[2] - x1.size()[2]])
            diffX = torch.tensor([x2.size()[3] - x1.size()[3]])
    
            x1 = F.pad(x1, [diffX // 2, diffX - diffX // 2,
                            diffY // 2, diffY - diffY // 2])
            # if you have padding issues, see
            # https://github.com/HaiyongJiang/U-Net-Pytorch-Unstructured-Buggy/commit/0e854509c2cea854e247a9c615f175f76fbb2e3a
            # https://github.com/xiaopeng-liao/Pytorch-UNet/commit/8ebac70e633bac59fc22bb5195e513d5832fb3bd
            x = torch.cat([x2, x1], dim=1)
            return self.conv(x)
    
    
    class OutConv(nn.Module):
        def __init__(self, in_channels, out_channels):
            super(OutConv, self).__init__()
            self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=1)
    
        def forward(self, x):
            return self.conv(x)
    
    

    利用上面定义好的模块,轻松的实现UNet网络

    """ Full assembly of the parts to form the complete network """
    
    import torch.nn.functional as F
    
    from .unet_parts import *
    
    
    class UNet(nn.Module):
        def __init__(self, n_channels, n_classes, bilinear=True):
            super(UNet, self).__init__()
            self.n_channels = n_channels
            self.n_classes = n_classes
            self.bilinear = bilinear
    
            self.inc = DoubleConv(n_channels, 64)
            self.down1 = Down(64, 128)
            self.down2 = Down(128, 256)
            self.down3 = Down(256, 512)
            self.down4 = Down(512, 512)
            self.up1 = Up(1024, 256, bilinear)
            self.up2 = Up(512, 128, bilinear)
            self.up3 = Up(256, 64, bilinear)
            self.up4 = Up(128, 64, bilinear)
            self.outc = OutConv(64, n_classes)
    
        def forward(self, x):
            x1 = self.inc(x)
            x2 = self.down1(x1)
            x3 = self.down2(x2)
            x4 = self.down3(x3)
            x5 = self.down4(x4)
            x = self.up1(x5, x4)
            x = self.up2(x, x3)
            x = self.up3(x, x2)
            x = self.up4(x, x1)
            logits = self.outc(x)
            return logits
    
    

    如果你想重新训练的话,也很容易,根据上面提供的数据集,将原图和mask分别

    放置在 文件夹 data/imgs和 data/masks 路径下即可

    然后运行下面的代码

    python train.py -e 200 -b 1 -l 0.1 -s 0.5 -v 15.0
    

    各个参数的含义

    -e 表示 epoch 数

    -b 表示 batch size

    -l 表示学习率

    -s 表示 scale

    -v 表示 验证集所占的百分比

    参考:unet训练自己的数据集_基于UNet网络实现的人像分割 | 附数据集

    展开全文
  • 基于深度神经网络的移动端人像分割.pdf
  • 人像分割之ExtremeC3Net

    2021-03-23 23:33:02
    人像分割任务作为许多任务的一个中间阶段,对实时性要求极高,并且当前缺乏大规模的人像分割数据集,为此论文提出ExtremeC3Net模型和用于进行数据扩充的简单方法。ExtremeC3Net基于改进的C3模块,能够实现精度较高...

    1. 摘要

    人像分割任务作为许多任务的一个中间阶段,对实时性要求极高,并且当前缺乏大规模的人像分割数据集,为此论文提出ExtremeC3Net模型和用于进行数据扩充的简单方法。ExtremeC3Net基于改进的C3模块,能够实现精度较高速度极快的人像分割,并且这种极轻量化的分割网络也在其他任务中给了我们应用的启发。
    论文:https://arxiv.org/abs/1908.03093
    代码:https://github.com/clovaai/ext_portrait_segmentation

    2. 改进的C3模块

    轻量化语义分割网络多采用深度可分离卷积和空洞卷积结合的方式,提升性能的同时保持尽可能大的感受野,但是前者对于标准卷积的不恰当近似和后者存在的空格效应,使得特征图信息丢失,模型表现不佳。为此之前有文章提出C3模块即"Concentrated-Comprehensive Convolution Block",用于构建新型的轻量化语义分割网络。
    在这里插入图片描述
    本文对该模块进行调整与改进,模型结构如下所示:
    在这里插入图片描述
    其中不同层的改进C3模块的扩张率不再相同,而是采用了不同的扩张率,如下表所示:
    在这里插入图片描述

    2. ExtremeC3Net 架构

    ExtremeC3Net基于双分支结构,如下图所示,分为CoarseNet分支和FineNet分支,前者用于提取生成的语义信息而后者用于提取千层的位置细节,最终将二者的特征图逐元素相加。
    在这里插入图片描述
    CoarseNet分支由一系列改进的C3模块组成,能够给出一个粗糙的分割结果。该分支首先通过一个步长为2的卷积和一个改进的C3模块,将特征图尺寸缩小至原来的四分之一,接着7个C3模块依次产生特征图(不进行下采样,该分支在两个特定的点进行下采样),每个C3模块都有不同的扩张率组合,最后应用一个点卷积,使得其与FineNet的输出特征图通道数相同。FineNet分支用于产生精细的分割边界,首先下采样为原始图像尺寸的一半,然后应用C3module进行空间细节信息的提取。然后应用双线性插值上采样(CoarseNet上采样因子为4,FineNet上采样因子为2),最后进行一个逐元素的相加。

    文章在训练模型的时候使用了Lovasz损失,这个损失不但用于主分割流程,还用于边界位置辅助分割网络(使用二进制掩码的形态学腐蚀和膨胀的差作为分割结果的边缘),最终损失为:
    在这里插入图片描述

    3.数据扩充方法

    从通用数据集上跳出包含人像的数据和分割结果;使用DeepLabV3+通用目标分割网络再在人像数据上微调,用于产生人像分割的掩码。(这种方法有什么好特意说的,我也没想明白哈哈~)

    4.实验结果

    EG1800数据集:
    在这里插入图片描述
    在这里插入图片描述

    5. 最后

    展开全文
  • 百度人像分割API

    2021-09-11 19:17:52
    配置API的视频教程在这里。建议看视频,视频里的很详细。 视频教程 百度Ai平台链接 这是最后的代码 ...人像分割 ''' file_path = 'F:/630/images/test/4.jpg' img = Image.open(file_path) width = img.wid

    配置API的视频教程在这里。建议看视频,视频里的很详细。
    视频教程
    百度Ai平台链接
    这是最后的代码
    代码和教程的代码一样

    import requests
    import base64
    
    import cv2
    import numpy as np
    import base64
    
    from PIL import Image
    '''
    人像分割
    '''
    file_path = 'F:/630/images/test/4.jpg'
    img = Image.open(file_path)
    
    width = img.width       #图片的宽
    height = img.height      #图片的高
    
    request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg"
    # 二进制方式打开图片文件
    f = open(file_path, 'rb')
    img = base64.b64encode(f.read())
    
    params = {"image":img}
    access_token = '24.08f1b607452661766d1f84729094d470.2592000.1633934401.282335-24834460'
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    # if response:
    #     print (response.json())
    
    
    
    
    labelmap = base64.b64decode(response.json()['labelmap'])    # res为通过接口获取的返回json
    nparr = np.frombuffer(labelmap, np.uint8)
    labelimg = cv2.imdecode(nparr, 1)
    # width, height为图片原始宽、高
    labelimg = cv2.resize(labelimg, (width, height), interpolation=cv2.INTER_NEAREST)
    im_new = np.where(labelimg==1, 255, labelimg)
    cv2.imwrite('F:/630/images/15/4.png', im_new)
    

    实现效果这样

    在这里插入图片描述在这里插入图片描述
    图片是百度找的图

    可能会出现的报错是

    KeyError: ‘labelmap’

    这主要是因为你要处理的图片太大了。把它的容量改小一点。

    如果有什么问题,可以私信我或者留言

    展开全文
  • 人像分割演示 此原始演示是为 hackathon构建的。 跑步 使用docker-compose触发后端+前端+代理: docker-compose up --build 参考
  • PaddleSeg快速开始之 人像分割

    千次阅读 2020-06-09 16:27:54
    PaddleSeg快速开始之人像分割
  • 有个客户要在视频编辑SDK里增加 人像分割的功能, 感觉这个很有意思, 就写了如下的文字. AI人像分割SDK: 1. 提供的是裸API(或摄像头预览) , 核心是3个方法:初始化, 分割(图像输入和图像输出),释放. 2. 好处是灵活,...
  • 一个配对的人像分割数据集 文末关注,后台回复,即可获取 一个配对的人像分割数据集 数据集介绍: This dataset contains 1700 training images and 300 testing images, along with their respective alpha matte...
  • 人像分割】随读

    2020-03-19 08:59:07
    1. 视频人像分割 参考自:https://zhuanlan.zhihu.com/p/48080465 视频人像分割可以看成是一个特殊的Semantic Segmentation任务,他需要把视频中每帧图像的每一个像素点都打上一个类别标签。和典型的Semantic ...
  • Supervisely 人像分割数据集

    千次阅读 2020-06-29 15:42:01
    Supervisely 人像分割数据集包含5711 张图片, 6884 个人像注释。 获取数据集 数据集的下载地址:https://cloud.enterprise.deepsystems.io/s/NxqWAtEyCkCaCMY 如果无法下载,就需要注册登录了。 操作顺序如下:...
  • U-net用于人像分割的尝试前言常见语义分割模型编码器/解码器(encoder/decoder)结构U-net模型搭建U-net人像分割训练过程测试结果后记 前言 最近在学习有关语义分割的知识,关于语义分割可能有的同学不清楚是什么...
  • Supervisely 人像分割数据集格式转换

    千次阅读 2020-06-29 16:20:57
    人像分割数据集中人像的标注有两种几何类型:位图(bitmap),多边形(polygon)。自己解析需要对这两种类型进行处理,参考“Supervisely人像分割数据集格式解析”。个人建议使用方法2。supervisely_lib提供了统一的...
  • 这里采用该数据做了人像分割的小demo。 Supervisely 人像分割数据集格式转换 1. 测试 1.1 环境采用本机的torch140 1.2 下载预训练的模型到ckpt/ade20k-resnet50dilated-ppm_deepsup 预训练模型 | 提取码: 67xi 1.2...
  • 百度人像分割API调用——一键抠图

    万次阅读 2018-11-21 14:11:15
     今天,就以百度“人像分割技术”为例,一探究竟。 核心能力 - 精准识别图像中的人体轮廓边界,将人体轮廓与图像背景进行分离,实现像素级分割,一键抠像。 技术优势 - 适应性强:图像中有多个人...
  • 百度人像分割Demo

    2019-01-02 15:21:49
    基于百度AI开放平台的图像分割示例Demo,具体使用可以参考博主博客
  • 文章来源于AI算法与图像处理,作者AI_study今天要分享的是人像分割相关的内容,如果你喜欢的话,欢迎三连哦主要内容人像分割简介UNet的简介UNet实现人像分割人像分割简介人像分割的...
  • 人像分割 HumanSeg一、人像分割模型1.1 计算复杂度和参数量二、安装2.1 安装PaddlePaddle2.2 安装 PaddleSeg 包2.3 下载 PaddleSeg 仓库三、快速体验3.1 下载 Inference Model3.2 下载测试数据3.3 视频流人像分割3.4...
  • 调用百度AI人像分割接口 看一下示例图转换后的效果 给透明背景的图片增加背景色 先看个效果图 Java代码实现 调用示例代码 之前在百度AI社区写的人像分割帖子,最近有一些开发者会遇到返回的透明图的base64存...
  • 人像分割技术目前已经逐渐成熟,在抖音、快手、美图等等APP中已经都有应用,而且是Camera实时处理,然而,追究细节,各家效果却大同小异,都存在一个问题:无法处理好边缘细节的分割,尤其是头发丝的处理,这里以...
  •   人像分割任务作为许多任务的一个中间阶段,对实时性要求极高,并且当前缺乏大规模的人像分割数据集,为此论文提出ExtremeC3Net模型和用于进行数据扩充的简单方法。ExtremeC3Net基于改进的C3模块,能够实现精度较...
  • 人像分割》 对于输入的一张图片(可正常解码,且长宽比适宜),识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换、照片合成、身体特效等场景。 好了废话不多说。。。。 https://ai.baidu.com/sdk#body ...
  • 本文使用百度AI开放平台提供的免费人像分割API实现抠图 这点百度是很良心的,看过很多同款API,其他都得花钱 免费体验的次数也就几次、几十次调用,而百度直接就是50000次! 况且百度是做AI比较专业的,处理出来的...
  • python调用百度AI的方法不用多说,实现人像分割的代码如下: # -*- coding: utf-8 -*- """ Created on Mon Feb 1 21:25:21 2021 @author: lenovo """ from aip import AipBodyAnalysis import cv2 import numpy as ...
  • 目的:在本地输入图像,调用百度云上的人像分割算法,实现人像分割。 网址:https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F%3Ffromai%3D1#/ai/body/app/list ...
  • 这类方法遵循传统的语义分割思路,同时针对人像的特点(如边缘、关键点等)做进一步优化,达到了较好的分割效果,但由于语义分割任务的天生局限性,这类人像分割虽然精度高但往往较为粗糙,因此现在可做的空间并不大...
  •   人像分割任务作为许多任务的一个中间阶段,对实时性要求极高,并且当前缺乏大规模的人像分割数据集,为此论文提出SiNet模型和用于进行数据扩充的简单方法。SINet中的空间压缩模块使用多尺度感受也来获取图像中...
  • 人像分割识别图像中的人体轮廓,与背景进行分离,再与背景图结合就能实现身在Office,也能留下旅游胜地的形象了吧。说干就干,代码奉上。 2.平台接入 人像分割接入网址:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,643
精华内容 1,057
关键字:

人像分割