• 用yolov5图像分割做人物抠像


    前言

    yolov5的6.2版本不仅更新了前一篇文章里提到的分类模型,同时也更新了图像分割模型,在官方的教程和用法还没出之前(2022/09/19),我基于官方已经写好的推理脚本进行部分修改,实现了基于图像分割的简单人物抠像。
    注:本文所用模型为yolov5s-seg,是已经预训练好的官方模型。

    展示效果

    话不多说,先来放图!
    首先是官方的图像分割推理结果,为了不透露小伙伴信息,这里打上马赛克:
    在这里插入图片描述
    其次是我修改后需要的人物抠像结果:
    在这里插入图片描述

    如何实现

    克隆yolov5新版源码解压后(这个就不展开谈了)
    1.首先修改yolov5-master\utils下的plots.py:

    #plots.py
    def masks(self, masks, colors, im_gpu=None, alpha=1):
    

    这里的alpha值需要修改为1,alpha影响的是mask也就是遮罩层的透明度,默认是0.5,是以下这种效果:

    在这里插入图片描述
    可以看到很明显暗半圈,不符合我们的效果。

    接下来需要修改几行代码,为了清楚,我直接把我修改的和原始文件对比进行截图:

    在这里插入图片描述
    也就是修改成:

    masks = masks.unsqueeze(3)  # shape(n,h,w,1)
    masks_color = masks * (colors * alpha)  # shape(n,h,w,3)
    inv_alph_masks = (masks * alpha).cumprod(0)  # 1-masks*alpha
    mcs = (masks_color * inv_alph_masks).sum(0) * 2  # mask color summand shape(n,h,w,3)
    im_gpu = im_gpu.flip(dims=[0])  # flip channel
    im_gpu = im_gpu.permute(1, 2, 0).contiguous()  # shape(h,w,3)
    im_gpu = im_gpu * inv_alph_masks[0] #no mcs
    

    其中我把mcs(也就是着色块)先去掉,然后因为是要去掉背景保留前景,所以需要把1-mask乘alpha改成mask乘alpha,同时为了只取最大的物体,这里inv_alph_masks里的-1(取全部)改成了0(只取第一个物体)。

    为了更好地理解,这里分别放出mcs,inv_alph_masks分别是什么效果:
    在这里插入图片描述
    在这里插入图片描述
    2.修改yolov5-master\segmant\predict.py文件:

    在这里插入图片描述

    上面两行代码的意思是这里取masks里的第一个物体,也就是检测值最大的那个物体,其他我不要了(这个看需求处理),同时要把目标检测框去掉的话只要把下面四行代码注释掉即可。

    3.预测:

    #D:\yolov5-master-seg\yolov5-master\segment在当前目录下启动命令行
    python predict.py --weights yolov5s-seg.pt --source 3014193119028716040.avi --class 0
    

    –source后面跟的换成你需要的视频文件或者视频源。
    –class 0表示只预测0的分类,这里的分类取自coco数据集,0就是人的意思,所以只会进行人的图像分割。
    以下是推理的结果:

    Speed: 0.4ms pre-process, 8.3ms inference, 1.0ms NMS per image at shape (1, 3, 640, 640)
    Results saved to ..\runs\predict-seg\exp24
    

    用的是rtx4000显卡,速度是非常理想的,此外这里提一句,yolov5s的推理速度就比yolov5n慢了一点点(大约2ms),但是效果要好不少,各位请根据自己的实际情况选择模型。

  • 相关阅读:
    MATLAB小技巧(21)矩阵分析--偏最小二乘回归
    面向对象编程原则(02)——单一职责原则
    Spring中@Validated和@Valid区别是什么
    VL44-根据状态转移写状态机之二段式
    JS生成随机字符串的多种方法
    spring boot社区居民健康档案管理系统毕业设计源码220940
    PNAS:人类头皮记录电位的时间尺度
    rsync详解
    mysql服务器参数设置
    NLP大模型
  • 原文地址:https://blog.csdn.net/weixin_43945848/article/details/126926929