【深度學習】Unet的基礎介紹

U-Net是一種用于圖像分割的深度學習模型,特別適合醫學影像和其他需要分割細節的任務。如圖:
在這里插入圖片描述

Unet論文原文

為什么叫U-Net?

U-Net的結構像字母“U”,所以得名。它的結構由兩個主要部分組成:

下采樣(編碼器):圖像逐漸被縮小并且提取特征。
上采樣(解碼器):逐漸恢復圖像的尺寸,并通過“跳躍連接”將高分辨率的特征與低分辨率的特征結合,以保持細節。

網絡結構

U-Net通常包括以下幾部分:

(1)下采樣(編碼器)
這一部分通過卷積操作逐步降低圖像的分辨率,同時提取越來越抽象的特征。每個卷積層后面跟著一個池化層(比如最大池化),池化層會減少圖像的尺寸,幫助網絡捕捉全局信息。
(2)瓶頸層
當圖像經過幾次下采樣后,網絡會到達最小尺寸的圖像,這一部分的特征信息會被壓縮成最具代表性的特征。
(3)上采樣(解碼器)
上采樣過程會將圖像逐漸恢復到原始大小,通過轉置卷積(反卷積)或者插值操作來擴大圖像的尺寸。
(4)跳躍連接
這里的“跳躍連接”是U-Net的一大特點。在上采樣階段,網絡會將下采樣階段的特征圖直接傳遞到解碼器中,這樣可以幫助網絡更好地恢復圖像的細節,防止圖像中的細微特征丟失。

Unet的特點

  1. UNet也是一個編解碼模型,它將各級分辨率的卷積特征圖和反卷積特征圖進行了融合。
  2. Unet輸入和輸出大小是同樣的維度。
  3. 如圖在這里插入圖片描述
    網絡的右側虛線框部分叫作擴展路徑(expansive path)。
    它同樣由4個網絡塊組成,每個網絡塊開始之前通過反卷積將特征圖的尺寸乘2,同時將其通道數減半(最后一層略有不同)?,然后和左側對稱的壓縮路徑的特征圖合并。由于左側壓縮路徑和右側擴展路徑的特征圖的尺寸不一樣,U-Net是通過將壓縮路徑的特征圖裁剪到和擴展路徑的特征圖相同尺寸進行歸一化的。
    擴展路徑的卷積操作依舊使用的是有效卷積操作,最終得到的特征圖的尺寸是388×388。由于該任務是一個二分類任務,因此網絡有兩個輸出特征圖。

在U-Net的網絡結構中通過裁剪的方式將左側的特征圖調整到和右側特征圖相同的大小(圖左側部分中的虛線部分)

U-Net論文中沒有全連接層(Linear層),且全程使用valid來進行卷積,這樣可以保證分割的結果都是基于沒有缺失的上下文特征得到的,因此輸入輸出的圖像尺寸不一樣。

需要注意的是,論文中的輸入圖像的尺寸為 572 像素×572 像素,而輸出圖像的尺寸是388 像素×388像素大小,輸入與輸出并不一致;整個網絡在很多情況下,輸出比輸入寬高減少了 2,這主要是因為卷積層采用了“valid”的邊緣填充(padding)方式,其中 stride=1,因此,輸出的特征圖會逐漸減小。

評價指標

Dice Loss是由Dice系數而得名的,Dice系數是一種用于評估兩個樣本相似性的度量函數,其值越大意味著這兩個樣本越相似,Dice系數的數學表達式如下:
在這里插入圖片描述
式中,X表示真實分割圖像的像素標簽,Y表示模型預測分割圖像的像素類別,|X∩Y|為預測圖像的像素與真實標簽圖像的像素之間的點乘,并將點乘結果相加,|X|和|Y|分別為它們各自對應圖像中的像素相加。

代碼舉例

class UNet(nn.Module):def __init__(self, in_channels, num_classes):super(UNet, self).__init__()self.inc = InConv(in_channels, 64)self.down1 = downsample_block(64, 128)self.down2 = downsample_block(128, 256)self.down3 = downsample_block(256, 512)self.down4 = downsample_block(512, 512)self.up1 = upsample_block(1024, 256)self.up2 = upsample_block(512, 128)self.up3 = upsample_block(256, 64)self.up4 = upsample_block(128, 64)self.outc = OutConv(64, num_classes)def forward(self, x):x1 = self.inc(x)x2 = self.down1(x1)x3 = self.down2(x2)x4 = self.down3(x3)x5 = self.down4(x4)x = self.up1(x5, x4)x = self.up2(x, x3)x = self.up3(x, x2)x = self.up4(x, x1)x = self.outc(x)return x

in_channels 是輸入圖像的通道數,num_classes 是輸出類別數(通常為1)

U-Net的前向傳播過程
編碼器路徑:
輸入圖像首先通過 InConv 模塊,生成64通道的特征圖 x1
然后依次通過四個下采樣模塊 down1、down2、down3、down4,分別生成128、256、512、512通道的特征圖 x2、x3、x4、x5。

解碼器路徑:
解碼器路徑從 x5 開始,通過 up1 模塊與 x4 進行拼接,生成256通道的特征圖。

然后依次通過 up2、up3、up4 模塊,分別與 x3、x2、x1 進行拼接,生成128、64、64通道的特征圖。

最后通過 OutConv 模塊生成最終的分割結果。

其中,函數定義如下:
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896168.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RT-Thread+STM32L475VET6實現定時器定時功能

文章目錄 前言一、板載資源介紹二、具體步驟1.打開STM32CubeMX進行相關配置1.1 使用外部高速時鐘,并修改時鐘樹1.2 打開定時器(定時器根據自己需求調整)1.3 打開串口1.4 生成工程 2. 配置定時器2.1 打開HWTIMER設備驅動2.2 聲明定時器2.3將stm32l4xx_hal_msp.c中HAL…

Linux /etc/fstab文件詳解:自動掛載配置指南(中英雙語)

Linux /etc/fstab 文件詳解:自動掛載配置指南 在 Linux 系統中,/etc/fstab(File System Table)是一個至關重要的配置文件,它用于定義系統開機時自動掛載的文件系統。如果你想讓磁盤分區、遠程存儲(如 NFS&…

鏈表-基礎訓練(二)鏈表 day14

兩兩交換鏈表中的節點 題目示意: 給定一個鏈表,兩兩交換其中相鄰的節點,并返回交換后的鏈表。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。 原先我的思路是圖像上的思路,但是我感覺還是很復雜…

Unity游戲制作中的C#基礎(4)數組聲明和使用

一、數組的聲明 在 C# 中,聲明數組有多種方式,每種方式都有其適用的場景,下面為你逐一詳細介紹: 1. 直接初始化聲明 這種方式直觀且便捷,在聲明數組的同時就為其賦初值,讓數組從誕生之初就擁有了具體的數據…

【Gin-Web】Bluebell社區項目梳理5:投票功能分析與實現

本文目錄 一、投票功能投票流程實現代碼redis投票 一、投票功能 投票流程 首先我們要明確,就是 誰(哪個用戶:userID) 給 哪個帖子(postID) 投了 什么票(贊成票or反對票)。 贊成票…

XUnity.AutoTranslator-deepseek——調用騰訊的DeepSeek V3 API,實現Unity游戲中日文文本的自動翻譯

XUnity.AutoTranslator-deepseek 本項目通過調用騰訊的DeepSeek V3 API,實現Unity游戲中日文文本的自動翻譯。 準備工作 1. 獲取API密鑰 訪問騰訊云API控制臺申請DeepSeek的API密鑰(限時免費)。也可以使用其他平臺提供的DeepSeek API。 …

Python爬蟲-批量爬取股票數據貓各股票代碼

前言 本文是該專欄的第47篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文筆者以股票數據貓為例子,基于Python爬蟲,批量獲取各股票代碼數據。 具體實現思路和詳細邏輯,筆者將在正文結合完整代碼進行詳細介紹。廢話不多說,下面跟著筆者直接往下看正文詳細內容。(附…

《Keras 3 :使用 Vision Transformers 進行物體檢測》:此文為AI自動翻譯

《Keras 3 :使用 Vision Transformers 進行物體檢測》 作者:Karan V. Dave 創建日期:2022 年 3 月 27 日最后修改時間:2023 年 11 月 20 日描述:使用 Vision Transformer 進行對象檢測的簡單 Keras 實現。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 介紹 A…

vue-treeselect顯示unknown的問題及解決

問題 解決辦法 去node-modules包里面找到這個組件的源碼,在它dist文件里面找到這個文件,然后搜索unknown,把它刪掉就可以解決了。

深入剖析抽象工廠模式:設計模式中的架構利器

深入剖析抽象工廠模式:設計模式中的架構利器 在軟件開發領域,設計模式是解決常見問題的通用方案,而抽象工廠模式作為創建型設計模式的重要一員,在構建復雜軟件系統時發揮著關鍵作用。它為創建一系列相關或相互依賴的對象提供了一…

python獲取網頁內容 靠譜的做法

獲取網頁內容 response requests.get(url, verifyFalse) 通過這種方式下載網址不太靠譜, 容易出 ssl錯誤 requests.exceptions.SSLError: HTTPSConnectionPool(hostagri.hainan.gov.cn, port443): Max retries exceeded with url: /hnsnyt/xxgk/gfxwj/index_1.html (Caused by…

MFC中CString的Format、與XML中的XML_SETTEXT格式化注意

1、在MFC中導入 "msxml6.dll",并使用其中的XML_SETTEXT函數,此調用在進行格式化的時候,調用的還是CString.Format()函數! 2、用double類型的數據,格式化整形數%d之前,必須將double強轉為int&…

Linux-C-函數棧-SP寄存器

sp(Stack Pointer,棧指針)是計算機體系結構中一個非常重要的寄存器,下面將詳細介紹其作用和原理。 作用 1. 管理棧內存 棧是一種后進先出(LIFO,Last In First Out)的數據結構,在程…

從零開始用react + tailwindcs + express + mongodb實現一個聊天程序(一)

項目包含5個模塊 1.首頁 (聊天主頁) 2.注冊 3.登錄 4.個人資料 5.設置主題 一、配置開發環境 建立項目文件夾 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 創建前端項目時我們選擇javascrip…

深入理解 QObject的作用

QObject 作為 Qt 庫中所有對象的基類,其地位無可替代。幾乎 Qt 框架內的每一個類,無論是負責構建用戶界面的 QWidget,還是專注于數據處理與呈現的 QAbstractItemModel,均直接或間接繼承自 QObject。這種繼承體系賦予 Qt 類庫高度的…

22爬蟲:使用Drission Page的兩個案例

案例一:使用DrissionPage抓取BOSS上的招聘信息 使用requests獲取BOSS網站上的內容是非常困難的,但是通過網頁自動化工具DrissionPage或者是Playwright或者是Seleenium是非常容易的,接下來我們就給出使用DrissionPage爬取BOSS網站python招聘的…

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_atoi 函數

ngx_atoi 聲明在 src/core/ngx_string.h ngx_int_t ngx_atoi(u_char *line, size_t n); 定義在 src/core/ngx_string.c ngx_int_t ngx_atoi(u_char *line, size_t n) {ngx_int_t value, cutoff, cutlim;if (n 0) {return NGX_ERROR;}cutoff NGX_MAX_INT_T_VALUE / 10;cutlim…

具有整合各亞專科醫學領域知識能力的AI智能體開發綱要(2025版)

整合各亞專科醫學領域知識能力的AI代理的開發與研究 一、引言 1.1 研究背景 在科技飛速發展的當下,人工智能(AI)已成為推動各行業變革的關鍵力量,醫療領域也不例外。近年來,AI 在醫療行業的應用取得了顯著進展,從醫學影像診斷到疾病預測,從藥物研發到個性化醫療,AI 技…

如何設計app測試用例

功能測試 測試方法:等價類劃分法、邊界值法、場景法、因果圖法。優先級設定:核心業務功能設為高優先級。需求覆蓋 正向場景、反向場景、關聯接口串場景 與后端開發確認測試用例是否全面覆蓋后端邏輯。和產品確認用例是否覆蓋本次需求,以及是否…

YOLO11 【四】 【DNF制作自己的數據集,切割視頻以及labelimg 閃退問題】

一、問題labelimg 閃退 一點w打標 labelimg就閃退 **原因 : python 版本太高 ** 解決辦法:單獨創建一個虛擬環境用于打標 conda create -n labelimg python3.9 二、使用python腳本切割視頻 # -*- coding: utf-8 -*- import cv2 import osdef video_…