基于DeepLabv3Plus开发构建人脸人像分割系统

news2024/11/14 18:36:31

在图像分割领域中有不少优秀出色的网络,DeepLab系列就是其中非常经典的分支之一,在之前的很多项目中陆续都已经有接触到了,在处理图像分割中表现出色。

DeepLabV3Plus是一种用于语义分割任务的深度学习模型,它是DeepLab系列模型的一种改进版本。下面详细解释DeepLabV3Plus的原理:

  1. 引入空洞卷积(Dilated Convolution):DeepLabV3Plus利用空洞卷积来扩大感受野,以更好地捕捉图像中的上下文信息。传统的卷积操作只关注局部区域,而空洞卷积通过在卷积核中引入间隔(或称为膨胀率),使得卷积核能够跳过一些像素点,从而扩大感受野。

  2. 多尺度金字塔池化(Multi-scale Atrous Spatial Pyramid Pooling, ASPP):DeepLabV3Plus使用ASPP模块来处理不同尺度的信息。ASPP模块使用多个并行的空洞卷积分支,每个分支具有不同的膨胀率,以捕捉来自不同感受野的特征。最后,将这些特征进行汇总并进行融合,以生成更丰富的特征表示。

  3. 融合低级特征:为了结合低层次的细节特征,DeepLabV3Plus引入了一个编码器-解码器结构。在编码器部分,通过堆叠多个残差块和降采样操作,提取高层次的语义特征。然而,这会导致空间信息的丢失。因此,在解码器部分,使用反卷积(或上采样)操作来恢复特征图的分辨率,并与对应的低级特征进行融合。

  4. 融合注意力机制:为了进一步提升融合的效果,DeepLabV3Plus引入了注意力机制。该机制利用辅助监督信号和空间注意力模块,自适应地对不同的特征图进行加权融合。这样可以使网络更加关注重要的特征区域,提升语义分割的准确性。

DeepLabV3Plus通过引入空洞卷积、多尺度金字塔池化、融合低级特征和注意力机制等改进,提升了语义分割任务的性能。它能够准确地标记图像中每个像素的类别,从而在许多计算机视觉领域(如图像分割、自动驾驶等)中发挥着重要作用。

整体网络结构图如下所示:

 本文的核心目的就是想要基于DeepLabv3Plus模型开发构建人像分割识别系统,首先来看下最终的效果图。如下所示:

 人像人脸分割是指将图像中的人物或人脸从背景中分离出来,形成一个与背景独立的前景层。这个任务在计算机视觉和图像处理领域具有广泛的应用,如图像编辑、虚拟背景替换、人脸识别等。

下面介绍几种常见的人像人脸分割方法:

  1. 基于传统图像处理技术的方法:包括阈值分割、边缘检测、区域生长等。这些方法利用图像的颜色、纹理、边缘等特征来实现分割,但对于复杂场景和变化光照条件下的图像效果可能不太理想。

  2. 基于深度学习的方法:近年来,基于深度学习的方法在人像人脸分割任务上取得了显著的进展。主要有以下几种方法:

    • Fully Convolutional Network (FCN):将卷积神经网络(CNN)进行扩展,使其能够输出与输入图像相同尺寸的特征图,通过逐像素分类实现分割。

    • U-Net:采用编码器-解码器结构,通过多级特征融合实现分割。在编码器部分逐渐提取抽象特征,而解码器则将这些特征进行上采样和融合,恢复原始分辨率。

    • Mask R-CNN:结合目标检测和语义分割,通过在候选区域上生成分割掩码,实现对人像或人脸的精确分割。

    • DeepLab系列:如前面提到的DeepLabV3Plus,利用空洞卷积、多尺度金字塔池化等技术,结合编码器-解码器结构和注意力机制,实现高质量的人像或人脸分割。

以上方法基于深度学习的人像人脸分割具有更好的性能和鲁棒性,能够处理各种复杂场景,但需要大量的训练数据和计算资源来训练和推断模型。此外,还需注意保护个人隐私和遵守相关法律法规,在使用人像人脸分割技术时要谨慎处理和使用图像数据。

本文使用到的数据集来源于网络数据采集,考虑到隐私等问题,这里就不再开放数据集,有兴趣的话可以采集自己的人像数据进行标注即可,也可以自己获取所需要的数据集,简单看下数据集情况,如下所示:

 项目的话我是使用的开源的项目,感兴趣自己可以搜索一下就有很多可用的项目了,这里就不再赘述了。

 这里对训练过程loss记录,输出如下:

【训练过程loss】

0.606733886387613
0.5451530520297863
0.5312956986162397
0.5229707437400465
0.5153569176594416
0.5111042044206902
0.5069597844017877
0.5037329255607393
0.5014695850213369
0.4987152876235821
0.4963443066676458
0.49430867842833204
0.49257237531520703
0.491585019632622
0.490325737034833
0.4884220104813576
0.48718978066356095
0.4857246057987213
0.4845155222835364
0.4839324971768591
0.48285760136224604
0.4823990903629197
0.4816572904498489
0.4810293540513074
0.479909280386236
0.48014969675629227
0.4782429775706044
0.47816003894364395
0.4778184459032836
0.4770615481072002
0.47634794495061594
0.4760536521187535
0.47536532789468766
0.47525336522967726
0.47413731544106097
0.4741229054375931
0.47342363812746824
0.473592685730369
0.4730194813675351
0.4729978748736558
0.4722207668798941
0.47126187033564954
0.4722152912462199
0.4719400713532059
0.4714534025280564
0.4725597387552261
0.47105351442540133
0.4704632743817789
0.4706625964729874
0.4700480776164267
0.4705623256939429
0.4703608555043185
0.47048959539996255
0.4695794686189404
0.4702329401484242
0.4698123355794836
0.4698283548310951
0.4700069356582783
0.46982009513731354
0.46908038724131057
0.4688676534979432
0.4699744729112696
0.4692540439698431
0.4694266492812722
0.46868740408729626
0.46882954442059555
0.46816772681253926
0.46973903317363175
0.4690917461404094
0.4677222697491999
0.4683394526110755
0.4682736379128915
0.4685229307324798
0.4675601541907699
0.46799968316378415
0.46828408296682217
0.46808334429175763
0.4683440767129262
0.4676276903042087
0.46854540413838847
0.4678870822058784
0.4688800019290712
0.46860441150488674
0.46716839501813606
0.4692639676663611
0.4682025171672856
0.46774926880333156
0.46816943083869084
0.467910121149487
0.4679397223569729
0.46740188981647846
0.46744765230019886
0.46749446893400615
0.46847197057361956
0.468207284518966
0.4675115166814239
0.4674260204831759
0.4679987247740781
0.4672764806041011
0.46750681177775066
0.4610524634564364
0.4430497716687344
0.4308067981644913
0.42418101248697
0.4179302916151506
0.41094093401343734
0.40740824448400076
0.4054056303324523
0.40121451599068114
0.39721187418478504
0.39433807819419436
0.39200182554456925
0.39041697849167717
0.3873950265314844
0.3848230292973695
0.3834493019293856
0.3810895609259605
0.3797435728797206
0.37972999588648476
0.3775988665995774
0.375126536724744
0.37449268773529265
0.3734198753613013
0.3727285913847111
0.3722336419931164
0.3703744729735233
0.36967343696399974
0.3674778556536745
0.3688265012237761
0.36700428471521096
0.366438580930233
0.36669299064742195
0.36551257621138183
0.3642659715325744
0.3647161818610297
0.3640892456505034
0.3625525557707857
0.36195346475089035
0.36148804857554256
0.3620846286371902
0.3618001574829773

与之对应的每个epoch阶段的验证集loss值如下所示:

0.7363147226174672
0.6476791345278422
0.6269188988606135
0.6518109252850215
0.6363567601442337
0.6108124456803004
0.5660302023887634
0.6123864912589391
0.5911199820836385
0.5770307216246923
0.6037196354468664
0.5832631700436274
0.6019434279600779
0.5977168931563696
0.5589731727043787
0.5962350815931956
0.584779790798823
0.6019311763445536
0.5571765099366506
0.5753734890619914
0.601554860273997
0.5678470953305562
0.568916656335195
0.582502201239268
0.5674247304598491
0.5834379431406657
0.565427275856336
0.5965515422026316
0.5879235327243805
0.5852312157551448
0.5927491906086604
0.572282440384229
0.5753429974317551
0.566869480172793
0.5809106465180714
0.5651940529743831
0.5690218742688496
0.5738445527156194
0.570579530954361
0.5770735333363215
0.5874447878996532
0.5793218000729878
0.5819239114522934
0.578914180835088
0.5836177942355474
0.5850059668620428
0.5773452857335408
0.5924962973594665
0.595604096253713
0.5819054840008417
0.5809926917155583
0.5815007782379786
0.5740332746903102
0.577073024113973
0.5735143412748973
0.5784651318391164
0.5792534666458765
0.5738669501145681
0.5771631151040395
0.5708307991027832
0.577383451739947
0.5749749945004781
0.5746441821654638
0.5699648759365081
0.5746079727013906
0.5722724730571112
0.5769749979972839
0.5778775161504746
0.5726225604216257
0.5714786018133163
0.5711708536148071
0.5703613657553991
0.5722145459254583
0.5741133541663488
0.5688811107873917
0.5702993161678315
0.5718296977678935
0.575028224070867
0.5709250133832295
0.5751660763820012
0.5774899474779764
0.5701479283173879
0.573536010980606
0.5747984119256337
0.571291612346967
0.5710983018477758
0.5723327718178431
0.5725627580881119
0.5755251860221227
0.575767505645752
0.573041660865148
0.5734743138154348
0.5762857339382171
0.5738734103838603
0.5738458364804586
0.5724152154127756
0.5738513347705205
0.5744692078828811
0.5729313603639603
0.5757221702337265
0.4207547032634417
0.4133402276833852
0.4090682305494944
0.3985422770579656
0.4109359646638234
0.4096279754837354
0.3765391613642375
0.37874370960394543
0.3909721949895223
0.3793969687422117
0.3987407827774684
0.37563763177394865
0.38857615647713345
0.3718491301735242
0.36752369912465416
0.3668622848590215
0.3808561844229698
0.3683939206600189
0.38373111416896183
0.3766015217502912
0.38577201998233795
0.3730621130665143
0.3645110250512759
0.36443960805734
0.36273852970202763
0.36943710199991864
0.3635948519905408
0.3739289958278338
0.3694388215144475
0.37423735785484313
0.36813118265072503
0.3720009588201841
0.36932403522729873
0.37261974320809044
0.36806525905927023
0.37184850025177
0.3679776246349017
0.3615932798584302
0.3575896237293879
0.3615605310201645
0.3593589244087537

干巴巴的看数字没有直观的体验,这里对其进行可视化,代码实现如下所示:

from matplotlib import pyplot as plt


with open("train.txt") as f:
    train_list = [float(one) for one in f.readlines() if one.strip()]
with open("val.txt") as f:
    val_list = [float(one) for one in f.readlines() if one.strip()]
print("train_list_length: ", len(train_list))
print("val_list_length: ", len(val_list))


plt.clf()
plt.figure(figsize=(8, 6))
plt.plot(train_list, label="Train Loss Cruve", c="g")
plt.plot(val_list, label="Val Loss Cruve", c="b")
plt.title("Model Loss Cruve")
plt.savefig("loss.png")

结果如下所示:

 可以看到:一共训练迭代了将近150个epoch。

如果想要接入视频进行实时计算推理也是可以的,这里给出模板实现,可以给予我的模板改造适配自己的应用即可,如下所示:

while True:
    t1 = time.time()
    ref, frame = capture.read()
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    frame = Image.fromarray(np.uint8(frame))
    frame = np.array(deeplabv3.detect_image(frame))
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
    fps = (fps + (1.0 / (time.time() - t1))) / 2
    print("fps= %.2f" % (fps))
    frame = cv2.putText(
        frame,
        "fps= %.2f" % (fps),
        (0, 40),
        cv2.FONT_HERSHEY_SIMPLEX,
        1,
        (0, 255, 0),
        2,
    )
    cv2.imshow("video", frame)
    c = cv2.waitKey(1) & 0xFF
    if video_save_path != "":
        out.write(frame)
    if c == 27:
        capture.release()
        break

这里为了方便使用模型,开发了专用的可视化系统界面,实例推理计算效果如下所示:
 

直观来看效果还是不错的,有兴趣的话都是可以自己动手实践一下的。

 

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

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

相关文章

市场营销书籍推荐,这些书帮你学好营销

市场营销一直是商业运作中的重要环节,因此市场营销的知识一直备受关注。在这篇文章中,小编将向你推荐三本经典市场营销书籍,通过阅读这些书籍能让你更深入了解市场营销的基本概念和策略。 1、《经理人参阅:市场营销》 《经理人参…

高效游戏项目进度管理指南:打造顺畅开发之路!

完成一个游戏项目可能是一项具有挑战性的任务,特别是当你刚刚开始时。为了确保你的项目在预算内按时运行,制定计划并管理你的进度是很重要的。以下是一些帮助你管理游戏项目进度的技巧。 1、明确游戏目标: 在开始之前,你必须明确项目的范围以…

附件类文件存储在环信和不存储在环信时的两种实现方式

场景一: 附件类文件存储在环信服务器 使用环信EMChatManager#downloadAttachment下载附件方案 (本篇文章以图片消息为例,其他附件类消息类似): 一、 通过EMFileMessageBody#getLocalUrl判断有没有本地文件; EMImageM…

ROS学习篇之硬件准备(零)-thinkbook16+锐龙版 安装ubuntu20.04遇到的各种坑

文章目录 一.计算机配置二.遇到的问题及解决办法1.键盘失灵2.无法联wifi3.蓝牙搜索不到设备4.无法开热点 三.最后的感想 一.计算机配置 CPU: AMD R7 6800H (网卡,娱乐大师读出来的不对,在windos系统下,联想管家读出来网卡的型号是…

C++数据结构笔记(5)栈的顺序存储结构实现

1.对于栈和队列,相比于数组和线性表,使用规则受到了限制,因此也被称为“受限线性表”。 2.对于栈类型来说,元素符合先进后出的规律,且栈中的元素不能自由遍历。 3.栈的顺序存储结构简称为顺序栈,其思想是…

神经网络之VGG

目录 1.VGG的简单介绍 1.2结构图 3.参考代码 VGGNet-16 架构:完整指南 |卡格尔 (kaggle.com) 1.VGG的简单介绍 经典卷积神经网络的基本组成部分是下面的这个序列: 带填充以保持分辨率的卷积层; 非线性激活函数,如ReLU&a…

制作投票链接小程序教程,让你的活动更具吸引力与效果

相信投票链接是一种方便快捷的投票方式,不仅可以用于活动中的投票,还可以用于品牌营销和市场调研。投票链接是一种非常方便的方式来进行在线投票。这里就推荐一个免费制作投票活动的网站:乔拓云,创建简单、免费使用、操作灵活。支…

Linux环境搭建(三)— 搭建数据库服务器

linux (ubuntu)安装mysql 和环境配置 一、安装MySql二、配置环境三、外网访问四、重置密码五、卸载 写在前面: 本文默认你的Linux系统已经安装vim,yum等,如你使用的是一个全新的操作系统,移步上一篇开始配置…

回波数据adc_data.bin解析(附MATLAB程序)

毫米波雷达系统性能参数分析 1、xWR1642—DCA1000 TI目前有两款采集卡TSW1400和DCA1000,可以为xWR1243/1443和1642毫米波雷达进行回波数据采集。本文将主要介绍几款雷达分别用2款采集卡数据采集的回波数据格式以及MATLAB数据解析程序。 1、xWR1642—DCA1000 &…

【Servlet学习二】Servlet原理(Tomcat) ServletAPI

目录 🌟一、Servlet运行原理 🌈1、Servlet的执行原理(重点) 🌈2、Tomcat伪代码的简单理解 2.1 Tomcat初始化流程 2.2 Tomcat处理请求流程 2.3 Servlet 的 service 方法的实现 🌟二、Servlet API 详…

SFP3012-ASEMI代理MHCHXM(海矽美)快恢复二极管SFP3012

编辑:ll SFP3012-ASEMI代理MHCHXM(海矽美)二极管SFP3012 型号:SFP3012 品牌:MHCHXM(海矽美) 封装:TO-247AB 恢复时间:≤65ns 正向电流:30A 反向耐压&a…

初学spring5(三)依赖注入(DI)

学习回顾:初学spring (五) 快速上手spring Dependency Injection 一、概念 依赖注入(Dependency Injection,DI)。依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 .注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 二、构造器…

SQL-每日一题【180.连续出现的数字】

题目 表:Logs 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 返回的结果表中的数据可以按 任意顺序 排列。 查询结果格式如下面的例子所示: 示例 1: 解题思路 1.要查询至少连续出现三次的数字,则可以转化为(…

软考A计划-系统集成项目管理工程师-项目整体管理-下

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【C#】文件拖拽,获取文件路径

系列文章 【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…

vue2实现一个上边为搜索,下面为复选框选中后,右侧显示已选中组件

目录 vue2实现一个上边为搜索&#xff0c;下面为复选框选中后&#xff0c;右侧显示已选中组件component / ProjectSelectItem.vue使用组件效果 vue2实现一个上边为搜索&#xff0c;下面为复选框选中后&#xff0c;右侧显示已选中组件 component / ProjectSelectItem.vue <…

对于小米随手吸尘器各种问题的初始办法

本人在什么值得买发过&#xff0c;现在只不过是为了让账号看起来更丰盈一点&#xff0c;现在再发一次。 充不进去电/使用的时候短暂吸气&#xff0c;这两个问题&#xff0c;在上个月的时候我就已经发现了这个问题。 然后我就拆开了那个主机&#xff0c;就是那个保温杯一样的东…

SpringCloud(3) Ribbon负载均衡,负载均衡策略,自定义负载均衡

目录 1.Ribbon负载均衡流程2.Ribbon负载均衡策略3.自定义负载均衡策略如何实现4.总结 1.Ribbon负载均衡流程 假设我们有一台 order-service 订单服务&#xff0c;两台 user-service 用户服务&#xff0c;当订单服务需要调用用户服务获取用户信息的时候&#xff0c;应该怎么分配…

Windows下mysql 8.0.11 安装教程

http://www.jb51.net/article/140950.htm &#xff1a;此文章注意my.ini的扩展名 MySQL安装参考&#xff1a;mysql-8.0.11-winx64.zip在Windows中的安装配置-百度经验 MySQL卸载&#xff1a;https://blog.csdn.net/cxy_summer/article/details/70142322 下载最新的MySQL 1、…

经商必看的10本书籍推荐

1、《经理人参阅&#xff1a;商业模式与商业思维》 这本书被誉为商业模式的圣经。该书通过可视化工具&#xff0c;包括商业模式画布和价值主张画布&#xff0c;帮助企业家、创业者和经理人创造创新的商业模式。本书通过图表、图像和实例&#xff0c;详细讲解了商业模式的构建方…