- 前言
- 一,計算機系統
- 1.1,計算機系統書籍
- 1.2,設計模式教程
- 二,編程語言
- 2.1,C++ 學習資料
- 2.2,Python 學習資料
- 三,資料結構與演算法
- 3.1,資料結構與演算法課程
- 3.2,演算法題解
- 四,機器學習
- 4.1,機器學習課程
- 五,深度學習
- 5.1,深度學習課程
- 5.2,深度學習基礎文章
- 5.3,經典CNN分析文章
- 5.4,PyTorch 框架學習文章
- 5.5,PyTorch/Caffe 框架分析文章
- 六,計算機視覺
- 6.1,數字影像處理教程
- 6.2,計算機視徑訓礎課程
- 6.3,深度學習模型和資源庫
- 6.4,目標檢測網路文章
- 6.5,語意分割文章
- 6.6,3D 視覺技術文章
- 6.7,深度學習的評價指標文章
- 七,模型壓縮與量化
- 7.1,輕量級網路設計
- 7.2,模型壓縮文章
- 7.3,神經網路量化文章
- 7.4,推理框架剖析文章
- 八,高性能計算
- 8.1,CPU/GPU/AI 芯片科普
- 8.2,指令集(ISA)學習資料
- 8.3,矩陣乘優化文章
- 九,模型部署(演算法SDK開發)
- 9.1,模型部署文章
- 效率工具
- markdown/latex 寫作
- 博客閱讀后的知識點總結
- 參考資料
文章同步發于 github 倉庫 和 csdn 博客,最新版以
github為主,如果看完文章有所識訓,一定要先點贊后收藏,畢竟,贈人玫瑰,手有余香.
本文內容為 cv 演算法工程師成長子路上的經典學習教材匯總,對于一些新興領域則給出了較好的博客文章鏈接,本文列出的知識點目錄是成系統且由淺至深的,可作為 cv 演算法工程師的常備學習路線資料,
文章所涉知識點和參考資料內容很多也很廣,建議先看目錄,心中有個大概知識點結構,后面由淺入深,慢慢學習各個知識點,由淺入深,切忌浮躁,
部分學習資料存在離線
前言
課程學習方法,三句話總結:
- 看授課視頻形成概念,發現個人感興趣方向,
- 讀課程筆記理解細節,夯實工程實作的基礎,
- 碼課程作業實作演算法,積累實驗技巧與經驗,
再參考一下學習金字塔的圖:

圖片來源
github倉庫 DeepLearning Tutorial
關于科研和研發的思考,可參考文章-中國人民大學趙鑫:AI 科研入坑指南,
一,計算機系統
1.1,計算機系統書籍
- 《深入理解計算機系統第三版》: 網上有電子版,
PDF電子書下載方式在文章首頁,
1.2,設計模式教程
- 設計模式: 內容很全,存在
C++示例代碼,
二,編程語言
2.1,C++ 學習資料
- cpp reference:
C++庫介面參考標準檔案,官方檔案,包含各個函式定義及使用example, - http://www.cplusplus.com/reference/stl/
- Cpp Primer 學習: 《C++ Primer 中文版(第 5 版)》學習倉庫,包括筆記和課后練習答案,
- C++ Tips of the Week: 谷歌出品的
C++編程技巧,
2.2,Python 學習資料
- 《廖雪峰-Python3教程》: 內容很全且通俗易懂,適合初學者,但代碼示例不夠豐富,描述的知識點有:Python 基礎、函式、高級特性、函式式編程、模塊、面向物件編程、面向物件高級編程、錯誤、除錯和測驗、IO 編程、行程和執行緒、正則運算式、常用內建模塊、常用第三方模塊、圖形界面、網路編程、異步IO 等內容,電子書可在github倉庫-cv_books 中下載,
- Python 工匠系列文章: 很適合深入理解 Python 面向物件編程、裝飾器、模塊、例外處理等內容,
三,資料結構與演算法
3.1,資料結構與演算法課程
- 《圖解演算法》:存在
PDF電子版,內容較為基礎且通俗易懂,適合快速了解資料結構與演算法的基礎知識,但深度不夠,示例代碼為Python, - 專欄-資料結構與演算法之美: 學習資料結構與演算法的知識點課程,內容全且深度足夠,官方例子為
java代碼,同時github倉庫提供C/C++/GO/Python等代碼,
3.2,演算法題解
- 《劍指Offer》面試題: Python實作: 題目為《劍指Offer》書籍原題,代碼實作為
Python,倉庫簡潔,閱讀體驗不錯,無任何廣告,適合剛學完資料結構與演算法基礎知識的同學, - 力扣++-演算法圖解:
leetcode高頻題圖解,題解分析很多,部分題目有影片分析,提供Python/Java/C++實作,但也存在部分題解分析廢話較多,不夠精簡的問題, - 小浩演算法: 一部圖解演算法題典,講解
105道高頻面試演算法題目,go代碼實作, - LeetCode題解:
leetcode高頻題題解,全書代碼默認使用C++11語法撰寫,題解為文字性描述,題解分析較短且不夠通俗易懂,本書的目標讀者是準備去硅谷找作業的碼農,也適用于在國內找作業的碼農,以及剛接觸ACM演算法競賽的新手,
四,機器學習
4.1,機器學習課程
- 《機器學習》-周志華(西瓜書):存在
PDF電子版,內容很全,很適合打下扎實的基礎, - 《李宏毅-機器學習課程》: 機器學習經典視頻教程啊,非常適合初學者觀看,
- 李宏毅機器學習筆記(LeeML-Notes): 可以在線閱讀,很方便,內容完成度高,
- 《南瓜書PumpkinBook》: 南瓜書,是西瓜書的補充資料,包含了西瓜書的公式的詳細推導,建議先看西瓜書,部分公式不會推導的情況下,可以查看南瓜書的對應內容,
- 機器學習數學基礎: 黃海廣博士翻譯的
CS229機器學習課程的線性代數基礎材料,英文好的建議看原版,

五,深度學習
想要快速入門神經網路(深度學習)或者重新復習基礎的同學,推薦看這個文章合集Neural Networks From Scratch,文章內容由淺入深,既有公式推導,也有對應代碼實作,
5.1,深度學習課程
- 《深度學習》(花書),存在英文和中文
PDF電子版,內容成系統,覆寫了深度學習的方方面面,強烈建議至少看完跟自己方向相關的章節,有利于打好扎實的基礎, - 《李宏毅-深度學習課程》: 經典視頻教程,實體有趣(皮卡丘),內容講解由淺至深,李宏毅老師個人官網也提供了視頻鏈接、
PPT課件、代碼資料,
5.2,深度學習基礎文章
- CNN中引數解釋及計算
- 深度學習推理時融合BN,輕松獲得約5%的提速
- 動圖形象理解深度學習卷積
5.3,經典CNN分析文章
- 深度可分離卷積(Xception 與 MobileNet 的點滴)
- [DL-架構-ResNet系] 002 ResNet-v2
- ResNet及其變種的結構梳理、有效性分析與代碼解讀
1,VGGNet 擁有 5 段 卷積,每一段有 2~3 個卷積層,同時每段尾部會連接一個最大池化層用來縮小圖片尺寸,每段內的卷積核數量相同,越靠后的段的卷積核數量越多:64-128-256-512-512,ResNet 網路擁有 4 段卷積, 每段卷積代表一個 殘差學習
Blocks,根據網路層數的不同, Blocks 的單元數量不同,例如 ResNet18 的 Blocks 單元數量分別為2、2、2 和 2,越靠后的段的卷積核數量越多:64-128-256-512,殘差學習Blocks內的卷積核通道數是相同的,
2,ResNet v2 創新點在于通過理論分析和實驗證明恒等映射對于殘差塊的重要性,根據激活函式與相加操作的位置關系,我們稱之前的組合方式(ResNet)為“后激活(post-activation)”,現在新的組合方式(ResNet v2)稱之為“預激活(pre-activation)”,使用預激活有兩個方面的優點:1)
f變為恒等映射,使得網路更易于優化;2)使用BN作為預激活可以加強對模型的正則化,
5.4,PyTorch 框架學習文章
- PyTorch中文檔案;PyTorch官方教程中文版;PyTorch 官方教程,
- PyTorch_tutorial_0.0.5_余霆嵩: 存在開源
PDF電子版,且提供較為清晰的代碼,適合快速入門,教程目錄結構清晰明了,
5.5,PyTorch/Caffe 框架分析文章
- pytorch自定義層如何實作?超簡單!
- 【PyTorch】torch.nn.Module 原始碼分析
- 詳解Pytorch中的網路構造,模型save和load,.pth權重檔案決議
- 半小時學會 PyTorch Hook
- 詳解Pytorch中的網路構造
- 深度學習與Pytorch入門實戰(九)卷積神經網路&Batch Norm
- Pytorch 里 nn.AdaptiveAvgPool2d(output_size) 原理是什么?
- caffe原始碼決議-開篇
- 《Caffe官方教程中譯本》:存在開源
PDF電子版,
六,計算機視覺
6.1,數字影像處理教程
- 《數字影像處理第四版》:存在開源
PDF電子版,成系統的介紹了數字影像的原理及應用,內容多且全、深度也足夠,非常適合深入理解數學影像原理,可挑重點看, - 桔子code-OpenCV-Python教程
6.2,計算機視徑訓礎課程
- 《CS231 課程》-李飛飛,b 站視頻教程;CS231n官方筆記授權翻譯總集,課程非常經典,內容深入淺出,每節課都有課后作業和對應學習筆記,
- 《動手學深度學習》-李沐,存在開源
PDF電子書,官方代碼為MXNet框架實作,github上有開源的《動?手學深度學習 PYTORCH 版》, - 《決議卷積神經網路-深度學習實踐手冊》-魏秀參:對
CNN對基礎部件做了深入描述,本書內容全且成系統,適合想深入學習CNN的同學,唯一的缺點沒有專案案例以供實踐,本書提供開源PDF電子版,
6.3,深度學習模型和資源庫
- Papers With Code
- Jetson Zoo
- ModelZOO
- MediaPipe 框架
- Deci's Hardware Aware Model
Papers with code是由Meta AI Research團隊主導的一個開放資源的社區,匯集了深度學習論文、資料集、演算法代碼、模型以及評估表,Jetson Zoo,是一個開源目錄,其中包含在NVIDIA Jetson硬體平臺上開發指南以及參考案例分享匯總,模型庫資源里包括影像分類、目標檢測、語意分割和姿勢估計等方向的實踐分享,提供開源代碼和開發指南文章的鏈接,Model Zoo包含了機器學習各領域的演算法框架及預訓練模型資源匯總,其中包括TensorFlow、PyTorch、Keras、Caffe等框架,作者是Jing Yu Koh構建,- MediaPipe 是一個為直播和流媒體提供跨平臺、可定制的機器學習解決方案的框架,MediaPipe 提供了包括人臉檢測、人臉網格、虹膜識別、手部關鍵點檢測、人體姿態估計、人體+人臉+手部組合整體、頭發分割、目標檢測、Box 跟蹤、即時運動追蹤、3D 目標檢測等解決方案,
Deci旨在使用AI構建更好的AI,使深度學習能夠發揮其真正的潛力,借助該公司的端到端深度學習加速平臺,人工智能開發人員可以為任何環境(包括云、邊緣或移動)構建、優化和部署更快、更準確的模型,借助Deci的平臺,開發人員可以在任何硬體上將深度學習模型推理性能提高3到15倍,同時仍然保持準確性,平臺除了能夠顯示每個模型的準確性之外,還可以輕松選擇目標推理硬體并查看模型的運行時性能結果,例如各種硬體的吞吐量、延遲、模型大小和記憶體占用,但是模型加速模塊的demo是需要注冊賬戶和購買的,

6.4,目標檢測網路文章
- 一文讀懂Faster RCNN
- 從編程實作角度學習Faster R-CNN(附極簡實作)
- Mask RCNN學習筆記
- Mask RCNN 源代碼決議 (1) - 整體思路
- 物體檢測之Focal Loss及RetinaNet
- CVPR18 Detection文章選介(下)
- 2020首屆海洋目標智能感知國際挑戰賽 冠軍方案分享
- 目標檢測中的樣本不平衡處理方法——OHEM, Focal Loss, GHM, PISA
6.5,語意分割文章
- 2019年最新基于深度學習的語意分割技術講解
- U-Net 論文筆記
6.6,3D 視覺技術文章
- 3D成像方法 匯總(原理決議)--- 雙目視覺、激光三角、結構光、ToF、光場、全息
- 關于雙目立體視覺的三大基本演算法及發展現狀的總結
- 3D視覺CV界的終極體現形式,計算機如何「看」這個三維世界
6.7,深度學習的評價指標文章
- ROC和AUC介紹以及如何計算AUC
- COCO目標檢測測評指標
- 如何評測AI系統?
- PLASTER:一個與深度學習性能有關的框架
- The Correct Way to Measure Inference Time of Deep Neural Networks
七,模型壓縮與量化
7.1,輕量級網路設計
- 輕量卷積神經網路的設計
網路結構碎片化更多是指網路中的多路徑連接,類似于
short-cut,bottle neck等不同層特征融合,還有如FPN等結構,拖慢并行的一個很主要因素是,運算快的模塊總是要等待運算慢的模塊執行完畢,
- ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
- ShufflenetV2_高效網路的4條實用準則
- 輕量級神經網路:ShuffleNetV2解讀
7.2,模型壓縮文章
- 解讀模型壓縮3:高效模型設計的自動機器學習流水線
- Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding
- 韓松Deep compression論文講解——PPT加說明文字
- 論文總結 - 模型剪枝 Model Pruning
- 編譯器與IR的思考: LLVM IR,SPIR-V到MLIR
7.3,神經網路量化文章
- 神經網路量化簡介
- 線性量化
- Int8量化-介紹(一)
- Int8量化-ncnn社區Int8重構之路(三)
- ncnn原始碼學習(六):模型量化原理筆記
- 神經網路推理加速之模型量化
- NNIE 量化感知訓練
1,量化是指用于執行計算并以低于浮點精度的位寬存盤張量的技術,或者說量化就是將神經網路的浮點演算法轉換為定點, 量化模型對張量使用整數而不是浮點值執行部分或全部運算,
2,量化簡單來說就是將浮點存盤(運算)轉換為整型存盤(運算)的一種模型壓縮技術,
3,雖然精心設計的
MobileNet能在保持較小的體積時仍然具有與GoogleNet相當的準確度,不同大小的MobileNet本身就表明——也許一個好的模型設計可以改進準確度,但同類模型中仍然是更大的網路,更好的效果!
4,權重值域調整是另一個機器學習程序,學習的目標是一對能在量化后更準確地運行網路的超引數
min/max,
7.4,推理框架剖析文章
- 優化 TensorFlow Lite 推理運行環境記憶體占用
- ncnn原始碼決議(五):執行器Extractor
八,高性能計算
8.1,CPU/GPU/AI 芯片科普
- 一文讀懂 GPU 的發展歷程
- CPU、GPU、NPU等芯片架構、特點研究
- 什么是異構并行計算?CPU與GPU的區別是什么?
- 看懂芯片原來這么簡單(二):AI為什么聰明?什么是華為自研架構NPU?
- 【專利解密】如何提高AI資源利用率? 華為卷積運算芯片
- 嵌入式系統 記憶體模塊設計
8.2,指令集(ISA)學習資料
- Intel? Intrinsics Guide
- Neon Intrinsics Reference
- ARM Neon Intrinsics 學習指北:從入門、進階到學個通透
Neon是ARM平臺的向量化計算指令集,通過一條指令完成多個資料的運算達到加速的目的,或者說Neon是 ARM 平臺的SIMD(Single Instruction Multiple Data,單指令多資料流)指令集實作,常用于AI、多媒體等計算密集型任務,
8.3,矩陣乘優化文章
- 移動端arm cpu優化學習筆記----一步步優化盒子濾波(Box Filter)
- OpenBLAS gemm從零入門
- 通用矩陣乘(GEMM)優化演算法
- 卷積神經網路中的Winograd快速卷積演算法
- 知乎專欄-深入淺出GPU優化
- CUDA GEMM 理論性能分析與 kernel 優化
- OpenPPL 中的卷積優化技巧:概述總結類文章,無代碼,非專注時刻也能閱讀,
- 【張先軼】BLISlab學習優化矩陣乘,第一課
- 矩陣乘法與 SIMD
Winograd是一種快速卷積演算法,適用于小卷積核,可以減少浮點乘法的次數,
九,模型部署(演算法SDK開發)
9.1,模型部署文章
- 海思AI芯片(Hi3519A/3559A)方案學習(二十五)初識 mapper_quant 和mapper_param
- 部署PyTorch模型到終端
- 多場景適配,TNN如何優化模型部署的存盤與計算
- 模型轉換、模型壓縮、模型加速工具匯總
- 深度學習模型轉換與部署那些事(含ONNX格式詳細分析)
- ONNX初探
效率工具
markdown/latex 寫作
- markdown語法大全: 這篇文章對
markdown語法整理得很好,文章排版也做的好,讀完很容易就掌握markdown語法, - 通用 LaTeX 數學公式語法手冊: 文章排版很好,目錄結構清晰明了,閱讀起來很舒服,推薦用來學習
latex語法內容, - https://latex.codecogs.com/eqneditor/editor.php: 在線
latex語法,
博客閱讀后的知識點總結
1,為了盡可能地提高 MAC陣列 的利用率以及卷積運算效率,陣列控制模塊會根據第一卷積引數矩陣的行數和第一卷積資料陣列的行數來確定第一乘法累加視窗的列數,
2,SNPE 開發流程:

3,目標檢測模型效果提升方法:
- 以
Cascade RCNN作為baseline,以Res2Net101作為Backbone; Albumentation庫做資料集增強-用在模型訓練中;- 多尺度訓練(
MSTMulti-scale training/testing)的升級版-SNIP方法(Scale Normalization for Image Pyramids),用在baseline模型訓練和測驗中:解決模板大小尺度不一的問題; DCN可變性卷積網路-用在baseline模型的backone中;soft-NMS:解決目標互相重疊的問題;HTC模型預訓練,Adam優化演算法可以較好的適應陌生資料集,學習率熱身(warm-up)來穩定訓練程序,
4,SNIP 論文解讀:
SNIP 非常 solid 地證明了就算是資料相對充足的情況下,CNN 仍然很難使用所有 scale 的物體,個人猜測是由于 CNN 中沒有對于 scale invariant 的結構,CNN 能檢測不同 scale 的“假象”,更多是通過CNN 來通過 capacity 來強行 memorize 不同 scale 的物體來達到的,這其實浪費了大量的 capacity,而 SNIP 這樣只學習同樣的 scale 可以保障有限的 capacity 用于學習語意資訊,論文的關鍵貢獻:發現現在的 CNN 網路無法很好的解決 scale invariance 的問題,提出了一個治標不治本的方法,
5,高效模型設計(模型壓縮)方法:
一般而言,高效模型的設計有 6 大基本思路:1)輕量級架構、2)模型裁剪、3)AutoML 和 NAS 模型搜索、4)低精度量化、5)知識蒸餾、6)高效實作,
來源曠世學術分享-張祥雨:高效輕量級深度模型的研究和實踐,
6,網路深度與寬度的理解及意義
更多理解參考知乎網路寬度對深度學習模型性能有什么影響?
在一定的程度上,網路越深越寬,性能越好,寬度,即通道(channel)的數量,網路深度,及 layer 的層數,如 resnet18 有 18 層網路,注意我們這里說的和寬度學習一類的模型沒有關系,而是特指深度卷積神經網路的(通道)寬度,
網路深度的意義:CNN 的網路層能夠對輸入影像資料進行逐層抽象,比如第一層學習到了影像邊緣特征,第二層學習到了簡單形狀特征,第三層學習到了目標形狀的特征,網路深度增加也提高了模型的抽象能力,網路寬度的意義:網路的寬度(通道數)代表了濾波器(3維)的數量,濾波器越多,對目標特征的提取能力越強,即讓每一層網路學習到更加豐富的特征,比如不同方向、不同頻率的紋理特征等,
7,所有 Inception 模型都具有一個重要的性質——都是遵循 拆分-變換-合并(split-transform-merge) 的設計策略,
8,對于某種指令,延遲 latency 主要關注單條該指令的最小執行時間,吞吐量 throughout 主要關注單位時間內系統(一個CPU核)最多執行多少條該指令,因為 AI 計算的資料量比較大,所以更關注吞吐量,
9,CPU 高性能通用優化方法包括:
- 編譯選項優化
- 記憶體性能和耗電優化:記憶體復用原則,小塊快跑是記憶體設計的重要原則,
- 回圈展開:回圈的每次迭代都有一定的性能損失(分支指令),但是現代 ARM 處理器具有分支預測的能力,它可以在執行條件之前預測是否將進入分支,從而降低性能損耗,這種情況下全部回圈展開的的優勢就減弱了,
- 并行優化和流水線重排:并行優化分為多執行緒核與核之間資料處理,以及單核心內部并行處理,從本質上講,流水線重排也是一種并行優化,
10,卷積性能優化方式:卷積的計算方式有很多種,通用矩陣運算(GEMM)方式有良好的通用性,但是僅使用 GEMM 無法實作性能最優,除 GEMM 外,常用的優化方法還包括滑窗(Sliding Window)、快速傅里葉變換(Fast Fourier Transform, FFT)、Winograd 等,不同的方法適合不同的輸入輸出場景,最佳的辦法就是對算子加入邏輯判斷,將不同大小的輸入分別導向不同的計算方法,以最合適的方法進行卷積計算,
- 大多數情況下,使用滑窗方法的計算性能還是無法和
GEMM方法比較,但是一般當輸入小于 \(32\times 32\) 時,可以考慮采用滑窗的優化方式, Winograd是存在已久的性能優化演算法,在大多數場景中,Winograd演算法都顯示了較大的優勢,其用更多的加法運算代替部分乘法運算,因為乘法運算耗時遠高于加法運算,Winograd適用于乘法計算消耗的時鐘周期數大于加法運算消耗的時鐘周期數的場景,且常用于 \(3\times 3\) 卷積計算中,對于CPU,一般來說,一次乘法計算消耗的時間是一次加法計算消耗時間的6倍,FFT方法不適合卷積核較小的CNN模型,
11,下圖展示了如何在英偉達 GPU 架構發展史以及單塊 GPU 上縱向擴展以滿足深度學習的需求(截止2020年),

12,Deep compression 論文閱讀總結
deep compression是解決存盤問題,對于速度問題幾乎沒獲得改善;- 權值剪枝還得看另外一篇論文:learning both weights and connection for efficient neural network
- CNN 模型的存盤空間問題,主要還是在全連接層,若要改善
inference速度,需要在卷積層下功夫,
13,Deep Compression 論文介紹的神經網路壓縮方法,可分為三步:
- 剪枝:舍棄權重絕對值較小的權重,并將剩余權重以稀疏矩陣表示,
- 量化:將剪枝結果進行進一步量化,具體的是構建一組權值碼本,使模型中的權值共享碼本中的其中一個權重值,以減少每個權重保存所需的位元數,
- 霍夫曼編碼(可選):通過霍夫曼編碼,進一步地壓縮索引值以及權重數值地存盤空間,
參考資料
- DeepLearning Tutorial
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538381.html
標籤:其他
上一篇:輕量級模型設計與部署總結
