基于Pytorch框架的深度学习HRnet网络人像语义分割系统源码

news2024/11/15 23:46:02

  第一步:准备数据

头发分割数据,总共有5711张图片,里面的像素值为0和1,所以看起来全部是黑的,不影响使用

第二步:搭建模型

计算机视觉领域有很多任务是位置敏感的,比如目标检测、语义分割、实例分割等等。为了这些任务位置信息更加精准,很容易想到的做法就是维持高分辨率的feature map,事实上HRNet之前几乎所有的网络都是这么做的,通过下采样得到强语义信息,然后再上采样恢复高分辨率恢复位置信息(如下图所示),然而这种做法,会导致大量的有效信息在不断的上下采样过程中丢失。而HRNet通过并行多个分辨率的分支,加上不断进行不同分支之间的信息交互,同时达到强语义信息和精准位置信息的目的。

recover high resolution

思路在当时来讲,不同分支的信息交互属于很老套的思路(如FPN等),我觉得最大的创新点还是能够从头到尾保持高分辨率,而不同分支的信息交互是为了补充通道数减少带来的信息损耗,这种网络架构设计对于位置敏感的任务会有奇效。

第三步:代码

1)损失函数为:交叉熵损失函数

2)网络代码:

import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F

from .backbone import BN_MOMENTUM, hrnet_classification

class HRnet_Backbone(nn.Module):
    def __init__(self, backbone = 'hrnetv2_w18', pretrained = False):
        super(HRnet_Backbone, self).__init__()
        self.model    = hrnet_classification(backbone = backbone, pretrained = pretrained)
        del self.model.incre_modules
        del self.model.downsamp_modules
        del self.model.final_layer
        del self.model.classifier
        

    def forward(self, x):
        x = self.model.conv1(x)
        x = self.model.bn1(x)
        x = self.model.relu(x)
        x = self.model.conv2(x)
        x = self.model.bn2(x)
        x = self.model.relu(x)
        x = self.model.layer1(x)
        
        x_list = []
        for i in range(2):
            if self.model.transition1[i] is not None:
                x_list.append(self.model.transition1[i](x))
            else:
                x_list.append(x)
        y_list = self.model.stage2(x_list)

        x_list = []
        for i in range(3):
            if self.model.transition2[i] is not None:
                if i < 2:
                    x_list.append(self.model.transition2[i](y_list[i]))
                else:
                    x_list.append(self.model.transition2[i](y_list[-1]))
            else:
                x_list.append(y_list[i])
        y_list = self.model.stage3(x_list)

        x_list = []
        for i in range(4):
            if self.model.transition3[i] is not None:
                if i < 3:
                    x_list.append(self.model.transition3[i](y_list[i]))
                else:
                    x_list.append(self.model.transition3[i](y_list[-1]))
            else:
                x_list.append(y_list[i])
        y_list = self.model.stage4(x_list)
        
        return y_list

class HRnet(nn.Module):
    def __init__(self, num_classes = 21, backbone = 'hrnetv2_w18', pretrained = False):
        super(HRnet, self).__init__()
        self.backbone       = HRnet_Backbone(backbone = backbone, pretrained = pretrained)

        last_inp_channels   = np.int(np.sum(self.backbone.model.pre_stage_channels))

        self.last_layer = nn.Sequential(
            nn.Conv2d(in_channels=last_inp_channels, out_channels=last_inp_channels, kernel_size=1, stride=1, padding=0),
            nn.BatchNorm2d(last_inp_channels, momentum=BN_MOMENTUM),
            nn.ReLU(inplace=True),
            nn.Conv2d(in_channels=last_inp_channels, out_channels=num_classes, kernel_size=1, stride=1, padding=0)
        )

    def forward(self, inputs):
        H, W = inputs.size(2), inputs.size(3)
        x = self.backbone(inputs)
        
        # Upsampling
        x0_h, x0_w = x[0].size(2), x[0].size(3)
        x1 = F.interpolate(x[1], size=(x0_h, x0_w), mode='bilinear', align_corners=True)
        x2 = F.interpolate(x[2], size=(x0_h, x0_w), mode='bilinear', align_corners=True)
        x3 = F.interpolate(x[3], size=(x0_h, x0_w), mode='bilinear', align_corners=True)

        x = torch.cat([x[0], x1, x2, x3], 1)

        x = self.last_layer(x)
        x = F.interpolate(x, size=(H, W), mode='bilinear', align_corners=True)
        return x

第四步:统计一些指标(训练过程中的loss和miou)

第五步:搭建GUI界面

第六步:整个工程的内容

有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码

代码见:基于Pytorch框架的深度学习HRnet网络人像语义分割系统源码

有问题可以私信或者留言,有问必答

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

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

相关文章

做影像组学+深度学习技术研究如何发表高分论文,案例解析

论文简介 标题&#xff1a;Longitudinal MRI-based fusion novel model predicts pathological complete response in breast cancer treated with neoadjuvant chemotherapy: a multicenter, retrospective study&#xff08;纵向MRI结合新模型预测新辅助化疗乳腺癌的病理完全…

[C++进阶]map和set的相关题目

1. 下面关于map和set说法错误的是&#xff08;&#xff09; A.map中存储的是键值对&#xff0c;set中只储存了key B.map和set查询的时间复杂度都是O(log_2N) C.map和set都重载了[]运算符 D.map和set底层都是使用红黑树实现的 解析: A&#xff1a;正确&#xff0c;map和set的概念…

python学习之路 - PySpark快速入门

目录 一、PySpark实战1、前言介绍2、基础准备a、pySpark库的安装b、构建pySpark执行环境入口对象c、pySpark编程模型 3、数据输入a、python数据容器转RDD对象b、读取文件内容转RDD对象 4、数据计算a、map算子b、flatMap算子c、reduceByKey算子d、综合案例e、filter算子f、disti…

数据可视化库(Matplotlib)

目录 常规绘图方法 细节设置 子图和标注 风格设置 常用图表绘制 盒图 直方图和散点图 3D图 布局设置 常规绘图方法 首先导入工具包&#xff0c;一般用plt来当作Matplotlib的别名&#xff1a; import matplotlib.pyplot as plt %matplotlib inline 指定魔法指令之后…

刚刚放出GPT-5上线时间,转身就一个限制,OpenAI你真行!

大家好&#xff0c;我是AI肝铁侠。 在6月23日&#xff0c;OpenAI 首席技术官米拉穆拉蒂 (Mira Murati) 表示&#xff0c;GPT-5 是 OpenAI 的下一代人工智能产品&#xff0c;预计将在 2025 年底或 2026 年初&#xff0c;实现博士级别的智能。 说实话OpenAI又把GPT5计划发布时间…

Leetcode面试经典150题-45.跳跃游戏II

解法都在代码里&#xff0c;不懂就留言或者私信&#xff0c;这个题绝对比动态规划的解法强 class Solution {/**本题我们先不用动态规划了&#xff0c;因为从任何一个位置都可能跳到最后一个位置&#xff0c;用动态规划的成本太高了本题的解题思路&#xff1a;看看某个步数内最…

Vue项目安装依赖(npm install)报错的解决

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

OLED模块

目录 一&#xff1a;OLED使用原理 硬件部分 SSD1306框图及引脚定义 选择通信接口 原理图 软件部分 4线SPI的传输时序 3线SPI的传输时序 I2C的通信时序 执行逻辑框图 二&#xff1a;基本命令表 滚动命令表 寻址设置命令表 硬件配置命令表 时间及驱动命令 初始化过…

《自然语言处理》—— 词向量之CountVectorizer方法实现

文章目录 一、什么是词向量&#xff0c;为什么要进行词向量二、CountVectorizer方法简单介绍1、基本作用2、参数详解 三、示例&#xff1a;代码实现 一、什么是词向量&#xff0c;为什么要进行词向量 词向量是一种将单词或短语映射到实数向量空间的技术。在自然语言处理中&…

Loki Unable to fetch labels from Loki (no org id)

应该是多租户相关导致的 参考文档: 参考文档cMulti-tenancy | Grafana Loki documentationDescribes how Loki implements multi-tenancy to isolate tenant data and queries.https://grafana.com/docs/loki/latest/operations/multi-tenancy/ https://github.com/grafana…

中国招标投标平台JS逆向:DES加密与Python纯算还原

中国招标投标平台JS逆向&#xff1a;DES加密与Python纯算还原 目录 &#x1f510; JS DES解密&#x1f9ee; Python版本的纯算实现 &#x1f510; JS DES解密 在中国招标投标公共服务平台的分析过程中&#xff0c;发现了数据加密采用了DES算法。DES&#xff08;数据加密标准&…

JS运行机制及事件循环机制

进程&#xff1a;独立运行&#xff0c;拥有资源空间的应用程序 线程&#xff1a;CPU调度的最小单位 浏览器: 多进程 浏览器有哪些进程&#xff1f; Browser进程&#xff0c;也是主进程 负责各个页面的管理 创建 销毁前进后退等网络资源下载 插件进程&#xff1a;比如Chrome的…

多线程+连接池+代理 运行一段时间线程阻塞,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

【CSP:202012-2】期末预测之最佳阈值(Java)

题目链接 202012-2 期末预测之最佳阈值 题目描述 求解思路 前缀和 根据题意我们可以得知&#xff1a; θ θ θ 值为 a[i].y 时的预测正确的次数等于 a[i].y 前面有多少个 result 0 以及后面有多少个result 1。定义Score类用来存储y和result&#xff0c;其中sum0表示a[1]…

苹果macOS 15.1 Beta 3发布 允许用户将App Store应用下载到外置硬盘

8 月 29 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 15.1 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;24B5035e&#xff09;&#xff0c;本次更新距离上次发布 Beta / RC 间隔 16 天。 苹果公司在发布 iOS / iPadOS 18.1 Beta 3 更新之外&#x…

redis的共享session应用

项目背景&#xff1a; 该项目背景就是黑马的黑马点评项目。 一&#xff1a;基于Session实现验证码登录流程 基本的登录流程我们做了很多了。这个是短信登录流程 其实和普通的登录流程就多了一个生成验证码&#xff0c;并将验证码保存在session中&#xff0c;并且呢&#xf…

20240831 每日AI必读资讯

Runway 突然删除清空了 HuggingFace 上的所有内容&#xff01;原因不明... - 之前的项目也无法访问了&#xff0c;比如 Stable Diffusion v1.5也被删了 &#x1f517;https://huggingface.co/runwayml/stable-diffusion-v1-5 &#x1f517;GitHub 也空了&#xff1a;https:…

ue Rotate to face BB entry转向不对

可能原因&#xff1a; 角色模型没有到正向。 错误&#xff1a; 正确&#xff1a;

C语言:ASCII码表和字符操作

目录 目录 1. 引言 2. ASCII码表 2.1 控制字符 2.2 可显示字符 3. 例子 3.1 相关函数 3.2 打印能够显示的 ASCII码 3.3 字母大小写转换 3.4 数字转数字字符 1. 引言 因为计算机只是认识 0 和 1组成的一串串的二进制数字&#xff0c;为了将人类认识的文…

【时间盒子】-【1.序言】高效人士都在用的时间管理方法。我是如何通过鸿蒙元服务APP实现?

一、介绍 【时间盒子】系列内容将帮助开发者学习如何构建一个全新的HarmonyOS元服务应用&#xff0c;学习使用DevEco Studio创建新项目、使用预览器预览页面、使用真机调试APP、自定义弹窗、使用系统提醒能力&#xff08;闹钟&#xff09;、使用首选项数据持久化、熟悉ArkUI页…