從代碼學習深度學習 - 區域卷積神經網絡(R-CNN)系列 PyTorch版

文章目錄

  • 前言
  • R-CNN
  • Fast R-CNN
    • 興趣區域匯聚層 (RoI Pooling)
      • 代碼示例:興趣區域匯聚層 (RoI Pooling) 的計算方法
  • Faster R-CNN
  • Mask R-CNN
    • 雙線性插值 (Bilinear Interpolation) 與興趣區域對齊 (RoI Align)
    • 興趣區域對齊層的輸入輸出
    • 全卷積網絡 (FCN) 的作用
    • 掩碼輸出形狀
  • 總結


前言

歡迎來到“從代碼學習深度學習”系列博客!在計算機視覺領域,目標檢測是一個核心任務,它不僅要求我們識別圖像中的物體,還需要定位它們的位置。區域卷積神經網絡(Region-based Convolutional Neural Networks, R-CNN)及其后續改進版本(Fast R-CNN, Faster R-CNN, Mask R-CNN)是解決這一問題的里程碑式工作。它們逐步提高了目標檢測的準確性和效率,并擴展到實例分割等更復雜的任務。

本篇博客將帶你回顧 R-CNN 系列模型的發展歷程,并通過 PyTorch 代碼示例(重點在興趣區域匯聚層)來理解其核心組件的工作原理。我們將從最初的 R-CNN 開始,逐步探索其改進版本,理解它們是如何解決前代模型的瓶頸,并引入新的創新思想的。

完整代碼:下載鏈接

R-CNN

R-CNN (Regions with CNN features) 是將深度學習應用于目標檢測領域的開創性工作之一。它的核心思想是利用卷積神經網絡(CNN)提取區域特征,從而進行目標分類和定位。

R-CNN 的第一步是從整張圖像中挑選出可能包含物體的小區域,稱為“候選區域”或“提議區域”(region proposals)。這些區域是由 Selective Search 這類算法選出來的,不是通過滑動窗口或CNN直接得到的。數量大約為2000個。(注:錨框是Faster R-CNN等后續方法的技術,R-CNN并不使用錨框。)R-CNN通過先選出可能含目標的圖像區域,對這些區域單獨用CNN提取特征,再用這些特征去判斷目標種類和更精準的位置。

在這里插入圖片描述

上圖展示了R-CNN模型。具體來說,R-CNN包括以下四個步驟:

  1. 對輸入圖像使用_選擇性搜索_(Selective Search)來選取多個高質量的提議區域。這些提議區域通常是在多個尺度下選取的,并具有不同的形狀和大小。每個提議區域都將被標注類別和真實邊界框。
  2. 選擇一個預訓練的卷積神經網絡,并將其在輸出層之前截斷。將每個提議區域變形為網絡需要的輸入尺寸,并通過前向傳播輸出抽取的提議區域特征。
  3. 將每個提議區域的特征連同其標注的類別作為一個樣本。訓練多個支持向量機(SVM)對目標分類,其中每個支持向量機用來判斷樣本是否屬于某一個類別。
  4. 將每個提議區域的特征連同其標注的邊界框作為一個樣本,訓練線性回歸模型來預測真實邊界框。

盡管R-CNN模型通過預訓練的卷積神經網絡有效地抽取了圖像特征,但它的速度很慢。因為可能從一張圖像中選出上千個提議區域,這需要上千次的卷積神經網絡的前向傳播來執行目標檢測。這種龐大的計算量使得R-CNN在現實世界中難以被廣泛應用。

Fast R-CNN

針對 R-CNN 的速度瓶頸,Fast R-CNN 提出了關鍵改進。R-CNN的主要性能瓶頸在于,對每個提議區域,卷積神經網絡的前向傳播是獨立的,而沒有共享計算。由于這些區域通常有重疊,獨立的特征抽取會導致重復的計算。Fast R-CNN 對R-CNN的主要改進之一,是僅在整張圖象上執行卷積神經網絡的前向傳播。

在這里插入圖片描述

上圖中描述了Fast R-CNN模型。它的主要計算如下:

  1. 與R-CNN相比,Fast R-CNN用來提取特征的卷積神經網絡的輸入是整個圖像,而不是各個提議區域。此外,這個網絡通常會參與訓練。設輸入為一張圖像,將卷積神經網絡的輸出的形狀記為1×c×h1×w1。
  2. 假設選擇性搜索生成了n個提議區域。這些形狀各異的提議區域在卷積神經網絡的輸出上分別標出了形狀各異的興趣區域。然后,這些感興趣的區域需要進一步抽取出形狀相同的特征(比如指定高度h2和寬度w2),以便于連結后輸出。為了實現這一目標,Fast R-CNN引入了_興趣區域匯聚層_(RoI pooling):將卷積神經網絡的輸出和提議區域作為輸入,輸出連結后的各個提議區域抽取的特征,形狀為n×c×h2×w2。
  3. 通過全連接層將輸出形狀變換為n×d,其中超參數d取決于模型設計。
  4. 預測n個提議區域中每個區域的類別和邊界框。更具體地說,在預測類別和邊界框時,將全連接層的輸出分別轉換為形狀為n×q(q是類別的數量)的輸出和形狀為n×4的輸出。其中預測類別時使用softmax回歸。

興趣區域匯聚層 (RoI Pooling)

在匯聚層中,我們通過設置匯聚窗口、填充和步幅的大小來間接控制輸出形狀。而興趣區域匯聚層對每個區域的輸出形狀是可以直接指定的。

例如,指定每個區域輸出的高和寬分別為h2和w2。對于任何形狀為h×w的興趣區域窗口,該窗口將被劃分為h2×w2子窗口網格,其中每個子窗口的大小約為(h/h2)×(w/w2)。在實踐中,任何子窗口的高度和寬度都應向上取整,其中的最大元素作為該子窗口的輸出。因此,興趣區域匯聚層可從形狀各異的興趣區域中均抽取出形狀相同的特征。

代碼示例:興趣區域匯聚層 (RoI Pooling) 的計算方法

下面我們通過一段 PyTorch 代碼來演示興趣區域匯聚層 (RoI Pooling) 的計算方法。

# 演示興趣區域匯聚層(ROI Pooling)的計算方法
import torch  # 導入PyTorch庫
import torchvision  # 導入PyTorch視覺庫# 創建一個4×4的特征圖張量作為CNN抽取的特征
# torch.arange(16.) 創建一個包含0到15的一維浮點數張量,維度為[16]
# reshape(1, 1, 4, 4) 將張量重塑為4維張量,維度為[1, 1, 4, 4]
#   第一個維度: 批次大小(batch size) = 1
#   第二個維度: 通道數(channels) = 1
#   第三個維度: 高度(height) = 4
#   第四個維度: 寬度(width) = 4
X = torch.arange(16.).reshape(1, 1, 4, 4)
X[:

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

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

相關文章

18個國內wordpress主題推薦

工廠wordpress中文主題 紅藍色搭配的工廠wordpress中文主題,適合從事生產、加工的工廠官方網站使用。 https://www.jianzhanpress.com/?p8533 Pithy設計師wordpress網站模板 精練簡潔的wordpress模板,設計師或設計工作室展示型網站模板。 https://w…

低成本自動化改造技術錨點深度解析

執行摘要 本文旨在深入剖析四項關鍵的低成本自動化技術,這些技術為工業轉型提供了顯著的運營和經濟效益。文章將提供實用且深入的指導,涵蓋老舊設備聯網、AGV車隊優化、空壓機系統智能能耗管控以及此類項目投資回報率(ROI)的嚴謹…

Oracle — 數據管理

介紹 Oracle數據庫作為全球領先的關系型數據庫管理系統,其數據管理能力以高效性、安全性和智能化為核心。系統通過多維度技術實現海量數據的存儲與實時處理,支持高并發事務操作與復雜分析查詢,滿足企業關鍵業務需求。在安全領域,O…

【PhysUnits】3.3 SI 基礎量綱單位(units/base.rs)

一、源碼 這段代碼定義了一系列基礎物理量綱的類型別名,并使用標記 trait Canonical 來表示它們是國際單位制(SI)中的基本單位。 use crate::Dimension; use typenum::{P1, Z0};/// 標記特質,表示基礎量綱單位 pub trait Canoni…

硬件實操技巧記錄

本篇自用,防止自己忘記 焊接技巧 一般都是隨機電烙鐵錫膏組合。 拆電阻時,電烙鐵放在電阻上,加錫膏,這個時候熔點會降低,電阻更容易掉下來,用電烙鐵帶走;焊電阻時,一端點錫膏&…

13.thinkphp的Session和cookie

一.Session 1. 在使用Session之前,需要開啟初始化,在中間件文件middleware.php; // Session 初始化 \think\middleware\SessionInit::class 2. TP6.0不支持原生$_SESSION的獲取方式,也不支持session_開頭的函數&…

TensorFlow中數據集的創建

目錄 前言示例示例1示例2示例3示例4 前言 TensorFlow 的 tf.data.Dataset API 提供了一種靈活且高效的方式來加載和預處理數據。它可以輕松處理大規模數據集,并支持多種數據源格式。 所有數據集相關的內容都在tf.data中,from_tensor_slices:…

第十六章,網絡型攻擊防范技術

網絡攻擊介紹 網絡攻擊 --- 指的是入侵或破壞網絡上的服務器 ( 主機 ) ,盜取服務器的敏感數據或占用網絡帶寬。 網絡攻擊分類: 流量型攻擊 網絡層攻擊 應用層攻擊 單包攻擊 畸形報文攻擊 --- 向目標主機發送有缺陷的IP報文,使得目標在…

服務器不備案有影響嗎

在當今數字化的時代,服務器成為了眾多企業和個人開展業務、展示自我的重要工具。然而,有一個問題常常被忽視,那就是服務器不備案到底有沒有影響? 答案是肯定的!服務器不備案,影響可不小。據相關數據顯示&a…

【LeetCode Solutions】LeetCode 176 ~ 180 題解

CONTENTS LeetCode 176. 第二高的薪水(SQL 中等)LeetCode 177. 第 N 高的薪水(SQL 中等)LeetCode 178. 分數排名(SQL 中等)LeetCode 179. 最大數(中等)LeetCode 180. 連續出現的數字…

D720201 PCIE 轉USB HUB

1. 啟動時出現了下面錯誤 [ 4.682595] pcieport 0004:00:00.0: Signaling PME through PCIe PME interrupt [ 4.684939] pci 0004:01:00.0: Signaling PME through PCIe PME interrupt [ 4.691287] pci 0004:01:00.0: enabling device (0000 -> 0002) [ 5.2962…

【愚公系列】《Manus極簡入門》028-創業規劃顧問:“創業導航儀”

🌟【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】🌟 📣開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主! &#x1f…

IBM BAW(原BPM升級版)使用教程第六講

續前篇! 一、事件:Undercover Agent 在 IBM Business Automation Workflow (BAW) 中,Undercover Agent (UCA) 是一個非常獨特和強大的概念,旨在實現跨流程或系統的事件處理和觸發機制。Undercover Agent 主要用于 事件驅動的流程…

【強化學習】動態規劃(Dynamic Programming, DP)算法

1、動態規劃算法解題 LeetCode 931. 下降路徑最小和 給你一個 n x n 的 方形 整數數組 matrix ,請你找出并返回通過 matrix 的下降路徑 的 最小和 。 下降路徑 可以從第一行中的任何元素開始,并從每一行中選擇一個元素。在下一行選擇的元素和當前行所選…

深入探索DSPy:開啟模塊化AI編程的新篇章

在當今快速發展的AI時代,語言模型(LM)的應用已經滲透到各個領域,從簡單的文本生成到復雜的多模態任務,語言模型展現出了強大的能力。然而,隨著應用場景的日益復雜,開發者們面臨著一個共同的挑戰…

List<T>中每次取固定長度的數據

工具類方法 package org.common.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** 批處理取值組件* param <T>*/ public class BatchIterator<T> implements Iterator<List<T>> {private final List<T&g…

深入理解 Java 代理模式:從基礎到實戰?

在軟件開發的世界里&#xff0c;設計模式是程序員智慧的結晶&#xff0c;它們為解決常見問題提供了經過驗證的最佳實踐。代理模式作為一種常用的結構型設計模式&#xff0c;在 Java 開發中有著廣泛的應用。本文將深入探討 Java 代理模式&#xff0c;從基本概念、分類、實現原理…

android-ndk開發(11): 安裝 repo 命令

1. 長話短說 mkdir ~/soft/bin curl -L https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo chmod x repo~/.pathrc 添加: export PATH$PATH:~/soft/bin2. 短話長說 repo 的官方介紹頁面&#xff1a; https://gerrit.googlesource.com/git-repo/ repo 的官方下載地…

45.傳導發射整改摸底測試方法

傳導發射整改摸底測試方法 1. 正式摸底預測試2. 簡易方法預測試3. 分析頻譜4. 探查傳播路徑5. 施加措施 1. 正式摸底預測試 去正式實驗室做一次預測試&#xff0c;取得頻譜圖&#xff0c;確定超標頻點和超標量&#xff08;備用&#xff09;。 2. 簡易方法預測試 用小電流探頭…

【漫話機器學習系列】249.Word2Vec自然語言訓練模型

【自然語言處理】用 Word2Vec 將詞語映射到向量空間詳解 一、背景介紹 在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;我們常常需要將文本信息轉化為機器能夠理解和處理的形式。傳統的方法&#xff0c;如 one-hot編碼&#xff0c;雖然簡單&#xff0c;但存在嚴重…