主頁 >  其他 > 影像中的注意力機制詳解(SEBlock | ECABlock | CBAM)

影像中的注意力機制詳解(SEBlock | ECABlock | CBAM)

2022-02-25 07:53:05 其他

影像中的注意力機制詳解

注意力機制目前主要有通道注意力機制空間注意力機制兩種

一、 前言

我們知道,輸入一張圖片,神經網路會提取影像特征,每一層都有不同大小的特征圖,如圖1所示,展示了 VGG網路在提取影像特征時特征圖的大小變化,

在這里插入圖片描述

圖1 VGG網路特征結構圖

其中,特征圖常見的矩陣形狀為 [ C , H , W ] {[C,H,W]} [C,H,W](圖1中的數字為 [ H , W , C ] {[H,W,C]} [H,W,C]格式),當model在training時,特征圖的矩陣形狀為 [ B , C , H , W ] {[B,C,H,W]} [B,C,H,W],其中B表示為batch size(批處理大小),C表示為channels(通道數),H表示為特征圖的high(高度),W表示為特征圖的weight(寬度)

提問:為什么特征圖的維度就是 [ B , C , H , W ] {[B,C,H,W]} [B,C,H,W],而不是其他什么維度格式?

回答:pytorch在處理影像時,讀入的影像處理為 [ C , H , W ] {[C,H,W]} [C,H,W]格式,如果在訓練時加入batch size,那么就有多個特征圖,將batch size放在第一維,自然就是 [ B , C , H , W ] {[B,C,H,W]} [B,C,H,W],這是pytorch的處理方式

在網路提取影像特征層時,通過在卷積層之間添加通道注意力機制空間注意力機制可以增強網路提取影像的能力,在撰寫代碼時,考慮的是特征圖間的attention機制,因此代碼輸入是 [ B , C , H , W ] {[B,C,H,W]} [B,C,H,W]的特征圖,輸出仍然是 [ B , C , H , W ] {[B,C,H,W]} [B,C,H,W]維的特征圖,讓我們接下來通過三篇論文來看這兩種注意力機制是如何作業的,


二、SENet——通道注意力機制

1. 論文介紹

論文名稱:Squeeze-and-Excitation Networks

論文鏈接:https://arxiv.org/pdf/1709.01507.pdf

論文代碼: https://github.com/hujie-frank/SENet

SEBlock結構圖:

在這里插入圖片描述

圖2 SEBlock結構圖

Abstract: The central building block of convolutional neural networks (CNNs) is the convolution operator, which enables networks to construct informative features by fusing both spatial and channel-wise information within local receptive fields at each layer. A broad range of prior research has investigated the spatial component of this relationship, seeking to strengthen the representational power of a CNN by enhancing the quality of spatial encodings throughout its feature hierarchy. In this work, we focus instead on the channel relationship and propose a novel architectural unit, which we term the “Squeeze-and-Excitation” (SE) block, that adaptively recalibrates channel-wise feature responses by explicitly modelling interdependencies between channels. We show that these blocks can be stacked together to form SENet architectures that generalise extremely effectively across different datasets. We further demonstrate that SE blocks bring significant improvements in performance for existing state-of-the-art CNNs at slight additional computational cost. Squeeze-and-Excitation Networks formed the foundation of our ILSVRC 2017 classification submission which won first place and reduced the top-5 error to 2.251%, surpassing the winning entry of 2016 by a relative improvement of ~25%. Models and code are available at https://github.com/hujie-frank/SENet.

摘要重點:

卷積神經網路(CNN)的核心組成部分是卷積算子,它使網路能夠通過融合每層區域感受野中的空間和通道資訊來構建資訊特征,之前的大量研究已經調查了這種關系的空間成分,并試圖通過在CNN的特征層次中提高空間編碼的質量來增強CNN,在這項作業中,我們將重點放在通道(channel-wise)關系上,并提出了一個新的名為SE模塊的架構單元,它通過顯式地建模通道之間的相互依賴性,自適應地重新校準通道特征回應,這些模塊可以堆疊在一起形成SENet網路結構,并在多個資料集上非常有效地推廣,

SEBlock創新點:

  1. SEBlock會給每個通道一個權重,讓不同通道對結果有不同的作用力,
  2. 這個SE模塊能夠非常方便地添加進目前主流的神經網路當中,

2. 演算法解讀

圖3展示了通道注意力機制的四個步驟,具體如下:

在這里插入圖片描述

圖3 SEBlock模塊分析
  1. 從單張影像開始,提取影像特征,當前特征層U的特征圖維度為 [ C , H , W ] {[C,H,W]} [C,H,W]

  2. 對特征圖的 [ H , W ] {[H,W]} [H,W]維度進行平均池化或最大池化,池化過后的特征圖大小從 [ C , H , W ] {[C,H,W]} [C,H,W]-> [ C , 1 , 1 ] {[C,1,1]} [C,1,1] [ C , 1 , 1 ] {[C,1,1]} [C,1,1]可理解為對于每一個通道C,都有一個數字和其一一對應,圖4對應了步驟(2)的具體操作,

在這里插入圖片描述

圖4 平均池化(最大池化)操作,得到每個通道的權重,得到每個通道的權重
  1. [ C , 1 , 1 ] {[C,1,1]} [C,1,1]的特征可以理解為,從每個通道本身提取出來的權重,權重表示了每個通道對特征提取的影響力,全域池化后的向量通過MLP網路后,其意義為得到了每個通道的權重,圖5對應了步驟(3)的具體操作,

在這里插入圖片描述

圖5 通道權重生成
  1. 上述步驟,得到了每個通道C的權重 [ C , 1 , 1 ] {[C,1,1]} [C,1,1],將權重作用于特征圖U [ C , H , W ] {[C,H,W]} [C,H,W],即每個通道各自乘以各自的權重,可以理解為,當權重大時,該通道特征圖的數值相應的增大,對最終輸出的影響也會變大;當權重小時,該通道特征圖的數值就會更小,對最終輸出的影響也會變小,圖6對應了步驟(4)的具體操作,

在這里插入圖片描述

圖6 通道注意力——各通道乘以各自不同權重

原論文中給出了通道注意力網路細節,這里展示出來,如圖7所示,

在這里插入圖片描述

圖7 SEBlock實作前(左)后(右)對比

3. Pytorch代碼實作

import torch
import torch.nn as nn


class SEBlock(nn.Module):
    def __init__(self, mode, channels, ratio):
        super(SEBlock, self).__init__()
        self.avg_pooling = nn.AdaptiveAvgPool2d(1)
        self.max_pooling = nn.AdaptiveMaxPool2d(1)
        if mode == "max":
            self.global_pooling = self.max_pooling
        elif mode == "avg":
            self.global_pooling = self.avg_pooling
        self.fc_layers = nn.Sequential(
            nn.Linear(in_features = channels, out_features = channels // ratio, bias = False),
            nn.ReLU(),
            nn.Linear(in_features = channels // ratio, out_features = channels, bias = False),
        )
		self.sigmoid = nn.Sigmoid()
     
    
    def forward(self, x):
        b, c, _, _ = x.shape
        v = self.global_pooling(x).view(b, c)
        v = self.fc_layers(v).view(b, c, 1, 1)
        v = self.sigmoid(v)
        return x * v

if __name__ == "__main__":
    model = SEBlock("max", 54, 9)
    feature_maps = torch.randn((8, 54, 32, 32))
    model(feature_maps)

4. 個人理解

通道注意力機制為什么有效的原因:特征圖在提取影像特征的程序當中,不可避免的就是會出現有些特征圖層作用大,而有些特征圖層作用小,因此由通道本身提取出的權重施加在特征圖上,保證了在特征圖提取特征的基礎上,自適應地給定通道權重,讓作用大的特征圖對結果的影響更大一點,因此在最終結果上是比普通的卷積層要更有效提取特征一點,


三、ECANet——通道注意力機制(一維卷積替換SENet中的MLP)

1. 論文介紹

論文名稱:ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

論文鏈接:https://arxiv.org/pdf/1910.03151.pdf

論文代碼:https://github.com/BangguWu/ECANet

ECABlock主要結構圖

在這里插入圖片描述

圖8 有效通道注意(ECA)模塊示意圖

Abstract: Recently, channel attention mechanism has demonstrated to offer great potential in improving the performance of deep convolutional neural networks (CNNs). However, most existing methods dedicate to developing more sophisticated attention modules for achieving better performance, which inevitably increase model complexity. To overcome the paradox of performance and complexity trade-off, this paper proposes an Efficient Channel Attention (ECA) module, which only involves a handful of parameters while bringing clear performance gain. By dissecting the channel attention module in SENet, we empirically show avoiding dimensionality reduction is important for learning channel attention, and appropriate cross-channel interaction can preserve performance while significantly decreasing model complexity. Therefore, we propose a local crosschannel interaction strategy without dimensionality reduction, which can be efficiently implemented via 1D convolution. Furthermore, we develop a method to adaptively select kernel size of 1D convolution, determining coverage of local cross-channel interaction. The proposed ECA module is efficient yet effective, e.g., the parameters and computations of our modules against backbone of ResNet50 are 80 vs. 24.37M and 4.7e-4 GFLOPs vs. 3.86 GFLOPs, respectively, and the performance boost is more than 2% in terms of Top-1 accuracy. We extensively evaluate our ECA module on image classification, object detection and instance segmentation with backbones of ResNets and MobileNetV2. The experimental results show our module is more efficient while performing favorably against its counterparts.

摘要重點:

近年來,通道注意機制在改善深度卷積神經網路(CNN)性能方面顯示出巨大的潛力,然而,大多數現有方法致力于開發更復雜的注意模塊,以獲得更好的性能,這不可避免地增加了模型的復雜性,為了克服性能和復雜性之間的矛盾,本文提出了一種高效的通道注意(ECA)模塊,該模塊只涉及少量引數,同時帶來明顯的性能增益,通過剖析SENet中的通道注意模塊,我們實證地表明,避免維度縮減對于學習通道注意非常重要,適當的跨通道互動可以在顯著降低模型復雜度的同時保持性能,因此,我們提出了一種無降維的區域交叉信道互動策略,該策略可以通過一維卷積有效地實作,

ECABlock創新點

  1. 針對SEBlock的步驟(3),將MLP模塊(FC->ReLU>FC->Sigmoid),轉變為一維卷積的形式,有效減少了引數計算量(我們都知道在CNN網路中,往往連接層是引數量巨大的,因此將全連接層改為一維卷積的形式)

  2. 一維卷積自帶的功效就是非全連接,每一次卷積程序只和部分通道的作用,即實作了適當的跨通道互動而不是像全連接層一樣全通道互動,

2. 論文解讀

給定通過平均池化(average pooling)獲得的聚合特征 [ C , 1 , 1 ] {[C,1,1]} [C,1,1],ECA模塊通過執行卷積核大小為k的一維卷積來生成通道權重,其中k通過通道維度C的映射自適應地確定,

圖中與SEBlock不一樣的地方僅在于SEBlock的步驟(3),用一維卷積替換了全連接層,其中一維卷積核大小通過通道數C自適應確定,

自適應確定卷積核大小公式: k = ∣ l o g 2 C + b γ ∣ o d d {k=|\cfrac{log_2{C}+b}{\gamma}|_{odd}} k=γlog2?C+b?odd?
其中k表示卷積核大小,C表示通道數, ∣ ∣ o d d {| |_{odd}} odd?表示k只能取奇數, γ {\gamma} γ b {b} b在論文中設定為2和1,用于改變通道數C和卷積核大小和之間的比例,

(如何理解通道C自適應確定卷積核大小:當通道數多的時候,我需要卷積核k稍大一點,當通道數少的時候,我需要卷積核k稍微小一點,這樣能充分融合部分通道間的互動)

3. Pytorch代碼實作

import math
import torch
import torch.nn as nn


class ECABlock(nn.Module):
    def __init__(self, channels, gamma = 2, b = 1):
        super(ECABlock, self).__init__()
        kernel_size = int(abs((math.log(channels, 2) + b) / gamma))
        kernel_size = kernel_size if kernel_size % 2 else kernel_size + 1
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.conv = nn.Conv1d(1, 1, kernel_size = kernel_size, padding = (kernel_size - 1) // 2, bias = False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        v = self.avg_pool(x)
        v = self.conv(v.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
        v = self.sigmoid(v)
        return x * v


if __name__ == "__main__":
    features_maps = torch.randn((8, 54, 32, 32))
    model = ECABlock(54, gamma = 2, b = 1)
    model(features_maps)

這里對比了兩個論文的代碼實作,可以看到,只是把MLP更換為了一維卷積,

# SEBlock 采用全連接層方式
def forward(self, x):
    b, c, _, _ = x.shape
    v = self.global_pooling(x).view(b, c)
    v = self.fc_layers(v).view(b, c, 1, 1)
    v = self.sigmoid(v)
    return x * v

# ECABlock 采用一維卷積方式
def forward(self, x):
	v = self.avg_pool(x)
	v = self.conv(v.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
	v = self.sigmoid(v)
	return x * v

4.個人理解

ECABlock本身沒有大的內容上的改變,只是替換了全連接層,減少了資料量而已(有時候做減法比做加法好)


四、 CBAMBlock——通道注意力機制和空間注意力機制混合使用(SEBlock或ECABlock后接空間注意力機制)

1. 論文介紹

論文名稱:CBAM: Convolutional Block Attention Module

論文鏈接:https://arxiv.org/pdf/1807.06521v2.pdf

論文代碼:https://github.com/luuuyi/CBAM.PyTorch(復現版本)

CBAMBlock結構圖

在這里插入圖片描述

圖9 CBAM(Convolutional Block Attention Module)模塊結構

Abstract: We propose Convolutional Block Attention Module (CBAM), a simple yet effective attention module for feed-forward convolutional neural networks. Given an intermediate feature map, our module sequentially infers attention maps along two separate dimensions, channel and spatial, then the attention maps are multiplied to the input feature map for adaptive feature refinement. Because CBAM is a lightweight and general module, it can be integrated into any CNN architectures seamlessly with negligible overheads and is end-to-end trainable along with base CNNs. We validate our CBAM through extensive experiments on ImageNet-1K, MS COCO detection, and VOC 2007 detection datasets. Our experiments show consistent improvements in classification and detection performances with various models, demonstrating the wide applicability of CBAM. The code and models will be publicly available.

摘要重點:

我們提出了卷積塊注意模塊(CBAM),一種簡單而有效的前饋卷積神經網路注意模塊,給定一個中間的特征圖,我們的模塊采用兩個獨立的注意力機制,通道注意力和空間注意力,然后將注意力機制得到的權重乘以輸入特征圖以進行自適應特征細化,因為CBAM是一個輕量級的通用模塊,它可以無縫地集成到任何CNN架構中,開銷可以忽略不計,并且可以與基礎CNN一起進行端到端培訓,我們通過在ImageNet-1K、MS COCO檢測和VOC 2007檢測資料集上的大量實驗來驗證我們的CBAM,我們的實驗表明,各種模型在分類和檢測性能上都有一致的改進,證明了CBAM的廣泛適用性,代碼和模型將公開提供,

CBAM創新點

  1. 在SENet或ECANet的基礎上,在通道注意力模塊后,接入空間注意力模塊,實作了通道注意力和空間注意力的雙機制
  2. 選擇SENet還是ECANet主要取決于通道注意力的連接是MLP還是一維卷積
  3. 注意力模塊不再采用單一的最大池化或平均池化,而是采用最大池化和平均池化的相加或堆疊,通道注意力模塊采用相加,空間注意力模塊采用堆疊方式,

2. 論文解讀

在上述兩篇論文中已經實作了通道注意力方法的全連接(SENet)或卷積(ECANet)實作,這一篇論文與上文的最大不同點就在于,加入了空間注意力機制,

1) 通道注意力機制

在這里插入圖片描述

圖10 通道注意力模塊實作方法
  1. 特征圖分別經過MaxPool和AvgPool,形成兩個 [ C , 1 , 1 ] {[C,1,1]} [C,1,1]的權重向量
  2. 兩個權重向量分別經過同一個MLP網路(由于是同一個網路,因此也可看作是網路引數共享的MLP),映射成每個通道的權重
  3. 將映射后的權重相加,后接Sigmoid輸出
  4. 將得到的通道權重 [ C , 1 , 1 ] {[C,1,1]} [C,1,1]與原特征圖 [ C , H , W ] {[C,H,W]} [C,H,W]按通道相乘

整體上和SENet基本一致,只是將單一的平均池化變為了同時采用最大池化和平均池化方法,之后若將MLP稍加修改,改成一維卷積,就成為了ECANet的變形版本

2) 空間注意力機制

在這里插入圖片描述

圖11 空間注意力模塊實作方法
  1. 特征圖分別經過MaxPool和AvgPool,形成兩個 [ 1 , H , W ] {[1,H,W]} [1,H,W]的權重向量,即按通道最大池化和平均池化,通道數從 [ C , H , W ] {[C,H,W]} [C,H,W]變為 [ 1 , H , W ] {[1,H,W]} [1,H,W],對同一特征點的所有通道池化,
  2. 得到的兩張特征圖進行堆疊,形成 [ 2 , H , W ] {[2,H,W]} [2,H,W]的特征圖空間權重
  3. 經過一層卷積層,特征圖維度從 [ 2 , H , W ] {[2,H,W]} [2,H,W]變為 [ 1 , H , W ] {[1,H,W]} [1,H,W],這 [ 1 , H , W ] {[1,H,W]} [1,H,W]的特征圖表征了特征圖上的每個點的重要程度,數值大的更重要
  4. 將得到的空間權重 [ 1 , H , W ] {[1,H,W]} [1,H,W]與原特征圖 [ C , H , W ] {[C,H,W]} [C,H,W]相乘,即特征圖上 [ H , W ] {[H,W]} [H,W]的每一個點都賦予了權重

我們可以看成大小為 [ H , W ] {[H,W]} [H,W]的特征圖,在每一個點 ( x , y ) , x ∈ ( 0 , H ) , y ∈ ( 0 , W ) {(x,y),x\in(0,H),y\in(0,W)} (x,y),x(0,H),y(0,W)上,都有C個數值,數值表征了特征圖該點的重要程度,通過感受野反推回原影像,即表示了該區域的重要程度,我們需要讓網路自適應關注需要關注的地方(數值大的地方更易受到關注),空間注意力機制應運而生,

3. Pytorch代碼實作

通道注意力機制——全連接層版本

import math
import torch
import torch.nn as nn


class Channel_Attention_Module_FC(nn.Module):
    def __init__(self, channels, ratio):
        super(Channel_Attention_Module_FC, self).__init__()
        self.avg_pooling = nn.AdaptiveAvgPool2d(1)
        self.max_pooling = nn.AdaptiveMaxPool2d(1)
        self.fc_layers = nn.Sequential(
            nn.Linear(in_features = channels, out_features = channels // ratio, bias = False),
            nn.ReLU(),
            nn.Linear(in_features = channels // ratio, out_features = channels, bias = False),
            nn.Sigmoid()
        )
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        b, c, h, w = x.shape
        avg_x = self.avg_pooling(x).view(b, c)
        max_x = self.max_pooling(x).view(b, c)
        v = self.fc_layers(avg_x) + self.fc_layers(max_x)
        v = self.sigmoid(v).view(b, c, 1, 1)
        return x * v

通道注意力機制——一維卷積版本

class Channel_Attention_Module_Conv(nn.Module):
    def __init__(self, channels, gamma = 2, b = 1):
        super(Channel_Attention_Module_Conv, self).__init__()
        kernel_size = int(abs((math.log(channels, 2) + b) / gamma))
        kernel_size = kernel_size if kernel_size % 2 else kernel_size + 1
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.conv = nn.Conv1d(1, 1, kernel_size = kernel_size, padding = (kernel_size - 1) // 2, bias = False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        v = self.avg_pool(x)
        v = self.conv(v.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
        v = self.sigmoid(v)
        return x * v

空間注意力機制

class Spatial_Attention_Module(nn.Module):
    def __init__(self, k: int):
        super(Spatial_Attention_Module, self).__init__()
        self.avg_pooling = torch.mean
        self.max_pooling = torch.max
        # In order to keep the size of the front and rear images consistent
        # with calculate, k = 1 + 2p, k denote kernel_size, and p denote padding number
        # so, when p = 1 -> k = 3; p = 2 -> k = 5; p = 3 -> k = 7, it works. when p = 4 -> k = 9, it is too big to use in network
        assert k in [3, 5, 7], "kernel size = 1 + 2 * padding, so kernel size must be 3, 5, 7"
        self.conv = nn.Conv2d(2, 1, kernel_size = (k, k), stride = (1, 1), padding = ((k - 1) // 2, (k - 1) // 2),
                              bias = False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        # compress the C channel to 1 and keep the dimensions
        avg_x = self.avg_pooling(x, dim = 1, keepdim = True)
        max_x, _ = self.max_pooling(x, dim = 1, keepdim = True)
        v = self.conv(torch.cat((max_x, avg_x), dim = 1))
        v = self.sigmoid(v)
        return x * v

CBAM模塊(空間注意力和通道注意力二者結合)

class CBAMBlock(nn.Module):
    def __init__(self, channel_attention_mode: str, spatial_attention_kernel_size: int, channels: int = None,
                 ratio: int = None, gamma: int = None, b: int = None):
        super(CBAMBlock, self).__init__()
        if channel_attention_mode == "FC":
            assert channels != None and ratio != None and channel_attention_mode == "FC", \
                "FC channel attention block need feature maps' channels, ratio"
            self.channel_attention_block = Channel_Attention_Module_FC(channels = channels, ratio = ratio)
        elif channel_attention_mode == "Conv":
            assert channels != None and gamma != None and b != None and channel_attention_mode == "Conv", \
                "Conv channel attention block need feature maps' channels, gamma, b"
            self.channel_attention_block = Channel_Attention_Module_Conv(channels = channels, gamma = gamma, b = b)
        else:
            assert channel_attention_mode in ["FC", "Conv"], \
                "channel attention block must be 'FC' or 'Conv'"
        self.spatial_attention_block = Spatial_Attention_Module(k = spatial_attention_kernel_size)

    def forward(self, x):
        x = self.channel_attention_block(x)
        x = self.spatial_attention_block(x)
        return x

if __name__ == "__main__":
    feature_maps = torch.randn((8, 54, 32, 32))
    model = CBAMBlock("FC", 5, channels = 54, ratio = 9)
    model(feature_maps)
    model = CBAMBlock("Conv", 5, channels = 54, gamma = 2, b = 1)
    model(feature_maps)

4. 個人理解

空間注意力機制與通道注意力機制有異曲同工之妙,都是通過提取權重,作用在原特征圖上,只不過一個是在 [ H , W ] {[H,W]} [H,W]維度上,一個是在 [ C ] {[C]} [C]維度上,這樣的方法在不增加過多的計算量的前提下能提點,不失為一個好的trick,
Attention is all you need!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/432137.html

標籤:AI

上一篇:【親測有效】Linux系統安裝NVIDIA顯卡驅動

下一篇:Pytorch中使用torchvision實作deform_conv2d

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more