240627_關于CNN中圖像維度變化問題

240627_關于CNN中圖像維度變化問題

在學習一些經典模型時,其中得維度變化關系總搞不太明白,集中學習了以下,在此作以梳理總結:

一般來說涉及到的維度變換都是四個維度,當batch size=4,圖像尺寸為640*640,RGB三通道時,此時維度就是4×3×640×640。3的意思是RGB三通道,如果你傳入的圖像是單通道圖像,此時維度就是4×1×640×640。

當然有些圖你看著是一個黑白圖,但是他還是有可能是一張RGB三通道圖,具體怎么區分呢。右擊圖片打開屬性,打開詳細信息,里面可以看到位深度,位深度為24,則為RGB圖,位深度為8,則為單通道圖。此處就是一個坑,圖像分割任務中,標簽往往是單通道圖,但是有時從網上找到的數據集看起來是黑白的,但是實際訓練就會報錯,查看了才發現位深度是24,需要用python代碼進行修改,具體跳轉240627_圖像24位深度(RGB圖)轉為8位深度(單通道圖)-CSDN博客。

當維度是三維時,就是沒有batch size這個維度,可以理解為這個維度指的是其中一張圖。

標準卷積

以U_Net為例

在這里插入圖片描述

# U_Net網絡的簡單結構,就寫了一層,其他同理
block1=block_down(3,64)
x1_use=block1(x) # torch.Size([3, 64, 568, 568])
x1=self.maxpool(x1_use) # torch.Size([3, 64, 284, 284])'''
block down中卷積核的定義為
self.conv1 = nn.Conv2d(inp_channel, out_channel, kernel_size=3, stride=1,padding_mode='reflect')
self.conv2 = nn.Conv2d(out_channel, out_channel, kernel_size=3, stride=1,padding_mode='reflect')
'''

卷積輸出的計算公式為

h e i g h t o u t = ( h e i g h t i n ? h e i g h t k e r n e l + 2 ? p a d d i n g ) s t r i d e + 1 height_{out}=\frac{(height_{in}-height_{kernel}+2*padding)}{stride}+1 heightout?=stride(heightin??heightkernel?+2?padding)?+1

w i d t h o u t = ( w i d t h i n ? w i d t h k e r n e l + 2 ? p a d d i n g ) s t r i d e + 1 width_{out}=\frac{(width_{in}-width_{kernel}+2*padding)}{stride}+1 widthout?=stride(widthin??widthkernel?+2?padding)?+1

輸入3張572572的RGB圖像(3×3×572×572),經過3×3卷積(padding=0,stride=1),此時的計算公式為
h e i g h t o u t = w i d t h o u t = ( 572 ? 3 + 2 ? 0 ) 1 + 1 = 570 height_{out}=width_{out}=\frac{(572-3+2*0)}{1}+1=570 heightout?=widthout?=1(572?3+2?0)?+1=570
一共經過兩層之后尺寸為568
568,因為kernel的out_channel定義的是64,所以一共有64個卷積核,輸出通道為64,此時維度為3×64×568×568。

然后經過最大池化層,尺寸除以2,通道數不變,此時維度為3×64×284×284

其余層數同理

batch_sizeheightwidthin_channelout_channel
Input35725723
Kernel33364
Output357057064

1×1卷積

以ResNet50為例

image-20240627202246263

我們看shortcuts分支(右半弧線分支),這個分支輸入一張維度為1×256×56×56的圖像,經過一個1×1卷積(stride=2,padding=0),此時經過上述公式計算,尺寸為28,輸出通道數為512。

batch_sizeheightwidthin_channelout_channel
Input15656256
Kernel11256512
Output12828512

當然也有特殊情況,1×1卷積,卷積核尺寸為1,步長為1,padding=0,通過以上公式可以計算出來尺寸不會發生變化,但通道數可以發生改變,由卷積核數量決定。

全連接層

全連接層就是把所有的像素點都攤開,攤成尺寸為1×1,通道數好多好多,其卷積核尺寸和輸入尺寸一致,輸出 通道數就是卷積核個數

batch_sizeheightwidthin_channelout_channel
Input15656256
Kernel5656256512
Output111512

總結

輸出通道數就是卷積核個數

卷積后尺寸計算公式就是

h e i g h t o u t = ( h e i g h t i n ? h e i g h t k e r n e l + 2 ? p a d d i n g ) s t r i d e + 1 height_{out}=\frac{(height_{in}-height_{kernel}+2*padding)}{stride}+1 heightout?=stride(heightin??heightkernel?+2?padding)?+1

w i d t h o u t = ( w i d t h i n ? w i d t h k e r n e l + 2 ? p a d d i n g ) s t r i d e + 1 width_{out}=\frac{(width_{in}-width_{kernel}+2*padding)}{stride}+1 widthout?=stride(widthin??widthkernel?+2?padding)?+1

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

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

相關文章

kylin v10 離線安裝chrome centos離線安裝chrome linux離線安裝谷歌瀏覽器

1. 先用自己聯網的計算機,下載離線安裝包,瀏覽器輸入鏈接下載安裝包: https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 1.2. 信創環境不用執行下面,因為沒網 1.3. 若為阿里云服務器,或服…

深度學習驅動的圖像識別革命

深度學習驅動的圖像識別革命正在徹底改變我們處理、分析和理解視覺信息的方式。以下是對這一革命的分點表示和歸納: 深度學習在圖像識別中的基本原理 特征提取:深度學習通過構建多層神經網絡,能夠自動從原始圖像數據中提取出復雜的特征&…

【第4章】MyBatis-Plus持久層接口之Service Interface(下)

文章目錄 前言一、get1. 示例(getById)2. 示例(getOne)3. 示例(getOne 不拋出異常)4. 示例(getMap)5. 示例(getObj) 二、list1. 示例(list)2. 示例&#xff0…

AR導航技術加持,圖書館閱讀體驗智慧升級

在信息爆炸的今天,圖書館作為知識的寶庫,其藏書量和種類日益增多。然而,傳統的圖書館導航方式已逐漸無法滿足用戶對快速、準確定位圖書的需求。本文將探討圖書館AR地圖導航的實現原理、技術優勢、功能特點以及市場前景,揭示為何AR…

VS studio2019配置遠程連接Ubuntu

VS studio2019配置遠程連接Ubuntu 1、網絡配置 (1)獲取主機IP (2)獲取Ubuntu的IP (3)在 windows 的控制臺中 ping 虛擬機的 ipv4 地址,在 Ubuntu 中 ping 主機的 ipv4 地址。 ubuntu: ping…

【Linux】對共享庫加載問題的深入理解——基本原理概述

原理概述 【linux】詳解——庫-CSDN博客 共享庫被加載后,系統會為該共享庫創建一個結構,這個結構體中的字段描述了庫的各種屬性。在內存中可能會加載很多庫,每一個庫都用一個結構體描述。把這些結構體用一些數據結構管理起來,系…

WordPress Dokan Pro插件 SQL注入漏洞復現(CVE-2024-3922)

0x01 產品簡介 WordPress Dokan Pro插件是一款功能強大的多供應商電子商務市場解決方案,功能全面、易于使用的多供應商電子商務平臺解決方案,適合各種規模的電商項目。允許管理員創建一個多賣家平臺,賣家可以注冊賬戶并在平臺上創建自己的店鋪,展示和銷售自己的產品。提供…

kali下安裝使用蟻劍(AntSword)

目錄 0x00 介紹0x01 安裝0x02 使用1. 設置代理2. 請求頭配置3. 編碼器 0x00 介紹 蟻劍(AntSword)是一個webshell管理工具。 官方文檔:https://www.yuque.com/antswordproject/antsword 0x01 安裝 在kali中安裝蟻劍,分為兩部分&am…

Zabbix 監控系統部署

Zabbix 監控系統部署 Zabbix是一個企業級開源分布式監控解決方案,可監控網絡的眾多參數以及服務器、虛擬機、應用程序、服務、數據庫、網站、云等的運行狀況和完整性。 Zabbix 使用靈活的通知機制,允許用戶為幾乎任何事件配置基于電子郵件的警報。這允許…

java發送圖文到公眾號

這兩天接到了一個新任務,通過后臺管理編寫文章,發送到官網的同時,推送一份到公眾號,研究了一下微信的文檔,發現不難,只需要有幾個注意點就可以了。 注意: 微信公眾號只能訪問微信自己上傳的圖片…

STM32單片機實現串口IAP升級

一.概述 1.要實現串口IAP升級,首先要編寫一個bootloader程序,然后再寫支持IAP的app程序; 2.keil下bootloader的程序rom和ram設置 3.app程序要用bin文件 注:本文以STM32H743舉例,其他stm32單片機IAP升級原理類似。 …

達夢數據庫的系統視圖v$database

達夢數據庫的系統視圖v$database 基礎信息 OS版本: Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本: DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在達夢數據庫(Dameng Database&#xf…

Java——Lambda表達式

1. 背景 Lambda表達式是JavaSE 8中一個重要的新特性。Lambda表達式允許你通過表達式來代替功能接口。 Lambda表達式就和方法一樣,它提供了一個正常的參數列表和一個使用這些參數的主體(body,可以是一個表達式或一個代碼塊)。 Lambda 表達式(…

C# YoloV8 模型效果驗證工具(OnnxRuntime+ByteTrack推理)

C# YoloV8 模型效果驗證工具(OnnxRuntimeByteTrack推理) 目錄 效果 項目 代碼 下載 效果 模型效果驗證工具 項目 代碼 using ByteTrack; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using Sys…

遠程服務器配置(堡壘機samba/ssh等)

分配了新的服務器后,要下載代碼首先要配置ssh。有以下兩種方式: 拷貝原本服務器的在本地的重新生成ssh,再跟服務器密鑰配對(如未備份.gitconfig,還需重新配置git賬號郵箱。) ssh配置 如果是拷貝過來的.ss…

【win11】Mouse without Borders安裝問題以管理員權限安裝msi文件

【win11】Mouse without Borders安裝問題&以管理員權限安裝msi文件 Mouse without Borders安裝問題解決&以管理員權限安裝msi文件啟動Windows Installer服務以管理員權限安裝msi文件 參考文獻 Mouse without Borders安裝問題 在win11下我雙擊MouseWithoutBorders2.2.1…

nodejs使用mysql模塊自動斷開

背景 第二天早上來的時候,發現接口返回異常Cannot enqueue Query after fatal error 從日志看上去,接口是正常運行的,搜索一下之后發現是數據庫的問題,連接斷開了 原因 MySQL中有一個名叫wait_timeout的變量,表示操…

由監官要求下架docker hub鏡像導致無法正常拉取鏡像

問題:下載docker鏡像超時 error pulling image configuration: download failed after attempts6: dial tcp 202.160.128.205:443: i/o timeout解決辦法:配置daemon.json [rootbogon aihuidi]# cat /etc/docker/daemon.json {"registry-mirrors&qu…

java springboot過濾器

在Spring Boot應用中添加自定義過濾器,可以通過實現Filter接口或繼承OncePerRequestFilter類來創建過濾器,并使用FilterRegistrationBean將其注冊到Spring容器中。 以下是一個簡單的示例: 1. 創建過濾器類 首先,創建一個實現Fil…

C++基礎語法:類構造函數

前言 "打牢基礎,萬事不愁" .C的基礎語法的學習 引入 類是實現面向對象思想的主要方法.前面提到:類是函數的變種,類可以通過調用靜態方法或者成員函數來實現邏輯.多數情況下使用成員函數.構造函數是生成類對象成員的必須條件,對此做一些構造函數的歸納 構造函數的目…