總金額: 會員:NT$ 0 非會員:NT$ 0 
(此金額尚未加上運費)
電子電信技術 電腦技術 自動化基礎理論
 
 
 
 
深度學習之PyTorch物體檢測實戰(配件另行下載)
 作  者: 董洪義
 出版單位: 機械工業
 出版日期: 2020.01
 進貨日期: 2020/2/5
 ISBN: 9787111641742
 開  本: 16 開    
 定  價: 668
 售  價: 534
  會 員 價: 490
推到Facebook 推到Plurk 推到Twitter
前往新書區 書籍介紹 購物流程  
 
編輯推薦:

百度自動駕駛高級算法工程師重磅力作

長江學者特聘教授王田苗、百度自動駕駛技術總監陶吉等7位專家力薦

提供完整的源代碼文件及相關的論文導引

系統介紹物體檢測的相關概念、發展和經典實現方法

用PyTorch從代碼角度詳解Faster RCNN、SSD和YOLO三個經典檢測器

詳細講解物體檢測的輕量化網絡、細節處理、難點問題及未來發展趨勢

7位重量級大咖力薦:

教育部長江學者特聘教授 王田苗

百度自動駕駛技術總監 陶吉

百度自動駕駛前事業部主任架構師 夏添

商湯科技研發總監 武偉

義柏資本技術專家 丁寧

曠視研究院研究員 朱本金

阿里巴巴達摩院視覺工程師 唐家聲

一分鐘了解《深度學習之PyTorch物體檢測實戰》:

學習物體檢測需要哪些基礎知識?

如何成為PyTorch框架的“老司機”?

怎樣理解Faster RCNN、SSD與YOLO?

什麼是Anchor與NMS?該如何改進?

如何實現輕量化檢測網絡?

如何緩解樣本不均衡與過擬合問題?

如何解決多尺度檢測與擁擠遮擋檢測?

物體檢測未來的發展趨勢如何?

如何選擇適合自己應用的檢測器?

……

通過閱讀《深度學習之PyTorch物體檢測實戰》,你將獲得這些複雜問題的基本答案,並能較為全面地掌握物體檢測技術。

《深度學習之PyTorch物體檢測實戰》核心內容:

理論基礎:

物體檢測發展歷程

PyTorch框架基礎知識

多種網絡骨架:Backbone

物體檢測三大經典框架:

兩階經典檢測器:Faster RCNN

單階多層檢測器:SSD

單階經典檢測器:YOLO

物體檢測深入分析:

壓縮再擴展:SqueezeNet

深度可分離:MobileNet

通道間混洗:ShuffleNet

非極大值抑制:NMS

樣本不均衡問題

模型過擬合

多尺度物體檢測

擁擠與遮擋檢測

Anchor-Free思想

物體檢測發展趨勢

超值贈送:

源代碼(需要下載)


內容簡介:

《深度學習之PyTorch物體檢測實戰》從概念、發展、經典實現方法等幾個方面系統地介紹了物體檢測的相關知識,重點介紹了Faster RCNN、SDD和YOLO這三個經典的檢測器,並利用PyTorch框架從代碼角度進行了細緻講解。另外,《深度學習之PyTorch物體檢測實戰》進一步介紹了物體檢測的輕量化網絡、細節處理、難點問題及未來的發展趨勢,從實戰角度給出了多種優秀的解決方法,便於讀者更深入地掌握物體檢測技術,從而做到在實際項目中靈活應用。

《深度學習之PyTorch物體檢測實戰》共10章,涵蓋的主要內容有物體檢測與PyTorch框架基礎概念與背景知識;PyTorch基礎知識;基礎卷積網絡Backbone;兩階經典檢測器Faster RCNN;單階多層檢測器SSD;單階經典檢測器YOLO;模型加速之輕量化網絡;物體檢測細節處理;物體檢測難點問題;物體檢測的未來發展。

《深度學習之PyTorch物體檢測實戰》內容豐富,講解通俗易懂,案例典型,實用性強,特別適合PyTorch框架愛好者和物體檢測相關從業人員閱讀,也適合深度學習和計算機視覺領域的研究人員閱讀。另外,《深度學習之PyTorch物體檢測實戰》還適合作為深度學習培訓機構的教材使用。


作者簡介:

董洪義 本科、碩士均畢業於北京航空航天大學。深度學習與PyTorch資深愛好者。現任百度自動駕駛高級算法工程師。曾擔任Phantom Tiger算法負責人、地平線智能駕駛部門算法實習生、北航國際拓展團團長。曾經被評為北京航空航天大學年度人物。曾經獲得了Kaggle競賽銀牌。本科期間成績年級第一,曾前往日本、英國、比利時、荷蘭等國的知名學校訪問交流。研究方向為自動駕駛感知、智能機器人與計算機視覺。有3年以上的深度學習研發經驗。


圖書目錄:

第1篇 物體檢測基礎知識
第1章 淺談物體檢測與PyTorch 2
1.1 深度學習與計算機視覺 2
1.1.1 發展歷史 2
1.1.2 計算機視覺 7
1.2 物體檢測技術 9
1.2.1 發展歷程 10
1.2.2 技術應用領域 11
1.2.3 評價指標 12
1.3 PyTorch簡介 17
1.3.1 誕生與特點 17
1.3.2 各大深度學習框架對比 17
1.3.3 為什麼選擇PyTorch 19
1.3.4 安裝方法 20
1.4 基礎知識準備 22
1.4.1 Linux基礎 22
1.4.2 Python基礎 24
1.4.3 高效開發工具 29
1.5 總結 36
第2章 PyTorch基礎 37
2.1 基本數據:Tensor 37
2.1.1 Tensor數據類型 37
2.1.2 Tensor的創建與維度查看 39
2.1.3 Tensor的組合與分塊 41
2.1.4 Tensor的索引與變形 42
2.1.5 Tensor的排序與取極值 46
2.1.6 Tensor的自動廣播機制與向量化 46
2.1.7 Tensor的內存共享 47
2.2 Autograd與計算圖 48
2.2.1 Tensor的自動求導:Autograd 49
2.2.2 計算圖 50
2.2.3 Autograd注意事項 51
2.3 神經網絡工具箱torch.nn 52
2.3.1 nn.Module類 52
2.3.2 損失函數 55
2.3.3 優化器nn.optim 56
2.4 模型處理 59
2.4.1 網絡模型庫:torchvision.models 59
2.4.2 加載預訓練模型 60
2.4.3 模型保存 61
2.5 數據處理 61
2.5.1 主流公開數據集 61
2.5.2 數據加載 63
2.5.3 GPU加速 65
2.5.4 數據可視化 66
2.6 總結 68
第3章 網絡骨架:Backbone 69
3.1 神經網絡基本組成 69
3.1.1 卷積層 70
3.1.2 激活函數層 72
3.1.3 池化層 75
3.1.4 Dropout層 76
3.1.5 BN層 77
3.1.6 全連接層 79
3.1.7 深入理解感受野 81
3.1.8 詳解空洞卷積(Dilated Convolution) 82
3.2 走向深度:VGGNet 83
3.3 縱橫交錯:Inception 87
3.4 里程碑:ResNet 93
3.5 繼往開來:DenseNet 95
3.6 特徵金字塔:FPN 99
3.7 為檢測而生:DetNet 106
3.8 總結 110
第2篇 物體檢測經典框架
第4章 兩階經典檢測器:Faster RCNN 112
4.1 RCNN系列發展歷程 112
4.1.1 開山之作:RCNN 112
4.1.2 端到端:Fast RCNN 113
4.1.3 走向實時:Faster RCNN 114
4.2 準備工作 114
4.3 Faster RCNN總覽 115
4.4 詳解RPN 117
4.4.1 理解Anchor 117
4.4.2 RPN的真值與預測量 119
4.4.3 RPN卷積網絡 120
4.4.4 RPN真值的求取 122
4.4.5 損失函數設計 124
4.4.6 NMS與生成Proposal 125
4.4.7 篩選Proposal得到RoI 126
4.5 RoI Pooling層 127
4.6 全連接RCNN模塊 130
4.6.1 RCNN全連接網絡 130
4.6.2 損失函數設計 131
4.7 Faster RCNN的改進算法 131
4.7.1 審視Faster RCNN 132
4.7.2 特徵融合:HyperNet 133
4.7.3 實例分割:Mask RCNN 134
4.7.4 全卷積網絡:R-FCN 137
4.7.5 級聯網絡:Cascade RCNN 139
4.8 總結 141
第5章 單階多層檢測器:SSD 142
5.1 SSD總覽 142
5.1.1 SSD的算法流程 142
5.1.2 代碼準備工作 143
5.2 數據預處理 144
5.2.1 加載PASCAL數據集 144
5.2.2 數據增強 144
5.3 網絡架構 148
5.3.1 基礎VGG結構 148
5.3.2 深度卷積層 149
5.3.3 PriorBox與邊框特徵提取網絡 150
5.3.4 總體網絡計算過程 153
5.4 匹配與損失求解 154
5.4.1 預選框與真實框的匹配 154
5.4.2 定位損失的計算 155
5.4.3 難樣本挖掘 156
5.4.4 類別損失計算 156
5.5 SSD的改進算法 157
5.5.1 審視SSD 157
5.5.2 特徵融合:DSSD 158
5.5.3 彩虹網絡:RSSD 160
5.5.4 基於SSD的兩階:RefineDet 162
5.5.5 多感受野融合:RFBNet 165
5.6 總結 166
第6章 單階經典檢測器:YOLO 167
6.1 無錨框預測:YOLO v1 167
6.1.1 網絡結構 167
6.1.2 特徵圖的意義 168
6.1.3 損失計算 169
6.2 依賴錨框:YOLO v2 171
6.2.1 網絡結構的改善 171
6.2.2 先驗框的設計 173
6.2.3 正、負樣本與損失函數 175
6.2.4 正、負樣本選取代碼示例 176
6.2.5 工程技巧 179
6.3 多尺度與特徵融合:YOLO v3 180
6.3.1 新網絡結構DarkNet-53 180
6.3.2 多尺度預測 181
6.3.3 Softmax改為Logistic 182
6.4 總結 183
第3篇 物體檢測的難點與發展
第7章 模型加速之輕量化網絡 186
7.1 壓縮再擴展:SqueezeNet 188
7.1.1 SqueezeNet網絡結構 188
7.1.2 SqueezeNet總結 190
7.2 深度可分離:MobileNet 191
7.2.1 標準卷積 191
7.2.2 深度可分離卷積 192
7.2.3 MobileNet v1結構 193
7.2.4 MobileNet v1總結 198
7.2.5 MobileNet v2 198
7.3 通道混洗:ShuffleNet 200
7.3.1 通道混洗 201
7.3.2 網絡結構 202
7.3.3 ShuffleNet v2 205
7.4 總結 207
第8章 物體檢測細節處理 209
8.1 非極大值抑制:NMS 209
8.1.1 NMS基本過程 210
8.1.2 抑制得分:Soft NMS 212
8.1.3 加權平均:Softer NMS 213
8.1.4 定位置信度:IoU-Net 215
8.2 樣本不均衡問題 217
8.2.1 不均衡問題分析 217
8.2.2 在線難樣本挖掘:OHEM 219
8.2.3 專注難樣本:Focal Loss 221
8.3 模型過擬合 224
8.3.1 數據增強 226
8.3.2 L1與L2正則化 227
8.4 總結 229
第9章 物體檢測難點 230
9.1 多尺度檢測 230
9.1.1 多尺度問題 230
9.1.2 降低下采樣率與空洞卷積 232
9.1.3 Anchor設計 233
9.1.4 多尺度訓練 235
9.1.5 特徵融合 235
9.1.6 尺度歸一化:SNIP 236
9.1.7 三叉戟:TridentNet 238
9.2 擁擠與遮擋 239
9.2.1 遮擋背景 240
9.2.2 排斥損失:Repulsion Loss 242
9.2.3 OR-CNN 244
9.3 總結 247
第10章 物體檢測的未來發展 248
10.1 重新思考物體檢測 248
10.1.1 精度與速度的權衡 249
10.1.2 卷積網絡的可解釋性與穩定性 249
10.1.3 訓練:微調還是隨機初始化 250
10.1.4 考慮物體間關係的檢測 251
10.1.5 優化卷積方式 252
10.1.6 神經架構搜索:NAS 253
10.1.7 與產業結合的創新 255
10.2 擺脫錨框:Anchor-Free 257
10.2.1 重新思考Anchor 257
10.2.2 基於角點的檢測:CornerNet 258
10.2.3 檢測中心點:CenterNet 262
10.2.4 錨框自學習:Guided Anchoring 264
10.3 總結 266


章節試讀:

第1章 淺談物體檢測與PyTorch
在2012年的ImageNet圖像識別競賽中,Hinton率領的團隊利用卷積神經網絡構建的AlexNet一舉奪得了冠軍,從此點燃了學術界、工業界等對於深度學習、卷積網絡的熱情。短短六七年的時間,在圖像分類、物體檢測、圖像分割、人體姿態估計等一系列計算機視覺領域,深度學習都收穫了極大的成功。
作為本書的開篇,為了使讀者有一個全面的認知,本章將專注於介紹物體檢測的基礎知識、發展歷史,以及為什麼選擇PyTorch作為深度學習的框架。
1.1 深度學習與計算機視覺
近年來,人工智能、機器學習、深度學習、物體檢測這樣的名詞經常會出現在大家的眼前,但大家對這些技術之間的區別與聯繫卻經常混淆。基於此,本節將會介紹每一個技術的基本概念與發展歷史。
1.1.1 發展歷史
當前的計算機無論是處理多複雜的計算任務,其基本邏輯始終是0與1的位運算,憑藉其每秒億萬的計算次數,計算機可以快速完成複雜的數學運算,這是人類無法比擬的。然而,涉及高語義的理解、判斷,甚至是情感、意識(如判斷一張圖像中有幾個兒童)這種對於人類輕而易舉的任務,對計算機而言卻很難處理,因為這種問題無法建立明確的數學規則。
為了賦予計算機以人類的理解能力與邏輯思維,誕生了人工智能(Artificial Intelligence,AI)這一學科。在實現人工智能的眾多算法中,機器學習是發展較為快速的一支。機器學習的思想是讓機器自動地從大量的數據中學習出規律,並利用該規律對未知的數據做出預測。在機器學習的算法中,深度學習是特指利用深度神經網絡的結構完成訓練和預測的算法。
人工智能、機器學習、深度學習這三者的關係如圖1.1所示。可以看出,機器學習是實現人工智能的途徑之一,而深度學習則是機器學習的算法之一。如果把人工智能比喻成人類的大腦,機器學習則是人類通過大量數據來認知學習的過程,而深度學習則是學習過程中非常高效的一種算法。
(無法傳圖)
圖1.1 人工智能、機器學習與深度學習三者間的關係
下面詳細介紹這三者的發展歷程。
1.人工智能
人工智能的概念最早來自於1956年的計算機達特茅斯會議,其本質是希望機器能夠像人類的大腦一樣思考,並作出反應。由於極具難度與吸引力,人工智能從誕生至今,吸引了無數的科學家與愛好者投入研究。搭載人工智能的載體可以是近年來火熱的機器人、自動駕駛車輛,甚至是一個部署在雲端的智能大腦。
根據人工智能實現的水平,我們可以進一步分為3種人工智能,如圖1.2所示。
(無法傳圖)
圖1.2 人工智能分類
弱人工智能(Artificial Narrow Intelligence,ANI):擅長某個特定任務的智能。例如語言處理領域的谷歌翻譯,讓該系統去判斷一張圖片中是貓還是狗,就無能無力了。再比如垃圾郵件的自動分類、自動駕駛車輛、手機上的人臉識別等,當前的人工智能大多是弱人工智能。
強人工智能:在人工智能概念誕生之初,人們期望能夠通過打造複雜的計算機,實現與人一樣的複雜智能,這被稱做強人工智能,也可以稱之為通用人工智能(Artificial General Intelligence,AGI)。這種智能要求機器像人一樣,聽、說、讀、寫樣樣精通。目前的發展技術尚未達到通用人工智能的水平,但已經有眾多研究機構展開了研究。
超人工智能(Artificial Super Intelligence,ASI):在強人工智能之上,是超人工智能,其定義是在幾乎所有領域都比人類大腦聰明的智能,包括創新、社交、思維等。人工智能科學家Aaron Saenz曾有一個有趣的比喻,現在的弱人工智能就好比地球早期的氨基酸,可能突然之間就會產生生命。超人工智能不會永遠停留在想象之中。
人類追求人工智能的腳步永不會停止,例如鼎鼎有名的智能圍棋學習系統AlphaGo,由谷歌大腦團隊開發,在2016年3月15日以4?1的總比分戰勝了韓國圍棋選手李世石,引發了全世界巨大的反響。谷歌在時隔一年後推出了AlphaGo Zero,可以在不使用人類棋譜經驗的前提下成為一個圍棋高手,具有劃時代的意義。我們也有理由相信,實現更高級的人工智能指日可待。
2.機器學習
機器學習是實現人工智能的重要途徑,也是最早發展起來的人工智能算法。與傳統的基於規則設計的算法不同,機器學習的關鍵在於從大量的數據中找出規律,自動地學習出算法所需的參數。
機器學習最早可見於1783年的貝葉斯定理中。貝葉斯定理是機器學習的一種,根據類似事件的歷史數據得出發生的可能性。在1997年,IBM開發的深藍(Deep Blue)象棋電腦程序擊敗了世界冠軍。當然,最令人振奮的成就還當屬2016年打敗李世石的AlphaGo。
機器學習算法中最重要的就是數據,根據使用的數據形式,可以分為三大類:監督學習(Supervised Learning)、無監督學習(Unsupervised Learning)與強化學習(Reinforcement Learning),如圖1.3所示。
? 監督學習:通常包括訓練與預測階段。在訓練時利用帶有人工標注標籤的數據對模型進行訓練,在預測時則根據訓練好的模型對輸入進行預測。監督學習是相對成熟的機器學習算法。監督學習通常分為分類與回歸兩個問題,常見算法有決策樹(Decision Tree,DT)、支持向量機(Support Vector Machine,SVM)和神經網絡等。
? 無監督學習:輸入的數據沒有標籤信息,也就無法對模型進行明確的懲罰。無監督學習常見的思路是採用某種形式的回報來激勵模型做出一定的決策,常見的算法有K-Means聚類與主成分分析(Principal Component Analysis,PCA)。
? 強化學習:讓模型在一定的環境中學習,每次行動會有對應的獎勵,目標是使獎勵最大化,被認為是走向通用人工智能的學習方法。常見的強化學習有基於價值、策略與模型3種方法。
機器學習涉及概率、統計、凸優化等多個學科,目前已在數據挖掘、計算機視覺、自然語言處理、醫學診斷等多個領域有了相當成熟的應用。
(無法傳圖)
圖1.3 機器學習算法總覽
3.深度學習
深度學習是機器學習的技術分支之一,主要是通過搭建深層的人工神經網絡(Artificial Neural Network)來進行知識的學習,輸入數據通常較為複雜、規模大、維度高。深度學習可以說是機器學習問世以來最大的突破之一。
深度學習的發展經歷了一番波折,具體歷程如圖1.4所示。
最早的神經網絡可以追溯到1943年的MCP(McCulloch and Pitts)人工神經元網絡,希望使用簡單的加權求和與激活函數來模擬人類的神經元過程。在此基礎上,1958年的感知器(Perception)模型使用了梯度下降算法來學習多維的訓練數據,成功地實現了二分類問題,也掀起了深度學習的第一次熱潮。圖1.5代表了一個最簡單的單層感知器,輸入有3個量,通過簡單的權重相加,再作用於一個激活函數,最後得到了輸出y。
(無法傳圖)
圖1.4 深度學習發展歷程
(無法傳圖)
圖1.5 單層感知器
然而,1969年,Minsky證明了感知器僅僅是一種線性模型,對簡單的亦或判斷都無能為力,而生活中的大部分問題都是非線性的,這直接讓學者研究神經網絡的熱情難以持續,造成了深度學習長達20年的停滯不前。
1986年,深度學習領域“三駕馬車”之一的Geoffrey Hinton創造性地將非線性的Sigmoid函數應用到了多層感知器中,並利用反向傳播(Backpropagation)算法進行模型學習,使得模型能夠有效地處理非線性問題。1998年,“三駕馬車”中的卷積神經網絡之父Yann LeCun發明了卷積神經網絡LeNet模型,可有效解決圖像數字識別問題,被認為是卷積神經網絡的鼻祖。
然而在此之後的多年時間裡,深度學習並沒有代表性的算法問世,並且神經網絡存在兩個致命問題:一是Sigmoid在函數兩端具有飽和效應,會帶來梯度消失問題;另一個是隨著神經網絡的加深,訓練時參數容易陷入局部最優解。這兩個弊端導致深度學習陷入了第二次低谷。在這段時間內,反倒是傳統的機器學習算法,如支持向量機、隨機森林等算法獲得了快速的發展。
2006年,Hinton提出了利用無監督的初始化與有監督的微調緩解了局部最優解問題,再次輓救了深度學習,這一年也被稱為深度學習元年。2011年誕生的ReLU激活函數有效地緩解了梯度消失現象。
真正讓深度學習迎來爆發式發展的當屬2012年的AlexNet網絡,其在ImageNet圖像分類任務中以“碾壓”第二名算法的姿態取得了冠軍。深度學習從此一發不可收拾,VGGNet、ResNet等優秀的網絡接連問世,並且在分類、物體檢測、圖像分割等領域漸漸地展現出深度學習的實力,大大超過了傳統算法的水平。
當然,深度學習的發展離不開大數據、GPU及模型這3個因素,如圖1.6所示。
(無法傳圖)
圖1.6 深度學習中的核心因素
? 大數據:當前大部分的深度學習模型是有監督學習,依賴於數據的有效標注。例如,要做一個高性能的物體檢測模型,通常需要使用上萬甚至是幾十萬的標注數據。數據的積累也是一個公司深度學習能力雄厚的標誌之一,沒有數據,再優秀的模型也會面對無米之炊的尷尬。
? GPU:當前深度學習如此“火熱”的一個很重要的原因就是硬件的發展,尤其是GPU為深度學習模型的快速訓練提供了可能。深度學習模型通常有數以千萬計的參數,存在大規模的並行計算,傳統的以邏輯運算能力著稱的CPU面對這種並行計算會異常緩慢,GPU以及CUDA計算庫專注於數據的並行計算,為模型訓練提供了強有力的工具。
? 模型:在大數據與GPU的強有力支撐下,無數研究學者的奇思妙想,催生出了VGGNet、ResNet和FPN等一系列優秀的深度學習模型,並且在學習任務的精度、速度等指標上取得了顯著的進步。
根據網絡結構的不同,深度學習模型可以分為卷積神經網絡(Convolutional Neural Network,CNN)、循環神經網絡(Recurrent Neural Network,RNN)及生成式對抗網絡(Generative Adviserial Network,GAN)。
1.1.2 計算機視覺
視覺是人類最為重要的感知系統,大腦皮層中近一半的神經元與視覺有關係。計算機視覺則是研究如何使機器學會“看”的學科,最早起源於20世紀50年代,當時主要專注於光學字符識別、航空圖片的分析等特定任務。在20世紀90年代,計算機視覺在多視幾何、三維重建、相機標定等多個領域取得了眾多成果,也走向了繁榮發展的階段。
然而在很長的一段時間裡,計算機視覺的發展都是基於規則與人工設定的模板,很難有魯棒的高語義理解。真正將計算機視覺的發展推向高峰的,當屬深度學習的爆發。由於視覺圖像豐富的語義性與圖像的結構性,計算機視覺也是當前人工智能發展最為迅速的領域之一。
進入深度學習發展階段後,計算機視覺在多個領域都取得了令人矚目的成就,如圖1.7所示。
? 圖像成像:成像是計算機視覺較為底層的技術,深度學習在此發揮的空間更多的是成像後的應用,如修復圖像的DCGAN網絡,圖像風格遷移的CycleGAN,這些任務中GAN有著廣闊的發揮空間。此外,在醫學成像、衛星成像等領域中,超分辨率也至關重要,例如SRCNN(Super-Resolution CNN)。
? 2.5D空間:我們通常將涉及2D運動或者視差的任務定義為2.5D空間問題,因為其任務跳出了單純的2D圖像,但又缺乏3D空間的信息。這裡包含的任務有光流的估計、單目的深度估計及雙目的深度估計。
? 3D空間:3D空間的任務通常應用於機器人或者自動駕駛領域,將2D圖像檢測與3D空間進行結合。這其中,主要任務有相機標定(Camera Calibration)、視覺里程計(Visual Odometry,VO)及SLAM(Simultaneous Localization and Mapping)等。
? 環境理解:環境的高語義理解是深度學習在計算機視覺中的主戰場,相比傳統算法其優勢更為明顯。主要任務有圖像分類(Classification)、物體檢測(Object Detection)、圖像分割(Segmentation)、物體跟蹤(Tracking)及關鍵點檢測。其中,圖像分割又可以細分為語義分割(Semantic Segmentation)與實例分割(Instance Segmentation)。
(無法傳圖)
圖1.7 深度學習在計算機視覺中的應用
1.2 物體檢測技術
在計算機視覺眾多的技術領域中,物體檢測是一項非常基礎的任務,圖像分割、物體追蹤、關鍵點檢測等通常都要依賴於物體檢測。此外,由於每張圖像中物體的數量、大小及姿態各不相同,也就是非結構化的輸出,這是與圖像分類非常不同的一點,並且物體時常會有遮擋截斷,物體檢測技術也極富挑戰性,從誕生以來始終是研究學者最為關注的焦點領域之一。
物體檢測技術,通常是指在一張圖像中檢測出物體出現的位置及對應的類別。對於圖1.8中的人,我們要求檢測器輸出5個量:物體類別、xmin、ymin、xmax與ymax。當然,對於一個邊框,檢測器也可以輸出中心點與寬高的形式,這兩者是等價的。
(無法傳圖)
圖1.8 物體檢測示例
在計算機視覺中,圖像分類、物體檢測與圖像分割是最基礎、也是目前發展最為迅速的3個領域。圖1.9列出了這3個任務之間的區別。
(無法傳圖)
圖1.9 圖像分類、物體檢測與圖像分割的區別
? 圖像分類:輸入圖像往往僅包含一個物體,目的是判斷每張圖像是什麼物體,是圖像級別的任務,相對簡單,發展也最快。
? 物體檢測:輸入圖像中往往有很多物體,目的是判斷出物體出現的位置與類別,是計算機視覺中非常核心的一個任務。
? 圖像分割:輸入與物體檢測類似,但是要判斷出每一個像素屬於哪一個類別,屬於像素級的分類。圖像分割與物體檢測任務之間有很多聯繫,模型也可以相互借鑒。
1.2.1 發展歷程
在利用深度學習做物體檢測之前,傳統算法對於物體的檢測通常分為區域選取、特徵提取與特徵分類這3個階段,如圖1.10所示。
(無法傳圖)
圖1.10 傳統物體檢測算法思路
? 區域選取:首先選取圖像中可能出現物體的位置,由於物體位置、大小都不固定,因此傳統算法通常使用滑動窗口(Sliding Windows)算法,但這種算法會存在大量的冗余框,並且計算複雜度高。
? 特徵提取:在得到物體位置後,通常使用人工精心設計的提取器進行特徵提取,如SIFT和HOG等。由於提取器包含的參數較少,並且人工設計的魯棒性較低,因此特徵提取的質量並不高。
? 特徵分類:最後,對上一步得到的特徵進行分類,通常使用如SVM、AdaBoost的分類器。
深度學習時代的物體檢測發展過程如圖1.11所示。深度神經網絡大量的參數可以提取出魯棒性和語義性更好的特徵,並且分類器性能也更優越。2014年的RCNN(Regions with CNN features)算是使用深度學習實現物體檢測的經典之作,從此拉開了深度學習做物體檢測的序幕。
(無法傳圖)
圖1.11 深度學習檢測器的發展歷程
在RCNN基礎上,2015年的Fast RCNN實現了端到端的檢測與卷積共享,Faster RCNN提出了錨框(Anchor)這一劃時代的思想,將物體檢測推向了第一個高峰。在2016年,YOLO v1實現了無錨框(Anchor-Free)的一階檢測,SSD實現了多特徵圖的一階檢測,這兩種算法對隨後的物體檢測也產生了深遠的影響,在本書中將分別用一章的篇幅詳細介紹。
在2017年,FPN利用特徵金字塔實現了更優秀的特徵提取網絡,Mask RCNN則在實現了實例分割的同時,也提升了物體檢測的性能。進入2018年後,物體檢測的算法更為多樣,如使用角點做檢測的CornerNet、使用多個感受野分支的TridentNet、使用中心點做檢測的CenterNet等。
在物體檢測算法中,物體邊框從無到有,邊框變化的過程在一定程度上體現了檢測是一階的還是兩階的。
? 兩階:兩階的算法通常在第一階段專注於找出物體出現的位置,得到建議框,保證足夠的準召率,然後在第二個階段專注於對建議框進行分類,尋找更精確的位置,典型算法如Faster RCNN。兩階的算法通常精度準更高,但速度較慢。當然,還存在例如Cascade RCNN這樣更多階的算法。
? 一階:一階的算法將二階算法的兩個階段合二為一,在一個階段裡完成尋找物體出現位置與類別的預測,方法通常更為簡單,依賴於特徵融合、Focal Loss等優秀的網絡經驗,速度一般比兩階網絡更快,但精度會有所損失,典型算法如SSD、YOLO系列等。
Anchor是一個劃時代的思想,最早出現在Faster RCNN中,其本質上是一系列大小寬高不等的先驗框,均勻地分布在特徵圖上,利用特徵去預測這些Anchors的類別,以及與真實物體邊框存在的偏移。Anchor相當於給物體檢測提供了一個梯子,使得檢測器不至於直接從無到有地預測物體,精度往往較高,常見算法有Faster RCNN和SSD等。
當然,還有一部分無錨框的算法,思路更為多樣,有直接通過特徵預測邊框位置的方法,如YOLO v1等。最近也出現了眾多依靠關鍵點來檢測物體的算法,如CornerNet和CenterNet等。
1.2.2 技術應用領域
由於檢測性能的迅速提升,物體檢測也是深度學習在工業界取得大規模應用的領域之一。以下列舉了5個廣泛應用的領域。
? 安防:受深度學習的影響,安防領域近年來取得了快速的發展與落地。例如廣為人知的人臉識別技術,在交通卡口、車站等已有了成熟的應用。此外,在智慧城市的安防中,行人與車輛的檢測也是尤為重要的一環。在安防領域中,有很大的趨勢是將檢測技術融入到攝像頭中,形成智能攝像頭,以海康威視、地平線等多家公司最為知名。
? 自動駕駛:自動駕駛的感知任務中,行人、車輛等障礙物的檢測尤為重要。由於涉及駕駛的安全性,自動駕駛對於檢測器的性能要求極高,尤其是召回率這個指標,自動駕駛也堪稱人工智能應用的“珠穆朗瑪峰”。此外,由於車輛需要獲取障礙物相對於其自身的三維位置,因此通常在檢測器後還需要增加很多的後處理感知模塊。
? 機器人:工業機器人自動分揀中,系統需要識別出要分揀的各種部件,這是極為典型的機器人應用領域。此外,移動智能機器人需要時刻檢測出環境中的各種障礙物,以實現安全的避障與導航。從廣泛意義來看,自動駕駛車輛也可以看做是機器人的一種形式。
? 搜索推薦:在互聯網公司的各大應用平台中,物體檢測無處不在。例如,對於包含特定物體的圖像過濾、篩選、推薦和水印處理等,在人臉、行人檢測的基礎上增加更加豐富的應用,如抖音等產品。
? 醫療診斷:基於人工智能與大數據,醫療診斷也迎來了新的春天,利用物體檢測技術,我們可以更準確、迅速地對CT、MR等醫療圖像中特定的關節和病症進行診斷。
1.2.3 評價指標
對於一個檢測器,我們需要制定一定的規則來評價其好壞,從而選擇需要的檢測器。對於圖像分類任務來講,由於其輸出是很簡單的圖像類別,因此很容易通過判斷分類正確的圖像數量來進行衡量。
物體檢測模型的輸出是非結構化的,事先並無法得知輸出物體的數量、位置、大小等,因此物體檢測的評價算法就稍微複雜一些。對於具體的某個物體來講,我們可以從預測框與真實框的貼合程度來判斷檢測的質量,通常使用IoU(Intersection of Union)來量化貼合程度。
IoU的計算方式如圖1.12所示,使用兩個邊框的交集與並集的比值,就可以得到IoU,公式如式(1-1)所示。顯而易見,IoU的取值區間是[0,1],IoU值越大,表明兩個框重合越好。
(無法傳圖)
圖1.12 IoU的計算過程
(1-1)
利用Python可以很方便地實現IoU的計算,代碼如下:

def iou(boxA, boxB):
# 計算重合部分的上、下、左、右4個邊的值,注意最大最小函數的使用
left_max = max(boxA[0], boxB[0])
top_max = max(boxA[1], boxB[1])
right_min = min(boxA[2], boxB[2])
bottom_min = min(boxA[3], boxB[3])
# 計算重合部分的面積
inter =max(0,(right_min-left_max))* max(0,(bottom_min-top_max)
Sa = (boxA[2]-boxA[0])*(boxA[3]-boxA[1])
Sb = (boxB[2]-boxB[0])*(boxB[3]-boxB[1])
# 計算所有區域的面積並計算iou,如果是Python 2,則要增加浮點化操作
union = Sa Sb-inter
iou = inter/union
return iou

對於IoU而言,我們通常會選取一個閾值,如0.5,來確定預測框是正確的還是錯誤的。當兩個框的IoU大於0.5時,我們認為是一個有效的檢測,否則屬於無效的匹配。如圖1.13中有兩個杯子的標籤,模型產生了兩個預測框。
(無法傳圖)
圖1.13 正、負樣本判別示例
由於圖像中存在背景與物體兩種標籤,預測框也分為正確與錯誤,因此在評測時會產生以下4種樣本。
? 正確檢測框TP(True Positive):預測框正確地與標籤框匹配了,兩者間的IoU大於0.5,如圖1.13中右下方的檢測框。
? 誤檢框FP(False Positive):將背景預測成了物體,如圖1.13中左下方的檢測框,通常這種框與圖中所有標籤的IoU都不會超過0.5。
? 漏檢框FN(False Negative):本來需要模型檢測出的物體,模型沒有檢測出,如圖1.13中左上方的杯子。
? 正確背景(True Negative):本身是背景,模型也沒有檢測出來,這種情況在物體檢測中通常不需要考慮。
有了上述基礎知識,我們就可以開始進行檢測模型的評測。對於一個檢測器,通常使用mAP(mean Average Precision)這一指標來評價一個模型的好壞,這裡的AP指的是一個類別的檢測精度,mAP則是多個類別的平均精度。評測需要每張圖片的預測值與標籤值,對於某一個實例,二者包含的內容分別如下:
? 預測值(Dets):物體類別、邊框位置的4個預測值、該物體的得分。
? 標籤值(GTs):物體類別、邊框位置的4個真值。
在預測值與標籤值的基礎上,AP的具體計算過程如圖1.14所示。我們首先將所有的預測框按照得分從高到低進行排序(因為得分越高的邊框其對於真實物體的概率往往越大),然後從高到低遍歷預測框。
(無法傳圖)
圖1.14 AP的計算過程
對於遍歷中的某一個預測框,計算其與該圖中同一類別的所有標籤框GTs的IoU,並選取擁有最大IoU的GT作為當前預測框的匹配對象。如果該IoU小於閾值,則將當前的預測框標記為誤檢框FP。
如果該IoU大於閾值,還要看對應的標籤框GT是否被訪問過。如果前面已經有得分更高的預測框與該標籤框對應了,即使現在的IoU大於閾值,也會被標記為FP。如果沒有被訪問過,則將當前預測框Det標記為正確檢測框TP,並將該GT標記為訪問過,以防止後面還有預測框與其對應。
在遍歷完所有的預測框後,我們會得到每一個預測框的屬性,即TP或FP。在遍歷的過程中,我們可以通過當前TP的數量來計算模型的召回率(Recall,R),即當前一共檢測出的標籤框與所有標籤框的比值,如式(1-2)所示。
(1-2)
除了召回率,還有一個重要指標是準確率(Precision,P),即當前遍歷過的預測框中,屬於正確預測邊框的比值,如式(1-3)所示。
(1-3)
遍歷到每一個預測框時,都可以生成一個對應的P與R,這兩個值可以組成一個點(R, P),將所有的點繪製成曲線,即形成了P-R曲線,如圖1.15所示。
(無法傳圖)
圖1.15 物體檢測的P-R曲線
然而,即使有了P-R曲線,評價模型仍然不直觀,如果直接取曲線上的點,在哪裡選取都不合適,因為召回率高的時候準確率會很低,準確率高的時候往往召回率很低。這時,AP就派上用場了,計算公式如式(1-4)所示。
(1-4)
從公式中可以看出,AP代表了曲線的面積,綜合考量了不同召回率下的準確率,不會對P與R有任何偏好。每個類別的AP是相互獨立的,將每個類別的AP進行平均,即可得到mAP。嚴格意義上講,還需要對曲線進行一定的修正,再進行AP計算。除了求面積的方式,還可以使用11個不同召回率對應的準確率求平均的方式求AP。
下面從代碼層面詳細講述AP求解過程。假設當前經過標籤數據與預測數據的加載,我們得到了下面兩個變量:
? det_boxes:包含全部圖像中所有類別的預測框,其中一個邊框包含了[left, top, right, bottom, score, NameofImage]。
? gt_boxes:包含了全部圖像中所有類別的標籤,其中一個標籤的內容為[left, top, right, bottom, 0]。需要注意的是,最後一位0代表該標籤有沒有被匹配過,如果匹配過則會置為1,其他預測框再去匹配則為誤檢框。
下面是所有類別的評測過程。

for c in classes:
# 通過類別作為關鍵字,得到每個類別的預測、標籤及總標籤數
dects = det_boxes[c]
gt_class = gt_boxes[c]
npos = num_pos[c]
# 利用得分作為關鍵字,對預測框按照得分從高到低排序
dects = sorted(dects, key=lambda conf: conf[5], reverse=True)
# 設置兩個與預測邊框長度相同的列表,標記是True Positive還是False Positive
TP = np.zeros(len(dects))
FP = np.zeros(len(dects))
# 對某一個類別的預測框進行遍歷
for d in range(len(dects)):
# 將IoU默認置為最低
iouMax = sys.float_info.min
# 遍歷與預測框同一圖像中的同一類別的標籤,計算IoU
if dects[d][-1] in gt_class:
for j in range(len(gt_class[dects[d][-1]])):
iou = Evaluator.iou(dects[d][:4], gt_class[dects[d][-1]][j][:4])
if iou > iouMax:
iouMax = iou
jmax = j # 記錄與預測有最大IoU的標籤
# 如果最大IoU大於閾值,並且沒有被匹配過,則賦予TP
if iouMax >= cfg[‘iouThreshold‘]:
if gt_class[dects[d][-1]][jmax][4] == 0:
TP[d] = 1
gt_class[dects[d][-1]][jmax][4] = 1 # 標記為匹配過
# 如果被匹配過,賦予FP
else:
FP[d] = 1
# 如果最大IoU沒有超過閾值,賦予FP
else:
FP[d] = 1
# 如果對應圖像中沒有該類別的標籤,賦予FP
else:
FP[d] = 1
# 利用NumPy的cumsum()函數,計算累計的FP與TP
acc_FP = np.cumsum(FP)
acc_TP = np.cumsum(TP)
rec = acc_TP / npos # 得到每個點的Recall
prec = np.divide(acc_TP, (acc_FP acc_TP)) # 得到每個點的Precision
# 利用Recall與Precision進一步計算得到AP
[ap, mpre, mrec, ii] = Evaluator.CalculateAveragePrecision(rec, prec)


圖片預覽:

 
  步驟一.
依據網路上的圖書,挑選你所需要的書籍,根據以下步驟進行訂購
選擇產品及數量 結 帳 輸入基本資料 取貨與付款方式
┌───────────────────────────────────────────────────┘
資料確定 確認結帳 訂單編號    

步驟二.
完成付款的程序後,若採用貨到付款等宅配方式,3~7天內 ( 例假日將延期一至兩天 ) 您即可收到圖書。若至分店門市取貨,一週內聯絡取書。

步驟三.
完成購書程序者,可利用 訂單查詢 得知訂單進度。

注意事項.
● 付款方式若為網路刷卡必須等" 2 ~ 3 個工作天"確認款項已收到,才會出貨.如有更改書籍數量請記得按更新購物車,謝謝。

● 大陸出版品封面老舊、磨痕、凹痕等均屬常態,除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。

● 至2018年起,因中國大陸環保政策,部分書籍配件以QR CODE取代光盤音頻mp3或dvd,已無提供實體光盤。如需使用學習配件,請掃描QR CODE 連結至當地網站註冊並通過驗證程序,方可下載使用。造成不便,敬請見諒。

● 我們將保留所有商品出貨權利,如遇缺書情形,訂單未達免運門檻運費需自行負擔。

預訂海外庫存.
商品到貨時間須4週,訂單書籍備齊後方能出貨,如果您有急用書籍,建議與【預訂海外庫存】商品分開訂購。