数字人解决方案——解决ER-NeRF/RAD-NeRF人像分割的问题

news2024/9/21 11:09:51

一、训练数据人像分割

训练ER-NeRF或者RAD-NeRF时,在数据处理时,其中有一步是要把人像分割出来,而且人像要分成三块,人的头部,人的有脖子,人的身体部分,效果如下:
在这里插入图片描述
从上面的分割的结果,可以到,算法最终要的结果是头部用蓝色表示,脖子用绿色表示,身体部用红色表示,背景部分用白色表示,但很多时候,分割的效果并不是都这么理想,会出现各种各样问题,比如下面的分割效果,它会把身体一部分当成背景颜色:
在这里插入图片描述
这样的分割效果,如果用到训练里面去,就会影响训练的效果,解决的办法是,可以去优化源码里面自带的bisnet网络,但操作起来有些麻烦。我自己试着重构代码,但效果还是不理想。后来看到Segment-and-Track Anything这个项目,就想到跳出当前的框架,直接用Segment-and-Track Anything来解决这个问题。

二、Segment-and-Track Anything

1. 算法简介

“Segment-and-Track Anything” 是由浙江大学 ReLER 实验室开发的一款多功能视频分割和目标跟踪模型,它深度整合了 SAM(Segment Anything Model)和视频分割技术,使其能够高效地跟踪视频中的目标,并支持多种交互方式(如点、画笔和文字输入)。

在这个基础上,SAM-Track 实现了多个传统视频分割任务的统一,使其能够一键分割和追踪任意视频中的任意目标,将传统视频分割技术推向通用视频分割领域。SAM-Track 在复杂场景下表现出卓越的性能,即使在单一GPU卡上也能高质量地稳定跟踪数百个目标。

SAM-Track 模型基于 ECCV’22 VOT Workshop 四个赛道的冠军方案 DeAOT。DeAOT 是一种高效的多目标视频对象分割模型,在提供首帧物体标注的情况下,可以对视频的其余帧中的物体进行追踪分割。DeAOT 使用一种识别机制,将一个视频中的多个目标嵌入到同一高维空间中,从而实现对多个物体的同时跟踪。DeAOT 在多物体追踪方面的速度表现媲美其他专注于单个物体追踪的 VOS 方法。此外,通过基于分层 Transformer 的传播机制,DeAOT 更好地整合了长时序和短时序信息,表现出卓越的追踪性能。然而,DeAOT 需要参考帧的标注来初始化,为了提高方便性,SAM-Track 利用了图像分割领域的明星模型 SAM,以获取高质量的参考帧标注信息。SAM 凭借出色的零样本迁移能力以及多种交互方式,使 SAM-Track 能够为 DeAOT 高效获取高质量的参考帧标注信息。

虽然 SAM 模型在图像分割领域表现出色,但它无法输出语义标签,并且文本提示也无法有效地支持 Referring Object Segmentation 以及其他依赖深层语义理解的任务。因此,SAM-Track 模型进一步集成了 Grounding DINO,实现了高精度的语言引导视频分割。Grounding DINO 是一种开放集合目标检测模型,具备出色的语言理解能力。

2. 项目部署

2.项目部署
可参考我之前的博客:
​Segment-and-Track Anything——通用智能视频分割、目标追踪、编辑算法解读与源码部署

3.项目应用

运行项目之后,打开项目的交互界面,然后打开要分割的视频,然后等待一会,下面的窗口就出现视频的第一帧图像。

  1. 第一步点Click这个功能,把gam_gap拉到最大,然后点击Reset:
    在这里插入图片描述

  2. 第二步,使用鼠标点击要分割部分,Positive是选择扩展区域,Negative是删除区域,Undo是撤消上一步操作。
    在这里插入图片描述

  3. 选择完成一个部分之后,点击Add new object添加新的部分,在这个项目中,总共有三个部分,分别是头部,脖子,身体。

  4. 当所有的部分都分割完成之后,点Start Tracking开始对目标进行目标追踪。
    在这里插入图片描述

  5. 项目会运行一段时间,时间长短取决于视频的长短,运行完成之后,在项目目标下,可以找到追踪分割出来的mask图像:
    在这里插入图片描述

三、合成数据

分割完成之后,可以看到最终分割结果比源码自带的效果要好很多,但要改成NeRF要的颜色格式,就是头部用蓝色表示,脖子用绿色表示,身体部用红色表示,背景部分用白色表示。

1.获取颜色值

这里要获取分割出来的颜色值,才能把它改成想的颜色值,使用python和cv2实现点击获取颜色值:

def mouse_callback(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        # 获取鼠标点击处的像素颜色
        pixel_color = cv_src[y, x]
        b, g, r = pixel_color
        print(f"颜色值 (B, G, R):({b}, {g}, {r})")

        # 在图像上绘制颜色值
        color_str = f"({b}, {g}, {r})"
        cv2.putText(cv_src, color_str, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2)
        cv2.imshow('Color Value', cv_src)


# 获取
def get_color_val(cv_src):
    cv2.namedWindow('Color Value', 0)
    # 在窗口中显示图像
    cv2.imshow('Color Value', cv_src)

    # 设置鼠标点击事件回调函数
    cv2.setMouseCallback('Color Value', mouse_callback)

    # 等待用户点击窗口并按下ESC键退出

    while True:
        key = cv2.waitKey(1)
        if key == 27:  # 按下ESC键退出
            break

    cv2.destroyAllWindows()

运行代码后,使用鼠标点击获取分割出来的这三个色块的值:
在这里插入图片描述

2.更改颜色

获取分割的色块颜色值之后,要对现有的颜色值更改成源码需要的颜色值,在这个过程中顺带把色块之后的孔洞给填充上。

def get_color_part(cv_src,neck_color,head_color,body_color):
    height, width, channels = cv_src.shape
    cv_dst = np.ones((height, width, 3), dtype=np.uint8) * 255
    neck = np.zeros((height, width, 3), dtype=np.uint8)
    head = np.zeros((height, width, 3), dtype=np.uint8)
    body = np.zeros((height, width, 3), dtype=np.uint8)

    for y in range(height):
        for x in range(width):
            # 获取像素值(B, G, R)
            b, g, r = cv_src[y, x]
            if b == 0 and g == 0 and r ==0:
                continue

            elif [b,g,r] == neck_color:
                neck[y,x] = b,g,r

            elif [b,g,r] == head_color:
                head[y,x] = b,g,r

            elif [b,g,r] == body_color:
                body[y,x] = b,g,r

    # np_head = filling_hole(head,(255,0,0))
    np_head = dilation_img(head, (3,3))
    np_body = closing_color(body,(5,5))
    np_neck = dilation_img(neck, (3,3))

    cv_neck = cv2.cvtColor(np_neck, cv2.COLOR_GRAY2BGR)
    cv_body = cv2.cvtColor(np_body, cv2.COLOR_GRAY2BGR)
    cv_head = cv2.cvtColor(np_head, cv2.COLOR_GRAY2BGR)

    for y in range(height):
        for x in range(width):
            n_b, n_g, n_r = cv_neck[y, x]
            if [n_b,n_g,n_r] > [0,0,0]:
                cv_dst[y,x] = 0,255,0

            b_b,b_g,b_r = cv_body[y,x]
            if [b_b,b_g,b_r] > [0,0,0]:
                cv_dst[y, x] = 0, 0, 255

            h_b, h_g, h_r = cv_head[y, x]
            if [h_b, h_g, h_r] > [0, 0, 0]:
                cv_dst[y, x] = 255, 0, 0

    return cv_dst

运行结果:
在这里插入图片描述

3.处理整个目录

def pro_dir(src_dir,dst_dir,neck_color,head_color,body_color):
    files_name = os.listdir(src_dir)
    i = len(files_name)
    j = 0
    for file in files_name:
        name = os.path.join(src_dir,file)
        cv_src = cv2.imread(name)
        cv_dst = get_color_part(cv_src,neck_color,head_color,body_color)
        save_name = os.path.join(dst_dir,file)
        cv2.imwrite(save_name, cv_dst)
        print(j,i)
        j = j +1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计模式】第2节:七大设计原则

一、七大设计原则 七大原则提出的目的是降低对象之间的耦合度,提高程序的可复用性、可扩展性和可维护性。 1.单一职责原则 Single Responsibility Principle,SRP原则:一个类只负责一个功能领域中的相应职责。或者可以定义为:就一…

安防视频监控平台EasyNVR平台如何在角色表格中添加信息

TSINGSEE青犀视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。在智慧安防等视频监控场景中,EasyNVR可提供视频实时监控直播、云端…

Linux | 进程

目录 前言 一、什么是进程 1、Window下的进程 2、深刻理解进程 3、见一见Linux下的进程 二、进程的创建 1、初始fork 2、fork的返回值 3、深刻理解fork函数 4、遗留问题 三、进程状态 1、操作系统中的进程状态 2、Linux中的进程状态 3、状态演示 &#xff08…

MySQL 概述 数据库表操作 数据增删改

目录 MySQL概述前言安装与配置MySQL登录与卸载 数据模型概述SQL简介SQL通用语法简介SQL分类 数据库设计(数据库操作)-DDL数据库操作查询数据库创建数据库使用数据库删除数据库 图形化工具连接数据库操作数据库 表操作创建表创建表语法创建表约束语法创建表数据类型 查询表修改表…

【Python3】【力扣题】169. 多数元素

【力扣题】题目描述: 众数:一组数据中出现次数最多的数据。 【Python3】代码: 1、解题思路:哈希表。使用哈希映射存储各元素以及出现的次数,哈希映射中的键值对中的键为元素、值为该元素出现次数。 知识点&#xff1…

腾讯云2023年双11优惠活动和9999元代金券领取规则

2023腾讯云双11优惠价格表终于来了,轻量2核2G3M云服务器88元一年、轻量2核4G5M服务器166.6元一年、3年轻量2核2G4M带宽优惠价366.6元、3年轻量2核4G5M配置566.6元,CVM云服务器2核2G配置SA2实例172.3元一年、标准型S5服务器2核2G配置280.8元一年&#xff…

单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法

本文综合整理单目3D目标检测的方法模型,包括:基于几何约束的直接回归方法,基于深度信息的方法,基于点云信息的方法。万字长文,慢慢阅读~ 直接回归方法 涉及到模型包括:MonoCon、MonoDLE、MonoFlex、CUPNet…

大模型在百度智能问答、搜索中的应用

本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队,共同探索智能问答技术的发展方向,文末有简历投递方式。 01 什么是机器问答 机器问答,就是让计算机…

如何利用数字化转型升级,重塑企业核心竞争力?

工程机械行业是一个周期性明显的行业,企业经营受到宏观经济与国家基础设施建设的影响较大,例如企业经济上行时,加大投资扩大生产规模,以满足市场需求的增长,当经济下行时,企业可能面临减产和裁员等问题&…

【Ansible自动化运维工具 第一部分】Ansible常用模块详解(附各模块应用实例和Ansible环境安装部署)

Ansible常用模块 一、Ansible1.1 简介1.2 工作原理1.3 Ansible的特性1.3.1 特性一:Agentless,即无Agent的存在1.3.2 特性二:幂等性 1.4 Ansible的基本组件 二、Ansible环境安装部署2.1 安装ansible2.2 查看基本信息2.3 配置远程主机清单 三、…

Java练习题-输出二维数组对角线元素和

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又…

DAY34 860.柠檬水找零 + 406.根据身高重建队列

860.柠檬水找零 题目要求:在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元…

优化预算管理流程:Web端实现预算编制的利器

本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言:什么是预算和预算编制 预算 预算是企业在预测、决策的基础上,以数量和金额的形式…

(免费领源码)php#Thinkphp#MYSQL校园二手交易app 99211-计算机毕业设计项目选题推荐

目 录 摘要 Abstract 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手物品交易app系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析…

用傲梅分区软件分割分区重启系统蓝屏BAD_SYSTEM_CONFIG_INFO,八个解决参考方案

环境: Win11 专业版 HP 笔记本 傲梅分区软件 闪迪16G U盘 Win10 官方镜像文件 Win11PE 系统安装U盘 USB固态硬盘盒 问题描述: 起因 开始使用windows自动磁盘管理工具压缩不了磁盘,提示无法将卷压缩到超出任何不可移动的文件所在点,关闭系统保护还原,删除系统创建…

J41H-40C法兰截止阀型号解析

J41H-40C型号字母含义解析 J41H-40C型号是德特森阀门常用的截止阀型号字母代表的意思是: J——代表阀门类型《截止阀》 4——代表连接方式《法兰》 1——代表结构形式《直流》 H——代表阀座堆焊《不锈钢》 -《分隔键》 40——代表公称压力《4.0MPA》 C——代表阀体材料…

win操作系统下安装Deepspeed

1. 准备cunda环境 下载cuda、cudnn, CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive Log in | NVIDIA Developerhttps://developer.nvidia.com/rdp/cudnn-download 选择版本可以参考里的Index of /anaconda/cloud/p…

通过阿里云创建accessKeyId和accessKeySecret

我们想实现服务端向个人发送短信验证码 需要通过accessKeyId和accessKeySecret 这里可以白嫖阿里云的 这里 我们先访问阿里云官网 阿里云地址 进入后搜索并进入短信服务 如果没登录 就 登录一下先 然后在搜索框搜索短信服务 点击进入 因为我也是第一次操作 我们一起点免费开…

禁止U盘拷贝-保护数据安全

禁止U盘拷贝-保护数据安全 下载使用安企神U盘管理系统 U盘是一种可移动存储设备,可以方便地实现数据的传输和共享。然而,U盘的通用性和便携性也给它带来了安全隐患。如果U盘落入恶意用户手中,可能会导致敏感数据的泄露,给企业和…

在线数据库设计工具Itbuilder

有人说——不具备全局观的设计者想着如果把一片树叶设计的非常美,而忘了树叶需要树枝,树枝是构成大树的一部分,所以说去培育一片森林,才叫做设计。而数据库设计亦是如此,如果纠结于某个列某个表的设计,而忘…