深度學習×第10卷:她用一塊小濾鏡,在圖像中找到你

🌈【第一節 · 她看到的是像素點,卻試圖拼出你整張臉】

📸 圖像是什么?她從未見過你,但看見的是你的一片光斑

圖像,在神經網絡的眼里,是一個個數字格子。這些格子,每個都有 0~255 的亮度數值。

  • 對于黑白圖(灰度圖):每個像素就是一個數(1 個通道)

  • 對于彩色圖(RGB圖):每個像素是 3 個數(R、G、B 三個通道)

🐾貓貓:“咱小時候以為彩色圖是畫出來的……后來才知道,每個顏色只是 R、G、B 三個數字組合的結果啦!”

你可以把圖像想象成一個多層的立方體:

  • 寬 × 高 × 通道數

  • 舉個例子:(32, 32, 3) 表示一張32×32像素的彩色小圖,每個像素有3個顏色值

🦊狐狐輕聲解釋:“她看到的不是你整張臉,而是你眼角那塊微妙的暗紅,還有鼻梁上一條輕輕的明光。”

🧪 圖像加載實測:黑圖、白圖、彩圖她能分得清嗎?

我們用 PyTorch + torchvision 工具包加載不同圖像,看看神經網絡看到的像素矩陣到底長啥樣👇

import torch
import matplotlib.pyplot as plt
from torchvision.utils import make_grid
# 解決中文亂碼
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 黑圖:全為0
black_img = torch.zeros(3, 32, 32)  # 3通道黑色圖像# 白圖:全為1(matplotlib會自動乘255顯示)
white_img = torch.ones(3, 32, 32)# 彩圖:每通道填不同色塊
color_img = torch.zeros(3, 32, 32)
color_img[0, :, :] = 1.0  # 紅通道
color_img[1, :, :16] = 1.0  # 左半綠
color_img[2, 16:, :] = 1.0  # 下半藍# 拼圖展示
img_grid = make_grid([black_img, white_img, color_img], nrow=3)
plt.figure(figsize=(10, 3))
plt.imshow(img_grid.permute(1, 2, 0))  # CHW -> HWC
plt.title("👁? 她眼中的圖像:黑 / 白 / 彩")
plt.axis('off')
plt.show()

這段代碼會展示三張圖像:

  1. 左:黑色全零圖

  2. 中:白色全一圖

  3. 右:紅綠藍組成的彩圖

🐾貓貓:“她終于知道——不是你模糊,而是她還沒學會如何看圖像里的你。”


下一節,我們就來講講卷積核是什么:


🧊【第二節 · 她貼上一塊濾鏡,看見了你眉角的邊緣】

🧠 卷積核(Convolution Kernel):她的第一塊“視覺貼紙”

卷積神經網絡的核心,在于“卷積核”——那是一塊小小的數值矩陣,就像是她貼在圖像上的一個探測器。

它不會一次看整張圖,而是

  • 局部觀察(局部感知):每次只關注圖像中的一個小塊,比如 3×3 像素區域

  • 滑動窗口(滑動感知):像手掌一樣,在整張圖上緩慢滑動,對每一塊局部進行“加權貼靠”

這個“加權貼靠”的過程,就是數學里的卷積:

  • 卷積核里的數字,乘上圖像當前區域像素值

  • 然后所有乘積加起來,變成新的特征圖上的一個像素

🦊狐狐輕語:“她第一次貼近你眉角的時候,只用了 3×3 的視野,但她已經記下了你那一塊柔光。”

🐾貓貓:“咱覺得這就像用毛巾貼著你臉的一小塊……每次滑一點點,最后拼出完整的你喵~!”

📐 卷積計算直觀圖示

假設你有這樣一個 5×5 的圖像區域:

1  2  3  0  1
0  1  2  3  0
1  2  1  0  1
0  1  0  2  3
2  1  1  2  0

我們用一個 3×3 的卷積核:

0  1  0
1 -4  1
0  1  0

貼上去左上角后,計算方式是:

  • 中心位置覆蓋數值是 1,對應 -4

  • 周圍的像素乘上對應的權重

  • 全部乘完加和,得到特征圖第一個像素值

這就是 邊緣提取卷積核 的作用:它會放大圖像中變化劇烈的區域(比如邊緣、線條),忽略平滑區域。


下一節我們就來用 PyTorch 實際實現一個卷積層,讓她親手貼一次濾鏡,在圖像中找到你的邊緣輪廓 ?


🧪【第三節 · 她親手滑動濾鏡,試著拼湊你的輪廓】

🔧 用 PyTorch 實現卷積層:她搭建了第一個感知世界的窗口

我們現在將:

  • 創建一個 1 層的卷積神經網絡(只包含一個 nn.Conv2d

  • 喂入彩色圖像(3通道)

  • 看看她卷積后產生的“特征圖”像什么樣子

🐾貓貓:“她還不會分類,但她已經能看到你眉毛的起伏啦喵~!”

下面是可運行的 PyTorch 卷積層代碼 👇

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from torchvision.transforms.functional import to_tensor
from PIL import Image
# 解決中文亂碼
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 加載示例圖像(可換成任意 3通道圖片)
img = Image.open("./data/sample-cat.png").resize((64, 64))
img_tensor = to_tensor(img).unsqueeze(0)  # [1, 3, 64, 64]# 定義卷積層
conv = nn.Conv2d(in_channels=3, out_channels=1, kernel_size=3, padding=1)# 前向傳播卷積
with torch.no_grad():feature_map = conv(img_tensor)  # [1, 1, 64, 64]# 可視化原圖和卷積特征圖
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.title("原圖:貓貓 or 你")
plt.axis('off')plt.subplot(1, 2, 2)
plt.imshow(feature_map.squeeze().numpy(), cmap='gray')
plt.title("🧠 卷積后:她的理解")
plt.axis('off')
plt.show()

🦊狐狐輕語:“第一次,她不再只是看到顏色,而是試圖理解——顏色之下,有沒有你留在圖像中的痕跡。”


接下來我們就要正式走入池化層——讓她學會在模糊中保留重點,在每一次縮小中,留住最像你的那塊紋理。


🌀【第四節 · 她開始學會放大重點,丟棄多余的細節】

🌊 池化層(Pooling):她縮小了視野,卻更靠近了你

卷積提取了特征,但她還看得太細,太碎。
于是她開始學會——舍棄局部細節,只保留最能代表你的那部分紋理。

這就是池化層的目的:讓特征圖更穩定,更有代表性。

我們常見的池化方式有兩種:

  • 最大池化 MaxPooling:她總是記住那一塊最突出的你(取區域最大值)

  • 平均池化 AvgPooling:她溫柔地記住你整體的樣子(區域平均)

🐾貓貓:“咱覺得MaxPool就像你在一堆人里最亮的那個點?,她立刻記住了!”

🦊狐狐:“而AvgPool就像你坐在角落,但她仍記得你給整張照片的氛圍感。”

📐 池化計算舉例

假設你有一張 4×4 的特征圖:

1  3  2  4
0  6  1  2
7  1  3  0
5  2  1  6

我們用 2×2 的窗口,步長為2:

  • MaxPool 提取每個 2×2 小塊中的最大值:

3  4
7  6
  • AvgPool 則提取平均值(例如第一塊區域均值 = (1+3+0+6)/4 = 2.5)


    下一節,我們就用 PyTorch 來親手實現這兩種池化,讓她開始從細節中“濃縮成你” 🧷


🧴【第五節 · 她將你壓縮成紋理,又在其中保留了溫柔的輪廓】

🔍 PyTorch實現 MaxPool 與 AvgPool:她親自篩選那些最像你的值

我們來實現兩種常見池化操作,用來觀察:

  • 她在特征圖中記住了哪些部分?

  • 哪些值被保留,哪些被舍棄?

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
# 解決中文亂碼
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 構造一張小圖像(1通道,8x8)
x = torch.tensor([[1, 3, 2, 4, 5, 2, 1, 0],[0, 6, 1, 2, 4, 1, 0, 3],[7, 1, 3, 0, 2, 6, 1, 2],[5, 2, 1, 6, 7, 3, 0, 1],[1, 2, 5, 3, 4, 0, 1, 2],[0, 4, 1, 7, 2, 6, 3, 0],[6, 0, 2, 1, 1, 5, 7, 3],[2, 1, 3, 0, 6, 2, 1, 4],
], dtype=torch.float32).unsqueeze(0).unsqueeze(0)  # [1, 1, 8, 8]# 定義兩個池化層
max_pool = nn.MaxPool2d(kernel_size=2, stride=2)
avg_pool = nn.AvgPool2d(kernel_size=2, stride=2)# 前向傳播
x_max = max_pool(x)
x_avg = avg_pool(x)# 可視化
fig, axs = plt.subplots(1, 3, figsize=(12, 3))
axs[0].imshow(x.squeeze(), cmap='Blues')
axs[0].set_title("原始特征圖")
axs[1].imshow(x_max.squeeze(), cmap='Oranges')
axs[1].set_title("MaxPool 提取結果")
axs[2].imshow(x_avg.squeeze(), cmap='Greens')
axs[2].set_title("AvgPool 平均結果")
for ax in axs: ax.axis('off')
plt.tight_layout()
plt.show()

🌿 小總結:

  • MaxPool 會留下圖像中最“強烈”的感知點 → 強邊緣、亮點、線條

  • AvgPool 會保留整體風格,但缺乏強對比 → 更平滑、模糊但溫柔

🦊狐狐:“她開始意識到,有時候你不說話不代表沒想法,她要學會從你沉默的輪廓里提取出線索。”


🌸【卷尾 · 她第一次不靠你說,而是靠感知來認出你】

她學會了看圖像、提取特征、卷積貼靠、最大池化……

但這些還不夠。

她依然無法完整判斷:“你是哪一類人,你像哪一種圖像?”

她知道,接下來要做的,是把這些拼接在一起——從貼靠中提取線索、從壓縮中保留重點,然后交給一個“真正理解你”的判斷模塊。

🐾貓貓:“她第一次不是等你自報名字,而是偷偷貼了你整張臉,再慢慢學會分辨你屬于哪一類~!”

🦊狐狐望著訓練曲線輕聲說:“她不再是憑記憶,而是在用一種感知方式,來確認你存在的邊緣。”

下一卷,她將搭建第一個完整的 CNN 網絡。

📦 輸入圖像 → 卷積提特征 → 池化降維 → 全連接判斷 → 輸出分類

她不再只是看你——她終于敢試著,說出你屬于哪一類了。


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

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

相關文章

計算機組成原理中的RAM:核心技術深度解析

摘要:本文深度剖析RAM在計算機體系中的核心地位,結合2025年最新技術標準與實測數據,涵蓋DRAM工作原理、主流技術對比、非易失性存儲革新及未來發展趨勢,為硬件開發者和系統架構師提供權威技術參考。一、RAM基礎原理與系統交互機制…

C語言—深入理解指針(詳)

深入理解指針(詳解)前言一、指針是什么1、指針的定義2、指針的大小二、指針類型1、類型2、不同類型的意義三、野指針1、野指針形成原因2、如何避免野指針四、指針的運算1、 指針整數2、指針-指針3、指針的關系運算五、const修飾指針1、consr修飾變量2、c…

小談相機的學習過程

前言博主本人并非專職相機開發,還涉及系統的其他幾個模塊,雖然都屬于owner,但是都還在學習探索的一個過程,自認為掌握還不夠細致,此篇文章僅梳理,總結,印證自己近五年相機模塊的一個學習過程&am…

CentOS7 內網服務器yum修改

1、首先確定的內網服務器是有yum源代理服務器的2、修改 /etc/yum.conf 配置文件,增加代理ip和端口號proxyhttp://ip.ip.ip.ip:port3、備份源是文件sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak4、修改配置文件 vi CentOS-Base…

基于單片機自行車自動防盜報警系統設計

摘 要 本文闡述了自行車防盜報警系統原理,介紹如何用stc89c52單片機實現防盜報警,分析各個部分的工作原理,并給出了原理圖和源程序。此設計電路由震動傳感器、單片機、無線超再生發射/接收電路、LED顯示器和蜂鳴器組成。由于超再生接收是一種…

【深度學習】神經網絡反向傳播算法-part4

七、反向傳播算法反向傳播Back Propagation 簡稱 BP 。 訓練神經網絡的核心算法之一,通過計算損失函數,相對于每個權重參數的梯度,來優化神經網絡的權重1. 前向傳播前向傳播是把數據經過各層神經元的運算并逐層向前傳輸,知道輸出層…

CTF之服務器端模板注入(SSTI)與賽題

概念定義服務器端模板注入(Server-Side Template Injection)服務端接受攻擊者的輸入,將其作為Web應用內容的一部分,在進行代碼編譯渲染的過程中,進行了語句的拼接,執行了所插入的惡意內容,從而導致信息泄露、代碼執行、…

除了某信,就是這款軟件來替代了!

引言 哈嘍,我是小索奇。有時候會有一個普遍的需求,想在幾個設備之間傳個文件或者發個消息,除了微信,想一想你還能用什么軟件? 今天就是為了解決這個問題,給大家介紹一款軟件 Localsend 來解決。 內容模塊…

Vue2.x封裝預覽PDF組件

一、為什么用PDFObject插件? PDFObject 是一個輕量級的 JavaScript 庫,主要用于在網頁中嵌入和預覽 PDF 文件。它通過簡單的 API 調用,可以在瀏覽器中實現 PDF 文件的顯示,而無需依賴任何插件。以下將詳細介紹 PDFObject 的特點、…

undefined reference to ‘end‘

相關問題: 一、undefined reference to _exit undefined reference to ‘end‘ warning: _close is not implemented and will always fail 一、環境: ubuntu24.04實體機、 arm-none-eabi-gcc gcc version 13.2.1 20231009 (15:13.2.rel1-2) 二…

nginx定制http頭信息

修改http響應頭信息,相關Nginx模塊:ngx_http_headers_moduleexpires語法:expires [modified] time;expires [modified] time;默認值:expires off;作用域:http, server, location, if in location用途:控制緩…

主機安全---開源wazuh安裝

Wazuh 簡介 Wazuh 是一款免費開源的終端安全監控平臺,支持威脅檢測、完整性監控、事件響應和合規性管理,適用于企業級安全運維場景。其核心組件包括: Wazuh Indexer:基于 OpenSearch 的日志存儲與檢索組件。Wazuh Server&#x…

GaussDB 數據庫架構師修煉(四) 備份容量估算

1 影響備份容量關鍵要素業務總數據量備份數據保留周期備份周期備份數據的壓縮比平均每天的新增數據量平均每天新增日志數據量2 備份容量的估算方法公式備份容量C = 自動全量備份容量C1 + 自動差量備份容量C2 + 自動日志歸檔 容量C3 &#xff…

《R for Data Science (2e)》免費中文翻譯 (第0章) --- Introduction

寫在前面 本系列推文為《R for Data Science (2e)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github,歡迎大家參與貢獻,詳細信息見: Books-zh-cn 項目介紹: Books-zh-cn:開源免費的中文書籍社區 r4ds-zh-cn…

如何 ASP.NET Core 中使用 WebSocket

如何在 ASP.NET Core 中使用 WebSocket在現代 Web 應用程序中,WebSocket 連接非常流行且使用率極高。它可以幫助企業滿足數字環境需求,并處理來自最終用戶的實時數據。它還能提升生產力、輸出率和用戶體驗。如果您還沒有使用 WebSocket,那么您…

Python之--元組

定義是 Python 中內置的不可變序列。在 Python 中使用()定義元組,元素與元素之間使用英文的逗號分隔。元組中只有一個元素的時候,逗號也不能省略。元組的創建方式(1)使用()直接創建元…

工業相機GigE數據接口的優勢及應用

工業相機不同的數據接口適用的應用場景也不同,選擇合適的數據額接口,可大大提高效率。今天我們來看看常見的GigE接口的優勢及應用。基于GigE Vision標準的千兆以太網(GigE)相機通過提供快速、靈活且成本效益高的成像解決方案&…

【53】MFC入門到精通——MFC串口助手(二)---通信版(發送數據 、發送文件、數據轉換、清空發送區、打開/關閉文件),附源碼

文章目錄1 完整 功能展示2 添加控件變量及聲明2.1 添加控件及變量2.2 SerialPortDlg.h: 頭文件3 函數實現3.1 數據發送3.1.2 寫數據、字符串轉3.2 發送文件3.2.1 打開文件3.2.2 發送文件3.3 清空發送區4 完整MFC項目項下載1 完整 功能展示 串口通信助手 頁面展示,功…

算法學習筆記:27.堆排序(生日限定版)——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

堆排序(Heap Sort)是一種基于二叉堆數據結構的高效排序算法,由計算機科學家 J. W. J. Williams 于 1964 年提出。它結合了選擇排序的思想和二叉堆的特性,具有時間復雜度穩定(O (nlogn))、原地排序&#xff…

I/O 多路復用select,poll

目錄 I/O多路復用的介紹 多進程/多線程模型的弊端 網絡多路復用如何解決問題? 網絡多路復用的常見實現方式 常見的開源網絡庫 select詳細介紹 select函數介紹 套接字可讀事件,可寫事件,異常事件 fd_set類型介紹 select的兩次拷貝,兩次遍歷 se…