当前位置: 首页 > news >正文

深度学习--图像分割UNet介绍及代码分析

UNet介绍

  • 参考
  • UNet网络介绍
    • 整体架构
    • UNet过程
      • 输入
      • 编码器(下采样)
      • 中间特征表示
      • 解码器(上采样)
      • 输出
  • 代码详解
    • unetUP和Unet关系
    • 上采样模块——unetUp
    • 用于图像分割的卷积神经网络(CNN)架构模块——Unet
      • 类的定义
      • 初始化方法
      • 上采样模块
      • 额外的上采样卷积层(仅用于ResNet50)
      • 最终卷积层
      • 前向传播方法
      • 冻结和解冻骨干网络
  • 完整代码

参考

U-Net: Convolutional Networks for Biomedical Image Segmentation 输入文章名自行查询
参考博客

UNet网络介绍

整体架构

在这里插入图片描述

U-net 架构(以最低分辨率为 32x32 像素为例),每个蓝色框对应一个多通道特征图。通道数显示在框的顶部。x-y 大小位于框的左下边缘。白框表示复制的特征图。箭头表示不同的操作。
深蓝色箭头:利用3×3的卷积核对图片进行卷积后,通过ReLU激活函数输出特征通道;
灰色箭头:对左边下采样过程中的图片进行裁剪复制;
红色箭头:通过最大池化对图片进行下采样,池化核大小为2×2;
绿色箭头:反卷积,对图像进行上采样,卷积核大小为2×2;
青色箭头:使用1×1的卷积核对图片进行卷积。
因为网络形状像U,故被称为U-net
参考博客(网络结构很清晰,推荐)

UNet过程

输入

U-Net 的输入是一幅单通道的图像,通常大小为 572x572 像素,由于在不断valid卷积过程中,会使得图片越来越小,为了避免数据丢失,在图像输入前都需要进行镜像扩大。

编码器(下采样)

  • U-Net 的编码器部分输入图像通过卷积层进行特征提取,这些卷积层通常使用 3x3 的卷积核,逐步提取图像特征并缩小空间维度。
  • 然后,通过池化层(通常是最大池化)将图像的空间维度减小,例如从 572x572 缩小到 286x286。
  • 这个过程会重复多次,每次都会减小图像的空间维度和增加特征通道数。

中间特征表示

  • 在编码器的最后一层,我们获得了一个中间特征表示,通常是一个高维的特征张量。
  • 这个特征表示包含了图像的抽象特征,可以用于后续的分割任务。

解码器(上采样)

  • U-Net 的解码器部分将中间特征表示还原到原始的空间维度,并逐步增加分辨率。
  • 首先,通过上采样操作将特征张量的空间维度扩大,例如从 286x286 扩大到 572x572。
  • 然后,通过卷积层进行特征融合,将低级和高级特征结合起来。
  • 最后,输出通道数为 64 的卷积层将特征映射到最终的分割结果。

输出

  • U-Net 的输出是一个分割图像,大小与输入图像相同(通常为 572x572 像素),这幅分割图像被分成不同的区域,其中不同区域被分配不同的标签或类别。
  • 分割图像中的每个像素都被分类到不同的类别中,即可以准确地知道图像中的每个像素属于哪个结构或区域。这个分割图像可以用于识别生物医学图像中的不同结构,例如肿瘤、器官等。

代码详解

unetUP和Unet关系

  1. unetUp:

    • unetUp 是一个自定义的 PyTorch 模块(nn.Module),用于实现 U-Net 模型中的上采样部分。
    • 它接受两个输入特征张量 inputs1inputs2,并将它们进行上采样、特征融合和卷积操作,最终输出一个特征张量。
    • 在 U-Net 中,unetUp 负责将低分辨率的特征图上采样到与高分辨率特征图相同的尺寸,以便进行特征融合。
  2. Unet:

    • Unet 是整个 U-Net 模型的主体部分,它由多个 unetUp 模块组成。
    • 根据选择的 backbone(可以是 VGG 或 ResNet-50),Unet 使用不同的主干网络提取特征。
    • Unet 的前向传播过程包括多次特征融合,上采样和卷积操作,最终生成语义分割结果。

上采样模块——unetUp

这段代码定义了一个名为 unetUp 的类,它是一个用于UNet架构中的上采样模块。这个模块的作用是将低分辨率特征图上采样并与高分辨率特征图结合,以生成更高分辨率的输出。

# 定义unetUp类,unetUp类继承自nn.Module,是PyTorch中所有神经网络模块的基类。
class unetUp(nn.Module):
# 初始化方法
in_size 和 out_size 是输入和输出通道的数量。
self.conv1 和 self.conv2 是两个二维卷积层,卷积核大小为3,填充为1。
self.up 是一个最近邻插值的上采样层,放大倍数为2。
self.relu 是一个ReLU激活函数。def __init__(self, in_size, out_size):super(unetUp, self).__init__()self.conv1 = nn.Conv2d(in_size, out_size, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(out_size, out_size, kernel_size=3, padding=1)self.up = nn.UpsamplingNearest2d(scale_factor=2)self.relu = nn.ReLU(inplace=True)
# 前向传播方法
# inputs1 和 inputs2 是前向传播时的输入张量。
# torch.cat([inputs1, self.up(inputs2)], 1) 将 inputs1 和上采样后的 inputs2 在通道维度上拼接。
# outputs = self.conv1(outputs) 对拼接后的张量进行第一次卷积。
# outputs = self.relu(outputs) 对卷积结果应用ReLU激活函数。
# outputs = self.conv2(outputs) 对激活后的张量进行第二次卷积。
# outputs = self.relu(outputs) 再次应用ReLU激活函数。最终返回处理后的 outputs。
# 这段代码的主要功能是将低分辨率特征图上采样并与高分辨率特征图结合,经过两次卷积和激活函数处理后,生成更高分辨率的输出特征图。def forward(self, inputs1, inputs2):outputs = torch.cat([inputs1,self.up(inputs2)],1)outputs = self.conv1(outputs)outputs = self.relu(outputs)outputs = self.conv2(outputs)outputs = self.relu(outputs)return outputs

用于图像分割的卷积神经网络(CNN)架构模块——Unet

下面这段代码定义了一个名为 Unet 的类,它是一个用于图像分割的卷积神经网络(CNN)架构。这个类可以使用不同的骨干网络(backbone),如VGG16或ResNet50,并包含上采样模块以生成高分辨率的输出。以下是对代码的详细解释:

类的定义

class Unet(nn.Module):

Unet 类继承自 nn.Module,这是PyTorch中所有神经网络模块的基类。

初始化方法

def __init__(self, num_classes=21, pretrained=False, backbone='vgg'):super(Unet, self).__init__()if backbone == 'vgg':self.vgg = VGG16(pretrained=pretrained)in_filters = [192, 384, 768, 1024]elif backbone == "resnet50":self.resnet = resnet50(pretrained=pretrained)in_filters = [192, 512, 1024, 3072]else:raise ValueError('Unsupported backbone - `{}`, Use vgg, resnet50.'.format(backbone))out_filters = [64, 128, 256, 512]
  • num_classes 是输出类别的数量。
  • pretrained 指示是否使用预训练的权重。
  • backbone 指定使用的骨干网络,可以是VGG16或ResNet50。
  • 根据选择的骨干网络,初始化相应的网络并设置输入过滤器的数量。
  • in_filters(输入通道数):在卷积神经网络(CNN)中,in_filters 表示输入图像的通道数或特征图的数量。在输入层,如果是灰度图片,那就只有一个 feature map;如果是彩色图片,一般就是 3 个 feature map(对应红、绿、蓝通道)。在其他层,每个卷积核(也称为过滤器)与上一层的每个 feature map 做卷积,产生下一层的一个 feature map。因此,如果有 N 个卷积核,下一层就会产生 N 个 feature map。
  • out_filters(输出通道数):在卷积神经网络中,out_filters 表示卷积核的数量或输出的特征图数量。卷积核的个数决定了下一层的 feature map 数量。每个卷积核可以提取一种特征,并生成一个新的特征图。在多层卷积网络中,下一层的卷积核的通道数等于上一层的 feature map 数量。如果通道数不相等,就无法继续进行卷积操作。

上采样模块

# upsampling
self.up_concat4 = unetUp(in_filters[3], out_filters[3])
self.up_concat3 = unetUp(in_filters[2], out_filters[2])
self.up_concat2 = unetUp(in_filters[1], out_filters[1])
self.up_concat1 = unetUp(in_filters[0], out_filters[0])
  • 定义四个上采样模块,每个模块将低分辨率特征图上采样到更高分辨率并与高分辨率特征图结合。
  • self.up_concat4, self.up_concat3, self.up_concat2 , self.up_concat1 是上采样操作的一部分。它们分别将不同层的特征图级联在一起,以获得更丰富的特征表示

额外的上采样卷积层(仅用于ResNet50)

if backbone == 'resnet50':self.up_conv = nn.Sequential(# 使用双线性插值(nn.UpsamplingBilinear2d)将特征图的大小放大两倍nn.UpsamplingBilinear2d(scale_factor=2), # 通过两个卷积层对特征图进行处理,以获得更好的特征表示nn.Conv2d(out_filters[0], out_filters[0], kernel_size=3, padding=1),# 使用 nn.ReLU() 激活函数来确保非线性变换nn.ReLU(),nn.Conv2d(out_filters[0], out_filters[0], kernel_size=3, padding=1),nn.ReLU(),)
else:self.up_conv = None
  • 如果使用ResNet50作为骨干网络,定义一个额外的上采样卷积层。

最终卷积层

# self.final 是一个卷积层,用于生成最终的输出。它将高分辨率的特征图映射到类别数(num_classes)
self.final = nn.Conv2d(out_filters[0], num_classes, 1)
  • 定义一个最终的卷积层,将输出通道数转换为类别数。

前向传播方法

定义模型的前向传播过程,将输入数据通过网络的各层进行计算,最终生成输出。

def forward(self, inputs):
# 根据 self.backbone 的值,选择不同的模型(VGG 或 ResNet-50)进行前向传播。# 通过卷积层和池化层对输入数据进行处理,得到特征图 feat1、feat2、feat3、feat4 和 feat5if self.backbone == "vgg":[feat1, feat2, feat3, feat4, feat5] = self.vgg.forward(inputs)elif self.backbone == "resnet50":[feat1, feat2, feat3, feat4, feat5] = self.resnet.forward(inputs)
# 通过上采样操作将这些特征图进行级联,得到更高分辨率的特征图 up4、up3、up2 和 up1up4 = self.up_concat4(feat4, feat5)up3 = self.up_concat3(feat3, up4)up2 = self.up_concat2(feat2, up3)up1 = self.up_concat1(feat1, up2)
# 如果存在上采样卷积层 self.up_conv,则对 up1 进行进一步处理if self.up_conv != None:up1 = self.up_conv(up1)
# 通过 self.final 层获得最终的输出final = self.final(up1)return final
  • 根据选择的骨干网络,获取不同层的特征图。
  • 使用上采样模块逐层上采样并结合特征图。
  • 如果定义了额外的上采样卷积层,则应用该层。
  • 最终通过一个卷积层生成输出。

冻结和解冻骨干网络

def freeze_backbone(self):if self.backbone == "vgg":for param in self.vgg.parameters():param.requires_grad = Falseelif self.backbone == "resnet50":for param in self.resnet.parameters():param.requires_grad = Falsedef unfreeze_backbone(self):if self.backbone == "vgg":for param in self.vgg.parameters():param.requires_grad = Trueelif self.backbone == "resnet50":for param in self.resnet.parameters():param.requires_grad = True
  • freeze_backbone 方法用于冻结骨干网络的参数,使其在训练过程中不更新。
  • unfreeze_backbone 方法用于解冻骨干网络的参数,使其在训练过程中可以更新。

冻结或解冻神经网络模型的特定层–更好地进行迁移学习或微调

  1. 迁移学习

    • 在迁移学习中,使用一个预训练的神经网络模型(通常在大规模数据集上进行训练)来解决新的任务。
    • 通过冻结模型的底层层(例如卷积层),可以保留其在原始任务上学到的特征表示,然后在新任务上进行微调。
    • 这样做有助于避免在新任务上过拟合,并且可以加快训练速度。
  2. 微调

    • 微调是指在预训练模型的基础上继续训练,以适应新任务的特定数据。
    • 解冻底层层,允许其权重在新任务上进行调整,以更好地适应新数据。
    • 通常,我们只微调模型的一部分,而不是整个模型,以避免丢失预训练模型的有用特征。

完整代码

import torch
import torch.nn as nnfrom nets.resnet import resnet50
from nets.vgg import VGG16class unetUp(nn.Module):def __init__(self, in_size, out_size):super(unetUp, self).__init__()self.conv1 = nn.Conv2d(in_size, out_size, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(out_size, out_size, kernel_size=3, padding=1)self.up = nn.UpsamplingNearest2d(scale_factor=2)self.relu = nn.ReLU(inplace=True)def forward(self, inputs1, inputs2):outputs = torch.cat([inputs1,self.up(inputs2)],1)outputs = self.conv1(outputs)outputs = self.relu(outputs)outputs = self.conv2(outputs)outputs = self.relu(outputs)return outputs
class Unet(nn.Module):def __init__(self, num_classes = 2, pretrained = False, backbone = 'vgg'):super(Unet, self).__init__()if backbone == 'vgg':self.vgg = VGG16(pretrained=pretrained)in_filters = [192, 384, 768, 1024]elif backbone == 'resnet50'self.resnet = resnet50(pretrained=pretrained)in_filters = [192, 512, 1024, 3072]else:raise ValueError('Unsupported backbone -`{}`, Use vgg, resnet50.'.format(backbone))out_filters = [64, 128, 256, 512]#???self.up_concat4 = unetUp(in_filters[3], out_filters[3])self.up_concat3 = unetUp(in_filters[2], out_filters[2])self.up_concat2 = unetUp(in_filters[1], out_filters[1])self.up_concat1 = unetUp(in_filters[0], out_filters[0])if backbone == 'resnet50':self.up_conv = nn.Sequential(nn.UpsamplingNearest2d(scale_factor=2),nn.Conv2d(out_filters[0],out_filters[0], kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(out_filters[0], out_filters[0], kernel_size=3, padding=1),nn.ReLU(),)else:self.up_conv = Noneself.final = nn.Conv2d(out_filters[0], num_classes, 1)self.backbone = backbonedef forward(self, inputs):if self.backbone == "vgg":[feat1, feat2, feat3, feat4, feat5] = self.vgg.forward(inputs)elif self.backbone == "resnet50":[feat1, feat2, feat3, feat4, feat5] = self.resnet.forward(inputs)up4 = self.up_concat4(feat4, feat5)up3 = self.up_concat3(feat3, up4)up2 = self.up_concat2(feat2, up3)up1 = self.up_concat1(feat1, up2)if self.up_conv != None:up1 = self.up_conv(up1)final = self.final(up1)return finaldef freeze_backbone(self):if self.backbone == "vgg":for param in self.vgg.parameters():param.requires_grad = Falseelif self.backbone == "resnet50":for param in self.resnet.parameters():param.requires_grad = Falsedef unfreeze_backbone(self):if self.backbone == "vgg":for param in self.vgg.parameters():param.requires_grad = Trueelif self.backbone == "resnet50":for param in self.resnet.parameters():param.requires_grad = True

相关文章:

深度学习--图像分割UNet介绍及代码分析

UNet介绍 参考UNet网络介绍整体架构UNet过程输入编码器(下采样)中间特征表示解码器(上采样)输出 代码详解unetUP和Unet关系上采样模块——unetUp用于图像分割的卷积神经网络(CNN)架构模块——Unet类的定义初…...

【递归】什么是递归-C语言为例

递归是指一个函数在其定义中直接或间接调用自身的编程技巧。在C语言中,递归常用于解决可以被分解为更小的子问题的问题。递归函数通常由两个主要部分组成: 基准情况:这是递归停止的条件,通常是最简单的情况。 递归情况&#xff1…...

未发先火,Smartbi AIChat频频“出圈”

近日,思迈特正式官宣,将于8月8日线上新品发布会上推出自研的全新AI应用——Smartbi AIChat,这款应用在还未正式推向市场前,已获得媒体、分析机构等多方关注,热度飙升,思迈特软件及其新品再一次成为业界内外…...

在 Python 中使用 sqlalchemy 来操作数据库的几个小总结

在探索使用 FastAPI, SQLAlchemy, Pydantic,Redis, JWT 构建的项目的时候,其中数据库访问采用SQLAlchemy,并采用异步方式。数据库操作和控制器操作,采用基类继承的方式减少重复代码,提高代码复用性。在这个过程中设计接口和测试的…...

补充:关于GRU的详细运作原理以及特殊的优化思路

1. GRU的基本结构和运作原理 1.1 GRU的基本概念 Gated Recurrent Unit (GRU) 是一种简化版的循环神经网络 (RNN),它通过引入门控机制来解决长期依赖问题,同时减少参数数量以降低计算复杂度。 1.2 GRU的结构详解 GRU 包含两个门控机制:更新门 (update gate) 和重置门 (re…...

fastjson-流程分析

参考视频:fasfjson反序列化漏洞1-流程分析 分析版本 fastjson1.2.24 JDK 8u65 分析过程 新建Person类 public class Person {private String name;private int age;public Person() {System.out.println("constructor_0");}public Person(String na…...

Java面试必看!知己知彼才能百战百胜,如何做好面试前的准备?

随着 Java 这个赛道的不断内卷,这两年,Java 程序员的面试,从原来的常规八股文(有 标准答案)到现在,以项目、场景问题、技术深度思考为主,逐步转变成没有标准答案, 需要大家基于自己的…...

CSDN 僵尸粉 机器人

CSDN 僵尸粉 机器人 1. 前言 不知道什么时候开始每天创作2篇就有1500流量爆光,每次都能收获一些关注和收藏,感觉还是挻开心的感觉CSDN人气还是挻可以的以前各把月一个收藏和关注都没有写的动力了。 2. 正文 后面又连接做了2天的每日创建2篇任务&…...

如何判断IP地址属于住宅IP还是机房IP

在数字化时代,IP地址作为互联网通信的基础标识,扮演着重要的角色。无论是网络管理、数据分析还是安全监控,正确识别IP地址的类型——尤其是区分是住宅IP还是机房IP,对于确保网络安全、优化网络性能以及合法合规运营具有重要意义。IPIDEA代理I…...

做不好PPT的原因

新手制作PPT长犯的10个错误 1.Word搬家 为了节约时间,直接把Word素材复制粘贴到PPT上,没有提炼 2.堆积图表 每个页面上堆积了大量的图表,却没有说明数据反映了什么趋势 3.图表业余 想用图表达自己的逻辑,但没有专业的模板&a…...

技术汇总笔记7:switch 嵌套用法 和 改进 (条件分支相关内容)

嵌套Switch语句的使用和改进 嵌套的switch语句虽然在语法上是允许的,但可能会使代码难以阅读和维护。例如: switch (_get_urgency_ob_type(sData.structure_name)) {case URGENCY_OB_PRESSUREINFO:{switch(_get_urgency_ob_sub_type( sData.attribute_…...

Excel列名转换

这段时间工作中需要用到Excel的列名转换&#xff0c;如列A&#xff0c;转为1或索引0&#xff0c;AA转为27或索引26。于是开发了个代码解决这个问题&#xff0c;简单记录下来。以C#代码为例&#xff1a; /// <summary>/// 电子表格相关转换工具/// </summary>public…...

VUE实现TAB切换不同页面

VUE实现TAB切换不同页面 实现效果 资源准备 ReceiveOrderList, TodoListMulti, SignList 这三个页面就是需要切换的页面 首页代码 <template><div><el-tabs v-model"activeTab" type"card" tab-click"handleTabClick"><…...

TabLayout使用以及自定义tab标签

<?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tool…...

探索LangChain的远程日志管理:高效日志收集的艺术

探索LangChain的远程日志管理&#xff1a;高效日志收集的艺术 在软件开发和系统运维中&#xff0c;日志是诊断问题和监控系统状态的重要工具。随着分布式系统和微服务架构的普及&#xff0c;日志收集和管理变得更加复杂。LangChain作为一个多语言的编程语言链&#xff0c;其日…...

数据库的安装初始化及管理

1. 官网下载或者 wget [rootmysql ~] # ls anaconda-ks.cfg initserver.sh mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar mysql-community-client-8.0.33-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm mysql-community-common-8.0.33-1.el7.…...

Linux 内核源码分析---I/O 体系结构与访问设备

I/O 体系结构 与外设的通信通常称之为输入输出&#xff0c;一般都缩写为I/O。 在实现外设的I/O时&#xff0c;内核必须处理3个可能出现的问题&#xff1a; &#xff08;1&#xff09;必须根据具体的设备类型和模型&#xff0c;使用各种方法对硬件寻址&#xff1b; &#xff08…...

vite静态资源处理,处理vite项目中src和url路径问题

将资源引入为 URL 服务时引入一个静态资源会返回解析后的公共路径&#xff1a; // imgUrl的绝对路径为/img.png import imgUrl from ./img.png document.getElementById(hero-img).src imgUrl例如&#xff0c;imgUrl 在开发时会是 /img.png&#xff0c;在生产构建后会是 /as…...

C++实现基于http协议的epoll非阻塞模型的web服务器框架(支持访问服务器目录下文件的解析)

使用方法&#xff1a; 编译 例子&#xff1a;./httpserver 9999 ../ htmltest/ 可执行文件 端口 要访问的目录下的 例子&#xff1a;http://192.168.88.130:9999/luffy.html 前提概要 http协议 &#xff1a;应用层协议&#xff0c;用于网络通信&#xff0c;封装要传输的数据&…...

linux安装weblogic

文章目录 weblogic是干什么用的weblogic安装前置条件1. 安装jdk2.安装weblogic2.1.创建用户组及用户2.2.切换用户上传安装jar包到目录下&#xff0c;配置文件进行安装准备配置文件2.3保证安装配置文件和安装jar包在同一目录&#xff0c;执行安装命令 3. 创建域来启动页面3.1 构…...

智启万象 | 2024 Google 开发者大会直播攻略

8 月 7 日上午 9:30 2024 Google 开发者大会 主旨演讲直播将准时开启 想要在线上探索大会精彩内容&#xff1f; 快查收这份观看指南&#xff01; 8 月 7 日上午 9:30 2024 Google 开发者大会开幕 锁定大会官网观看主旨演讲现场直播&#xff01; 本次大会内容将同步于多个…...

口语笔记——时间状语从句

状语从句主要用来修饰整句&#xff0c;表示事件发生的时间、地点、原因、方式、条件、比较、让步、目的、结果等。 时态 主将从现&#xff1a;如果主句和从句都表将来&#xff0c;则从句要用现在时 If you come tomorrow, I will be happy.I will be happy if you come tomor…...

Android14音频进阶之命令行播放音频(八十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更…...

8月2日SpringBoot学习笔记

今日内容: AOP 面向切面 代理模式 springmvc 运行原理 拦截器 springmvc异常处理机制 代理模式 为其他对象提供一种代理以控制对这个对象的访问。想在访问一个类时做一些控制是使用。 静态代理 优点&#xff1a;便于理解 缺点&#xff1a; 1.代码冗余&…...

《变形金刚》战斗力排名分析

Top1 天火擎天柱 作为博派的领袖&#xff0c;擎天柱本身实力不凡。然而&#xff0c;胜败乃兵家常事。在《变形金刚2》中&#xff0c;他虽然成功击败了破坏者、碾碎器和红蜘蛛&#xff0c;却不幸被威震天一炮穿心&#xff0c;阵亡。 不过&#xff0c;擎天柱是《变形金刚》系列…...

JSONP跨域

1 概述 定义 json存在的意义&#xff1a; 不同类型的语言&#xff0c;都能识别json JSONP(JSON with Padding)是JSON的一种“使用模式”&#xff0c;可用于解决主流浏览器的跨域数据访问的问题。由于同源策略&#xff0c;一般来说位于 server1.example.com 的网页无法与不是 s…...

linux查询占用端口 杀死占用端口进程

# 如何管理Linux上的进程和端口 管理进程和网络端口是系统管理员的常见任务。本文将介绍如何查询打开的端口、识别使用这些端口的进程以及终止不再需要的进程。 ## 查询打开的端口 您可以使用 netstat 和 lsof 命令来检查哪些进程在使用特定端口。 ### 使用 netstat netst…...

C++模板元一生之友之:std::enable_if

你可以不懂模板元&#xff0c;但是你一定要懂enable_if, 因为你身边的朋友都悄悄地学会了enable_if&#xff0c; 并且让别人读不懂自己看起来很高端的代码。 std::enable_if 是 C11 引入的一个工具&#xff0c;用于在编译时进行条件选择。它主要用来实现模板的 SFINAE&#xff…...

Web端高效元件库——高端元件,匠心设计

原型设计&#xff0c;不仅是产品从构想到落地不可或缺的桥梁&#xff0c;更是深化用户体验优化策略的核心环节。Axure&#xff0c;作为原型设计领域的领航者&#xff0c;凭借其卓越的交互设计引擎与无与伦比的灵活性&#xff0c;赢得了产品设计师们的广泛赞誉&#xff0c;成为他…...

每天一个数据分析题(四百七十)- 散点图

在散点图中所有的样本点都在一条直线上&#xff0c;那么解释变量和被解释变量之间的相关系数可能是&#xff1f; A. -1 B. -2 C. 1 D. 2 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python&…...

通过指令深入了解Linux

文章目录 1.简单介绍XShell1.1下载安装XShell1.2 使用XShell登录主机1.3 XShell下的复制粘贴 2. Linux下的基本指令2.1 ls指令2.1.1 对文件的理解2.1.2 目录下的隐藏文件 2.2 pwd指令2.3 cd指令2.3.1 Linux下目录结构的认识 2.4 touch指令2.5 mkdir指令2.6 clear指令 1.简单介绍…...

C#列表按照日期进行从大到小排序

C#列表按照日期进行从大到小排序...

Java | Leetcode Java题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution {public String removeDuplicateLetters(String s) {boolean[] vis new boolean[26];int[] num new int[26];for (int i 0; i < s.length(); i) {num[s.charAt(i) - a];}StringBuffer sb new StringBuffer();for (in…...

【生成式人工智能-四-chatgpt的训练过程-pretrain预训练自督导式学习督导式学习】

大模型是怎么被训练出来的具有人类智慧的 阶段一训练-自我学习-具备知识训练资料self-supervised learning&#xff08;自督导式学习&#xff09; 阶段二-怎么让模型具备人的智慧supervised learning 督导式学习预训练pretrain为什么要用预训练的模型&#xff1f;Adapter逆向工…...

fabricjs 实现图像的二值化功能

一、效果图 二、图像二值化的作用 二值化是图像处理中常用的一种方法&#xff0c;其作用是将灰度图像转换为二值图像&#xff0c;即将图像中的像素点根据其灰度值分成两类&#xff1a;黑色和白色。这种处理方法可以帮助我们更清晰地识别图像中的目标&#xff0c;简化图像的复杂…...

红黑树的概念和模拟实现[C++]

文章目录 红黑树的概念一、红黑树的性质红黑树原理二、红黑树的优势和比较 红黑树的模拟实现构建红黑树的数据结构定义节点的基本结构和初始化方式插入新节点插入新节点的颜色调整颜色和结构以满足红黑树性质 红黑树的应用场景 红黑树的概念 一、红黑树的性质 红黑树是一种自平…...

常见中间件漏洞(四、Apache合集)

目录 四、Apache 4.1 CVE-2021-41773 漏洞简介 影响版本 环境搭建 漏洞复现 四、Apache 4.1 CVE-2021-41773 Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录<Directory/>Require all gra…...

【Hot100】LeetCode—31. 下一个排列

目录 题目1- 思路2- 实现⭐31. 下一个排列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;31. 下一个排列 1- 思路 技巧题&#xff0c;分为以下几个步骤 ① 寻找拐点&#xff1a; i 1 &#xff1a;出现 nums[i1] > nums[i] &#xff0c;则 i 1 就是拐点 从右向左遍…...

【线性代数】【二】2.5 零空间与非齐次线性方程组的解集

文章目录 前言一、齐次线性方程组的解集二、非齐次线性方程组的解集。2.1 矩阵的列秩等于列数时2.1 矩阵的列秩小于列数时 总结 前言 上文讲到矩阵的零空间&#xff0c;即线性方程组 A x 0 \bm{Ax}\bm{0} Ax0的解集。那么容易联想到的一个问题是&#xff0c; A x b \bm{Ax}\…...

“炎”值加码,数据机房“中暑“罢工,怎么破?

又是热到汗流浃背、头晕脑胀的一天…江浙沪等地正在经历今年来最强高温“烤验”&#xff01;没有最热&#xff0c;只有更热&#xff0c;40摄氏度的高温好像越来越多了&#xff01;最近东北货车司机热到报警&#xff0c;获救后怒赞“杭州人好啊&#xff01;”&#xff0c;“先坐…...

机器学习常见模型

1、线性模型 线性模型是机器学习最基本的算法类型&#xff0c;它试图学到一个通过多个特征&#xff08;属性&#xff09;计算的线性组合来预测的函数&#xff0c;简单的线性回归形式如yaxb&#xff0c;其中&#xff0c;x代表特征&#xff0c;而y代表结果&#xff0c;一旦a和b的…...

基于MATLAB的神经网络的农业病虫害损失预测

基于神经网络的农业病虫害损失预测 一、前言 鉴于农业病虫害经济损失的预测具有较强的复杂性和非线性特性&#xff0c;设计了一种新型的GRNN预测模型&#xff0c;对农业病虫害经济损失进行预测。该模型基于人工神经网络捕捉非线性变化独特的优越性&#xff0c;在神经网络技术和…...

速记Java八股文——网络编程篇

前言 分类汇总 30 常见的 网络编程篇 经典后端面试题&#xff0c;并对题目进行了精炼总结&#xff0c;旨在帮助大家高效记忆&#xff0c;在面试中游刃有余&#xff0c;不至于陷入词穷的窘境。 网络编程篇 TCP 和 UDP 的区别&#xff1f; TCP&#xff1a;面向连接&#xff0c;可…...

Debian | Vscode 安装与配置 C 环境

Debian | Vscode 安装与配置 C 环境 安装 vscode sudo apt update sudo apt install software-properties-common apt-transport-https curlcurl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -sudo add-apt-repository "deb [archamd64…...

UWB实操:使用 litepoint 定制UWB信号,BPRF,HPRF,mean PRF,SFD,gap,PSDU,STS

使用 litepoint 定制UWB信号 预备知识: Technology选择UWBP VSG -> WaveGen ->UWBP Wave settings G...

写一个gradio录音的webui界面并展现波形图

如图下&#xff1a;这是需求 要创建一个 Gradio 录音的 Web UI 界面&#xff0c;你可以使用 Gradio 的 Audio 组件来实现。下面是一个简单的示例&#xff0c;展示了如何创建一个 Gradio 应用程序&#xff0c;其中包含一个录音按钮&#xff0c;用户可以录制音频并提交给服务器处…...

GitHub每日最火火火项目(8.6)

项目名称&#xff1a;bghira / SimpleTuner 项目介绍&#xff1a;SimpleTuner是一个通用的微调工具包&#xff0c;主要面向Stable Diffusion 2.1、Stable Diffusion 3、DeepFloyd和SDXL等模型。它旨在为这些模型提供一种方便的方式进行微调&#xff0c;以适应不同的应用场景和需…...

01【功能项目】之【主角射线点击导航】

首先创建一个Unity3D的项目 打开资源商店添加一个人物模型 选择一个免费资源主角添加至项目中 在unity中打开后点击下载包 点击导入包 导入成功后会出现在资源包Assets下 右键创建地面 设置地面尺寸 创建一个材料方便给地面调配颜色 选择材料的颜色 将材质拖拽给地面组为组件 将…...

Prometheus监控组件在SpringBoot项目中使用实践

Prometheus监控组件在SpringBoot项目中使用实践 时间&#xff1a;2024/7/29 背景&#xff1a;本人最近参与的一个项目&#xff0c;要监控远程软硬件以及本地软硬件&#xff0c;实现远程监控以及告警功能。 开发环境&#xff1a; JDK1.8&#xff0c;Maven&#xff0c;PostgreS…...

蒲公英G5-2250路由器之收集各种硬件的配置页面

前言&#xff1a;此篇文章是为了更好的让大家了解各个路由器的后台设置页面具体有哪些功能&#xff0c;更加的清晰直观&#xff01;&#xff08;如有雷同纯属巧合&#xff0c;如有侵权联系删除&#xff01;&#xff09; 云管理平台 本地地址IP/oraybox/login.html 本地配置页…...