初學者經常問這樣的問題,然而這些其實是錯誤的問題。
對於初學者而言,你最應該優先考慮的是,哪些東西構成了程序的基礎?
最經典的一句話: 程序 = 數據結構 + 演算法 。
如果說編程語言是程序的血肉,那麼演算法就是程序的靈魂。
人不能沒有血肉之軀,但是沒有靈魂的人依然只是一個死人。
不能單純依靠演算法衡量一個程序員的好壞,但是面試的時候考演算法絕對是簡單高效的篩選手段。近些年大廠的面試幾乎必考演算法也是這個原因。每一個演算法學的不扎實的程序員,在面試的時候都很慌。
下面這些書籍應該是演算法方面最常見的經典書籍。我有幸都讀過,有些讀完了,有些半途而廢,不過基本上也都算是熟悉。順序上由易到難,從薄到厚,每本書下面我會簡單的介紹一番,希望能對你的學習有所幫助。
首先是兩本演算法入門書籍,也可以當做演算法讀物:
《啊哈!演算法》
用他的自我介紹的來講:「這不過是一本有趣的演算法書而已,和別的演算法書比較,如果硬要說它有什麼特點的話,那就是你能看懂它。」
圖文並茂,而且畫風有趣,適合新手入門,但是代碼是C的,看著比較累,文字也略顯冗長。
圖是非常棒的,啟蒙用,非教科書
《演算法圖解》
和《啊哈》類似,他的介紹是:「像小說一樣有趣的演算法入門書。」
書裡面講的很好,python代碼也很容易讀懂,比之《啊哈!演算法》,書中的例子沒有那麼有趣,但是圖很清晰,文字和代碼不冗雜。
缺點同樣是非教科書,非常淺顯,三四個小時就看完了。有一種剛剛熱身的感覺。
接下來這幾本都是最常見的書了:
《數據結構與演算法分析C語言描述》
這本書的作者幾乎不浪費筆墨在一些簡單的地方。書很薄,但是覆蓋面很廣很深,作者實在是非常厲害。
不過反過來說,就是有些地方講的語焉不詳……
這本書還有java語言版本的,但是相比之下C的更好一些。
挺好的一本書。
還有一點是翻譯不是很給力,好多人都沒堅持看完。
《數據結構與演算法Python語言實現》
英文版評分非常高,中文版評分非常低……
據說是也翻譯的不好。另外就是本書自身錯誤也不少……幾版過後依然很多沒有改過來。
書中數學證明和介紹比較簡單。因為採用Python語言的原因,比較易讀。
淺顯易懂,內容上循序漸進,環環相扣。相比於上一本,我會更推薦一些。厚度也不算厚。
《數據結構與演算法 Python語言描述》
北大教授裘宗燕的書,這本書前面寫的挺好的,尤其是在面向對象還有ADT等思想的闡述,都很不錯。
但是讀到後來給我一種虎頭蛇尾的感覺,前面氣勢如虹緒論就寫了很長,最後三章感覺有點草草收尾的意思。就像編輯在催稿,而作者很忙的樣子……
另外就是這本書的編排順序我個人也不是特別喜歡。
接下來是兩本大部頭,都是非常厚的書。
他們最大的特點就是:出現率遠大於看完率
《演算法導論》
演算法書中的權威,MIT的6.046J就是按照這個來講的。
公認最好的演算法書,組織結構合理,內容詳盡。引導讀者從思維方式上對演算法進行領悟。
書中對演算法的數學結構進行了詳盡的闡述。有非常多的數學證明。
這本書我說不出什麼缺點,只能說有些內容是因為我還沒到大牛的境界,暫時還無法體會理解。
我個人的觀點是:不要糾結於詳細的偽代碼,不用糾結於連篇累牘的講解。體會其中演算法的精髓就好。
《演算法》第四版
如果說,《演算法導論》是學術上最好書,那這本應該是實際應用最好的書。
它對數學的要求比《演算法導論》低很多,摒棄了演算法的證明。
書中具體給出了每位程序員應知應會的50個演算法,深入淺出,大量圖解。非常棒。
java基礎的話你能擼出來Hello World基本上就可以開始看這本書了,這本書最大的不友好之處在於它的第一章非常長,沒看過的人又不知道哪裡可以跳過。
這本書後面的翻譯感覺不如前邊了,不知道是換人了還是DDL了……
翻開書就會看到很多的圖,配套作者在coursera上面的課程學的話事半功倍!
接下來的幾本我看的比較少,簡單介紹一下,希望大家自己去發現和了解,不要漏下這些好書:
《編程珠璣》
很薄一本啊,但是我放在那還沒看完……
這本書被稱為: 歷史 上最偉大的計算機科學著作之一
融深邃思想、實戰技術與趣味軼事於一爐的奇書。
內容不深,但是不是一個知識點一個知識點的給你講解演算法原理的。
這本書的核心思想是讓你了解如何正確選擇和高效地實現演算法。書中還有一些趣聞軼事,看著倒是很有意思~
有興趣的同學可以看看~
《演算法競賽入門經典》系列
演算法競賽入門經典書,ACM必備書籍吧算是。書中題目對於競賽來說比較簡單,但是對於一般我們平時工程來說偏難。語言用的是C/C++,請好好做例題好好做作業,讀書的時候好好思考和復習~
反正我是沒讀過,捂臉……
《劍指Offer》
這個書很有意思,對於在校生來說我個人覺得是必看的書。沒有任何工作經驗的同學在面試的時候真的會被問懵的。這本書可以讓你了解如何應付考官日常問題,在解答面試問題的時候,書中很多方法和思路會讓考官覺得你思考的很全面,給你加不少分。
我面試的時候也曾快速掃過一遍這本書,讓我在回答問題的時候條理更清晰。書中代碼是C的,emmm,於是代碼部分我就沒太看……
《用Python解決數據結構與演算法問題》
最後給大家推薦一本在線的 免費 的演算法書。
https://facert.gitbooks.io/python-data-structure-cn/
不是大部頭,也不是讀物,新手入門足夠用,書中介紹了大多數日常需要的演算法,並且講的比較淺顯~轉行的新手基本可以通過這本書來快速掌握常用基本演算法了~
反正免費,是否適合自己看兩頁也就get了~
如果需要pdf版,可以在「程序員必修課」公眾號後台回復:「Python演算法書」獲取。
㈡ 演算法圖解 PDF 高清版
像小說集一樣趣味的演算法新手入門書。
演算法是解決困難的一步步步驟,都是電子信息科學行業的關鍵主題。現如今程序員*常見的演算法早已歷經了古人的探索、檢測及證實。假如你要搞明白這種演算法,又不願困在在繁雜的證實中,這書更是你的不二選擇。這部圖例豐富多彩、扣人心弦的好用手冊將給你輕輕鬆鬆懂得怎樣在自身的程序流程中高效率應用關鍵的演算法。
這書範例豐富多彩,圖片配文字,以令人非常容易了解的方法詮釋了演算法,致力於協助程序員在平時新項目中充分發揮演算法的動能。書中的前三章將協助你奠定基礎,陪你學習培訓二分查找、大O表示法、二種基礎的數據結構及其遞歸等。剩下的篇數將關鍵詳細介紹運用普遍的演算法,主要內容包含:應對實際難題時的處理方法,例如,什麼時候選用貪欲演算法或動態規劃;散列表的運用;圖演算法;Kzui近鄰演算法。
目錄
前言
致謝
關於本書
第1章 演算法簡介1
1.1引言1
1.1.1性能方面1
1.1.2問題解決技巧2
1.2二分查找2
1.2.1更佳的查找方式4
1.2.2運行時間8
1.3大O 表示法8
1.3.1演算法的運行時間以不同的速度增加9
1.3.2理解不同的大O運行時間10
1.3.3大O 表示法指出了最糟情況下的運行時間12
1.3.4一些常見的大O運行時間12
1.3.5旅行商13
1.4小結15
第2章 選擇排序16
2.1內存的工作原理16
2.2數組和鏈表18
2.2.1鏈表19
2.2.2數組20
2.2.3術語21
2.2.4在中間插入22
2.2.5刪除23
2.3選擇排序25
2.4小結28
第3章 遞歸29
3.1遞歸29
3.2基線條件和遞歸條件32
3.3棧33
3.3.1調用棧34
3.3.2遞歸調用棧36
3.4小結40
第4章 快速排序41
4.1分而治之41
4.2快速排序47
4.3再談大O表示法52
4.3.1比較合並排序和快速排序53
4.3.2平均情況和最糟情況54
4.4小結57
第5章 散列表58
5.1散列函數60
5.2應用案例63
5.2.1將散列表用於查找63
5.2.2防止重復64
5.2.3將散列表用作緩存66
5.2.4小結68
5.3沖突69
5.4性能71
5.4.1填裝因子72
5.4.2良好的散列函數74
5.5小結75
第6章 廣度優先搜索76
6.1圖簡介77
6.2圖是什麼79
6.3廣度優先搜索79
6.3.1查找最短路徑82
6.3.2隊列83
6.4實現圖84
6.5實現演算法86
6.6小結93
第7章 狄克斯特拉演算法94
7.1使用狄克斯特拉演算法95
7.2術語98
7.3換鋼琴100
7.4負權邊105
7.5實現108
7.6小結116
第8章 貪婪演算法117
8.1教室調度問題117
8.2背包問題119
8.3集合覆蓋問題121
8.4NP 完全問題127
8.4.1旅行商問題詳解127
8.4.2如何識別NP 完全問題131
8.5小結133
第9章 動態規劃134
9.1背包問題134
9.1.1簡單演算法135
9.1.2動態規劃136
9.2背包問題FAQ143
9.2.1再增加一件商品將如何呢143
9.2.2行的排列順序發生變化時結果將如何145
9.2.3可以逐列而不是逐行填充網格嗎146
9.2.4增加一件更小的商品將如何呢146
9.2.5可以偷商品的一部分嗎146
9.2.6旅遊行程最優化147
9.2.7處理相互依賴的情況148
9.2.8計算最終的解時會涉及兩個以上的子背包嗎148
9.2.9最優解可能導致背包沒裝滿嗎149
9.3最長公共子串149
9.3.1繪制網格150
9.3.2填充網格151
9.3.3揭曉答案152
9.3.4最長公共子序列153
9.3.5最長公共子序列之解決方案154
9.4小結155
第10章 K 最近鄰演算法156
10.1橙子還是柚子156
10.2創建推薦系統158
10.2.1特徵抽取159
10.2.2回歸162
10.2.3挑選合適的特徵164
10.3機器學習簡介165
10.3.1OCR165
10.3.2創建垃圾郵件過濾器166
10.3.3預測股票市場167
10.4小結167
第11章 接下來如何做168
11.1樹168
11.2反向索引171
11.3傅里葉變換171
11.4並行演算法172
11.5MapRece173
11.5.1分布式演算法為何很有用173
11.5.2映射函數173
11.5.3歸並函數174
11.6布隆過濾器和HyperLogLog174
11.6.1布隆過濾器175
11.6.2HyperLogLog176
11.7SHA 演算法176
11.7.1比較文件177
11.7.2檢查密碼178
11.8局部敏感的散列演算法178
11.9Diffie-Hellman 密鑰交換179
11.10線性規劃180
11.11結語180
練習答案181
自取: https://url80.ctfile.com/f/32319880-518802548-9892a0
(訪問密碼:3284)
㈢ 推薦一些關於演算法的書籍
1、數據結構與演算法分析:C語言描述(適合入門)
這本書相對於演算法導論要簡單一些,更適合入門。演算法導論其實有比較強的理論性,看起來比較吃力。
《數據結構與演算法分析:C語言描述》內容簡介:書中詳細介紹了當前流行的論題和新的變化,討論了演算法設計技巧,並在研究演算法的性能、效率以及對運行時間分析的基礎上考查了一些高級數據結構,從歷史的角度和近年的進展對數據結構的活躍領域進行了簡要的概括。由於《數據結構與演算法分析:C語言描述(原書第2版)》選材新穎,方法實用,題例豐富,取捨得當。《數據結構與演算法分析:C語言描述》的目的是培養學生良好的程序設計技巧和熟練的演算法分析能力,使得他們能夠開發出高效率的程序。從服務於實踐又鍛煉學生實際能力出發,書中提供了大部演算法的C程序和偽碼常式。
2、演算法設計與分析基礎(適合入門)
作者基於豐富的教學經驗,開發了一套對演算法進行分類的新方法。這套方法站在通用問題求解策略的高度,能對現有的大多數演算法都能進行准確分類,從而使本書的讀者能夠沿著一條清晰的、一致的、連貫的思路來探索演算法設計與分析這一迷人領域。本書作為第2版,相對第1版增加了新的習題,還增加了「迭代改進」一章,使得原來的分類方法更加完善。
3.0、演算法引論:一種創造性方法(適合入門)
和普通的演算法書不同,這本書從創造性的角度出發——如果說演算法導論講的是有哪些演算法,那麼演算法引論講的就是如何創造演算法。結合前面的演算法設計與分析基礎,這本書把能解決的演算法問題數量擴大了一個數量級。
3.1 演算法競賽 | 信息學奧賽一本通(算競入門)
AlphaWA同學推薦的入門書籍,網上沒有PDF版本,自己去淘寶買嘍。
3.2 演算法競賽 | 演算法競賽進階指南(算競進階)
㈣ 關於java學習,有什麼書籍或者教程推薦不啦
你好,如果想學習java,推薦自學。如果覺得自己沒有自製力,可以去報個培育班,那裡有人教,會更好點。至於書的話,有很多的,比如說java編程思想等等,要結合自己的實際需要來選擇,然後就是努力了。祝你學有所成!
㈤ 馬前課12指演算法圖解
馬前課12指演算法圖解如下:
動左手拇指,依次順時針點擊其餘3指上所布大安、留連、速喜、赤口、小吉、空亡6神位。例五月初四,午時占。
小六壬天氣秘法:
大安陰晴日,清風送爽楊柳枝。
留連雨綿綿,旱苗喜雨在禾田。
速喜霓虹現,艷陽高照在人間。
赤口冷如刀,雷雨霜雪兼冰雹。
小吉星月稀,陰陽天里陰陽期。
空亡霧茫茫,不見日月海天長。
㈥ 《演算法圖解》pdf
本書示例豐富,圖文並茂,以讓人容易理解的方式闡釋了演算法,旨在幫助程序員在日常項目中更好地發揮演算法的能量。書中的前三章將幫助你打下基礎,帶你學習二分查找、大O表示法、兩種基本的數據結構以及遞歸等。餘下的篇幅將主要介紹應用廣泛的演算法,具體內容包括:面對具體問題時的解決技巧,比如,何時採用貪婪演算法或動態規劃;散列表的應用;圖演算法;Kzui近鄰演算法。
目錄
前言
致謝
關於本書
第1章 演算法簡介1
1.1引言1
1.1.1性能方面1
1.1.2問題解決技巧2
1.2二分查找2
1.2.1更佳的查找方式4
1.2.2運行時間8
1.3大O 表示法8
1.3.1演算法的運行時間以不同的速度增加9
1.3.2理解不同的大O運行時間10
1.3.3大O 表示法指出了最糟情況下的運行時間12
1.3.4一些常見的大O運行時間12
1.3.5旅行商13
1.4小結15
第2章 選擇排序16
2.1內存的工作原理16
2.2數組和鏈表18
2.2.1鏈表19
2.2.2數組20
2.2.3術語21
2.2.4在中間插入22
2.2.5刪除23
2.3選擇排序25
2.4小結28
第3章 遞歸29
3.1遞歸29
3.2基線條件和遞歸條件32
3.3棧33
3.3.1調用棧34
3.3.2遞歸調用棧36
3.4小結40
第4章 快速排序41
4.1分而治之41
4.2快速排序47
4.3再談大O表示法52
4.3.1比較合並排序和快速排序53
4.3.2平均情況和最糟情況54
4.4小結57
第5章 散列表58
5.1散列函數60
5.2應用案例63
5.2.1將散列表用於查找63
5.2.2防止重復64
5.2.3將散列表用作緩存66
5.2.4小結68
5.3沖突69
5.4性能71
5.4.1填裝因子72
5.4.2良好的散列函數74
5.5小結75
第6章 廣度優先搜索76
6.1圖簡介77
6.2圖是什麼79
6.3廣度優先搜索79
6.3.1查找最短路徑82
6.3.2隊列83
6.4實現圖84
6.5實現演算法86
6.6小結93
第7章 狄克斯特拉演算法94
7.1使用狄克斯特拉演算法95
7.2術語98
7.3換鋼琴100
7.4負權邊105
7.5實現108
7.6小結116
第8章 貪婪演算法117
8.1教室調度問題117
8.2背包問題119
8.3集合覆蓋問題121
8.4NP 完全問題127
8.4.1旅行商問題詳解127
8.4.2如何識別NP 完全問題131
8.5小結133
第9章 動態規劃134
9.1背包問題134
9.1.1簡單演算法135
9.1.2動態規劃136
9.2背包問題FAQ143
9.2.1再增加一件商品將如何呢143
9.2.2行的排列順序發生變化時結果將如何145
9.2.3可以逐列而不是逐行填充網格嗎146
9.2.4增加一件更小的商品將如何呢146
9.2.5可以偷商品的一部分嗎146
9.2.6旅遊行程最優化147
9.2.7處理相互依賴的情況148
9.2.8計算最終的解時會涉及兩個以上的子背包嗎148
9.2.9最優解可能導致背包沒裝滿嗎149
9.3最長公共子串149
9.3.1繪制網格150
9.3.2填充網格151
9.3.3揭曉答案152
9.3.4最長公共子序列153
9.3.5最長公共子序列之解決方案154
9.4小結155
第10章 K 最近鄰演算法156
10.1橙子還是柚子156
10.2創建推薦系統158
10.2.1特徵抽取159
10.2.2回歸162
10.2.3挑選合適的特徵164
10.3機器學習簡介165
10.3.1OCR165
10.3.2創建垃圾郵件過濾器166
10.3.3預測股票市場167
10.4小結167
第11章 接下來如何做168
11.1樹168
11.2反向索引171
11.3傅里葉變換171
11.4並行演算法172
11.5MapRece173
11.5.1分布式演算法為何很有用173
11.5.2映射函數173
11.5.3歸並函數174
11.6布隆過濾器和HyperLogLog174
11.6.1布隆過濾器175
11.6.2HyperLogLog176
11.7SHA 演算法176
11.7.1比較文件177
11.7.2檢查密碼178
11.8局部敏感的散列演算法178
11.9Diffie-Hellman 密鑰交換179
11.10線性規劃180
11.11結語180
練習答案181
最後,這里為大家准備了幾百本的互聯網電子書,有需要的過來取吧。 點擊獲取
㈦ 目標檢測演算法圖解:一文看懂RCNN系列演算法
姓名:王咫毅
學號:19021211150
【嵌牛導讀】CNN如此風靡,其衍生演算法也是層出不窮,各種衍生演算法也可以應用於各種應用場景,各類場合。本文則是了解每個衍生演算法的各個使用場景、原理及方法。
【嵌牛鼻子】RCNN 目標檢測
【嵌牛提問】RCNN系列演算法有何區別和聯系?
【嵌牛正文】
在生活中,經常會遇到這樣的一種情況,上班要出門的時候,突然找不到一件東西了,比如鑰匙、手機或者手錶等。這個時候一般在房間翻一遍各個角落來尋找不見的物品,最後突然一拍大腦,想到在某一個地方,在整個過程中有時候是很著急的,並且越著急越找不到,真是令人沮喪。但是,如果一個簡單的計算機演算法可以在幾毫秒內就找到你要找的物品,你的感受如何?是不是很驚奇!這就是對象檢測演算法(object detection)的力量。雖然上述舉的生活例子只是一個很簡單的例子,但對象檢測的應用范圍很廣,跨越多個不同的行業,從全天候監控到智能城市的實時車輛檢qian測等。簡而言之,物體檢測是強大的深度學習演算法中的一個分支。
在本文中,我們將深入探討可以用於對象檢測的各種演算法。首先從屬於RCNN系列演算法開始,即RCNN、 Fast RCNN和 Faster RCNN。在之後的文章中,將介紹更多高級演算法,如YOLO、SSD等。
1.解決對象檢測任務的簡單方法(使用深度學習)
下圖說明了對象檢測演算法是如何工作。圖像中的每個對象,從人到風箏都以一定的精度進行了定位和識別。
下面從最簡單的深度學習方法開始,一種廣泛用於檢測圖像中的方法——卷積神經網路(CNN)。如果讀者對CNN演算法有點生疏,建議 閱讀此文 。
這里僅簡要總結一下CNN的內部運作方式:
首先將圖像作為輸入傳遞到網路,然後通過各種卷積和池化層處理,最後以對象類別的形式獲得輸出。
對於每個輸入圖像,會得到一個相應的類別作為輸出。因此可以使用這種技術來檢測圖像中的各種對象。
1.首先,將圖像作為輸入;
2.然後,將圖像分成不同的區域;
3.然後,將每個區域視為單獨的圖像;
4.將所有這些區域傳遞給CNN並將它們分類為各種類別;
5.一旦將每個區域劃分為相應的類後,就可以組合所有這些區域來獲取具有檢測到的對象的原始圖像:
使用這種方法會面臨的問題在於,圖像中的對象可以具有不同的寬高比和空間位置。例如,在某些情況下,對象可能覆蓋了大部分圖像,而在其他情況下,對象可能只覆蓋圖像的一小部分,並且對象的形狀也可能不同。
基於此,需要劃分大量的區域,這會花費大量的計算時間。因此,為了解決這個問題並減少區域數量,可以使用基於區域的CNN,它使用提議方法選擇區域。
2.基於區域的卷積神經網路
2.1 RCNN的思想
RCNN演算法不是在大量區域上工作,而是在圖像中提出了一堆方框,並檢查這些方框中是否包含任何對象。RCNN 使用選擇性搜索從圖像中提取這些框。
下面介紹選擇性搜索以及它如何識別不同的區域。基本上四個區域形成一個對象:不同的比例、顏色、紋理和形狀。選擇性搜索在圖像中識別這些模式,並基於此提出各種區域。以下是選擇性搜索如何工作的簡要概述:
首先, 將圖像作為輸入:
然後,它生成初始子分段,以便獲得多個區域:
之後,該技術組合相似區域以形成更大的區域(基於顏色相似性、紋理相似性、尺寸相似性和形狀兼容性):
最後,這些區域產生最終的對象位置(感興趣的區域);
下面是RCNN檢測對象所遵循的步驟的簡要總結:
1.首先採用預先訓練的卷積神經網路;
2.重新訓練該模型模型——根據需要檢測的類別數量來訓練網路的最後一層(遷移學習);
3.第三步是獲取每個圖像的感興趣區域。然後,對這些區域調整尺寸,以便其可以匹配CNN輸入大小;
4.獲取區域後,使用SVM演算法對對象和背景進行分類。對於每個類,都訓練一個二分類SVM;
最後,訓練線性回歸模型,為圖像中每個識別出的對象生成更嚴格的邊界框;
[對上述步驟進行圖解分析]( http://www.robots.ox.ac.uk/~tvg/publications/talks/Fast-rcnn-slides.pdf ):
首先,將圖像作為輸入:
然後,使用一些提議方法獲得感興趣區域(ROI)(例如,選擇性搜索):
之後,對所有這些區域調整尺寸,並將每個區域傳遞給卷積神經網路:
然後,CNN為每個區域提取特徵,SVM用於將這些區域劃分為不同的類別:
最後,邊界框回歸(Bbox reg)用於預測每個已識別區域的邊界框:
以上就是RCNN檢測物體的全部流程。
2.2 RCNN的問題
從上節內容可以了解到RCNN是如何進行對象檢測的,但這種技術有其自身的局限性。以下原因使得訓練RCNN模型既昂貴又緩慢:
基於選擇性搜索演算法為每個圖像提取2,000個候選區域;
使用CNN為每個圖像區域提取特徵;
RCNN整個物體檢測過程用到三種模型:
CNN模型用於特徵提取;
線性svm分類器用於識別對象的的類別;
回歸模型用於收緊邊界框;
這些過程相結合使得RCNN非常慢,對每個新圖像進行預測需要大約40-50秒,這實際上使得模型在面對巨大的數據集時變得復雜且幾乎不可能應用。
好消息是存在另一種物體檢測技術,它解決了RCNN中大部分問題。
3.了解Fast RCNN
3.1Fast RCNN的思想
RCNN的提出者Ross Girshick提出了這樣的想法,即每個圖像只運行一次CNN,然後找到一種在2,000個區域內共享該計算的方法。在Fast RCNN中,將輸入圖像饋送到CNN,CNN生成卷積特徵映射。使用這些特徵圖提取候選區域。然後,使用RoI池化層將所有建議的區域重新整形為固定大小,以便將其饋送到全連接網路中。
下面將其分解為簡化概念的步驟:
1.首先將圖像作為輸入;
2.將圖像傳遞給卷積神經網路,生成感興趣的區域;
3.在所有的感興趣的區域上應用RoI池化層,並調整區域的尺寸。然後,每個區域被傳遞到全連接層的網路中;
4.softmax層用於全連接網以輸出類別。與softmax層一起,也並行使用線性回歸層,以輸出預測類的邊界框坐標。
因此,Fast RCNN演算法中沒有使用三個不同的模型,而使用單個模型從區域中提取特徵,將它們分成不同的類,並同時返回所標識類的邊界框。
對上述過程進行可視化講解:
將圖像作為輸入:
將圖像傳遞給卷積神經網路t,後者相應地返回感興趣的區域:
然後,在提取的感興趣區域上應用RoI池層,以確保所有區域具有相同的大小:
最後,這些區域被傳遞到一個全連接網路,對其進行分類,並同時使用softmax和線性回歸層返回邊界框:
上述過程說明了Fast RCNN是如何解決RCNN的兩個主要問題,即將每個圖像中的1個而不是2,000個區域傳遞給卷積神經網路,並使用一個模型來實現提取特徵、分類和生成邊界框。
3.2Fast RCNN的問題
Fast RCNN也存在一定的問題,它仍然使用選擇性搜索作為查找感興趣區域的提議方法,這是一個緩慢且耗時的過程,每個圖像檢測對象大約需要2秒鍾。
因此,又開發了另一種物體檢測演算法——Faster RCNN。
4.了解Faster RCNN
4.1. Faster RCNN的思想
Faster RCNN是Fast RCNN的修改版本,二者之間的主要區別在於,Fast RCNN使用選擇性搜索來生成感興趣區域,而Faster RCNN使用「區域提議網路」,即RPN。RPN將圖像特徵映射作為輸入,並生成一組提議對象,每個對象提議都以對象分數作為輸出。
以下步驟通常採用Faster RCNN方法:
1.將圖像作為輸入並將其傳遞給卷積神經網路,後者返回該圖像的特徵圖;
2.在這些特徵圖上應用RPN,返回提議對象及其分數;
3.在這些提議對象上應用RoI池層,以將所有提案降低到相同的大小;
4.最後,將提議傳遞到全連接層,該層在其頂部具有softmax層和線性回歸層,以對對象的邊界框進行分類和輸出;
這里簡要解釋一下RPN是如何運作的:
首先,Faster RCNN從CNN獲取特徵圖並將它們傳遞到區域提議網路。RPN在這些特徵圖上使用滑動窗口,每個窗口生成不同形狀和大小的k個方框( Anchor boxe):
方框是固定尺寸的邊界箱,具有不同的形狀和尺寸。對於每個方框,RPN預測兩件事:
預測錨是對象的概率;
用於邊界框回歸器調整錨點以更好地適合物體的形狀;
在有了不同形狀和大小的邊界框後,將其傳遞到RoI池層。對每個提案並對其進行裁剪,以便每個提案都包含一個對象。這就是RoI池層所做的事情,它為每個方框提取固定大小的特徵圖:
然後將這些特徵圖傳遞到全連接層,該層具有softmax和線性回歸層,最終對對象進行分類並預測已識別對象的邊界框。
4.2Faster RCNN的問題
上述討論過的所有對象檢測演算法都使用區域來識別對象,且網路不會一次查看完整圖像,而是按順序關注圖像的某些部分,這樣會帶來兩個復雜性的問題:
該演算法需要多次通過單個圖像來提取到所有對象;
由於不是端到端的演算法,不同的系統一個接一個地工作,整體系統的性能進一步取決於先前系統的表現效果。
鏈接: https://www.jianshu.com/p/51fc039ae7a4
㈧ 《我的第一本演算法書》pdf下載在線閱讀,求百度網盤雲資源
《我的第一本演算法書》([日]石田保輝)電子書網盤下載免費在線閱讀
鏈接:https://pan..com/s/1fPHXHU0qGGAG0DVFWnq3Ig
書名:我的第一本演算法書
作者:[日]石田保輝
譯者:張貝
豆瓣評分:7.6
出版社:人民郵電出版社
出版年份:2018-11
頁數:204
內容簡介:
本書採用大量圖片,通過詳細的分步講解,以直觀、易懂的方式展現了7個數據結構和26個基礎演算法的基本原理。第1章介紹了鏈表、數組、棧等7個數據結構;從第2章到第7章,分別介紹了和排序、查找、圖論、安全、聚類等相關的26個基礎演算法,內容涉及冒泡排序、二分查找、廣度優先搜索、哈希函數、迪菲 - 赫爾曼密鑰交換、k-means 演算法等。
作者簡介:
石田保輝
自由職業工程師,現居日本東京。2011年畢業於日本京都大學研究生院。輾轉於幾個創新型企業後獨立,成為自由職業者。2016年,個人製作的面向工程師的學習型App「演算法動畫圖解」上架,不到1年時間全球下載量即達到50萬次,並入選了「App Store日本區2016年度最佳應用」榜單。
宮崎修一
日本京都大學學術信息媒體中心副教授。1998年從日本九州大學博士生院工學專業畢業後,開始擔任日本京都大學研究生院信息學研究科助手,2002年起擔任現職。主要研究演算法和計算復雜性理論。近期的重點研究對象為相似演算法和在線演算法。主要著作有《圖論入門:基本知識和演算法》(日本森北出版社,2015年)。
㈨ 有沒有 《 演算法圖解 (圖靈程序設計叢書)》電子版書籍百度雲下載
042.演算法圖解(圖靈程序設計叢書).epub
鏈接:https://pan..com/s/1OhPzyAatS3-ha2omFFR8pw
㈩ 《程序員的演算法趣題》pdf下載在線閱讀全文,求百度網盤雲資源
《程序員的演算法趣題》([ 日] 增井敏克)電子書網盤下載免費在線閱讀
鏈接:
書名:程序員的演算法趣題
作者:[ 日] 增井敏克
譯者:絕雲
豆瓣評分:7.6
出版社:人民郵電出版社
出版年份:2017-7
頁數:312
內容簡介:
本書是一本解謎式的趣味演算法書,從實際應用出發,通過趣味謎題的解謎過程,引導讀者在愉悅中提升思維能力、掌握演算法精髓。此外,本書作者在謎題解答上,通過演算法的關鍵原理講解,從思維細節入手,發掘啟發性演算法新解,並輔以Ruby、JavaScript等不同語言編寫的源代碼示例,使讀者在演算法思維與編程實踐的分合之間,切實提高編程能力。 本書適合已經學習過排序、搜索等知名演算法,並想要學習更多有趣演算法以提升編程技巧、拓展程序設計思路的程序員,以及對挑戰演算法問題感興趣、愛好解謎的程序員閱讀。
作者簡介:
增井敏克
1979年生於奈良,畢業於大阪府立大學研究生院。增井IT工程師事務所代表、注冊工程師(信息工程學方向)。從事旨在「將商務、數學和IT結合以正確、高效使用計算機」的技能提升指導、軟體開發以及信息安全咨詢等工作。掌握C/C++、C#、Java、PHP和Ruby等20多種編程語言。著作有《在家就能學會的安全基礎》等。目前在面向IT工程師提供業務技能評估服務的平台CodeIQ上負責人氣欄目「每周演算法」的出題和評審工作。
絕雲
畢業於清華軟院。曾在日本創意公司KAYAC從事即時通信軟體和手游的開發工作,現供職於螞蟻金服,專攻數據可視化方向。譯作有《圖解簡單演算法》《自製編譯器》等,曾參與《像外行一樣思考,像專家一樣實踐(修訂版)》的審校。