前言
目前人工智慧領域越來越受到大家的關注,因此人工智慧演算法工程師也漸漸浮出水面,成為應徵網站上一個非常耀眼的職位,各種創業投資也緊緊圍繞著AI 主題旋轉。
我認為目前人工智慧演算法工程師主要分為兩種。
■ 科學家型:主要研究前端演算法,在各大大專院校和企業的研究單位居多。
■ 工程師型:主要將最新的演算法應用到實際的業務場景,在企業開發部門居多,為本書主要針對物件。
人工智慧演算法按特徵學習的深淺分為機器學習、深度學習,另外也有強化學習方向。按應用場景則可分為:電腦視覺、自然語言和語音處理等。
撰寫本書主要緣由如下,筆者在學習機器學習和深度學習的過程中,發現理論方面的書籍十分豐富,包含周志華老師的《機器學習》與Ian Goodfellow 的《深度學習》;教學視訊也十分豐富,包含史丹佛大學吳恩達教授的CS229 與李飛飛教授的CS231,以及台灣大學(National Taiwan University)林軒田老師和李宏毅老師的課程。但是很少有關於一個方向(例如電腦視覺)比較豐富的工程應用書籍,包含目前主流架構的綜合介紹,筆者當時從理論到實作走了不少冤枉路,也踩過不少雷,故希望本書能在這個方面做出一點小小的貢獻,成為理論與實作的橋樑,讓讀者相對容易地邁出由0 到1 的那一步。
本書主要重點在電腦視覺領域,以開放原始碼專案為基礎介紹最新的演算法,在此也感謝各位開放原始碼人士,借助他們的成果,我們學習到了很多知識,本書各章主要內容如下:
■ 第 1 章:對深度學習與電腦視覺進行簡介,也會簡單介紹開發環境的架設。
■ 第 2 章:主要介紹 OpenCV 的基本操作及部分進階操作,包含人臉和人眼的檢測與識別。
■ 第 3 章:注重介紹目前常用的幾種深度學習架構,包含 PyTorch、Chainer、TensorFlow-Keras 和MXNet-Gluon,另外本書中偶爾還會用到ChainerCV 和GluonCV。
■ 第 4 章:對影像分類進行了介紹,包含經典的網路類型(VGG、ResNet、Inception、Xception、DenseNet),並展示了部分實作操作。
■ 第 5 章:對目標檢測與識別進行了介紹,包含三種主流的網路結構:YOLO、SSD、Faster R-CNN,並展示了實作操作。
■ 第 6 章:介紹影像分割技術,主要從前背景分割(Grab Cut)、語義分割(DeepLab 與PSPNet) 和實例分割(FCIS、Mask R-CNN、MaskLab、PANet)三個說明。
■ 第 7 章:介紹影像搜索技術,主要指以圖搜圖方面(CBIR),以及對應的實作展示。
■ 第 8 章:主要介紹影像產生技術,包含三個大方向:Auto-Encoder、GAN 和Neural Style Transfer。
電腦視覺是一個非常大的方向,有關的內容非常多,本書只介紹其中部分領域,未涵蓋OCR、目標追蹤、3D 重建和光場等方面的內容。
本書針對的主要是已經擁有機器學習和深度學習基礎,但在電腦視覺領域實作較少,對各個方向了解較少的讀者,其他有興趣的讀者也可作為科普讀物。希望本書能為電腦視覺有興趣的讀者開啟一扇窗戶,帶領大家邁出從理論到實作的關鍵一步。另外由於筆者學識、經驗和能力所限,書中難免有錯誤或誤解的地方,歡迎讀者們批評指正。
閱讀本書需要的基礎知識儲如下:
■ 線性代數
■ 機率論
■ 統計學
■ 高等數學,主要指函數方面
■ 機器學習
■ 深度學習
■ Python 程式設計技術(特別需要熟悉 Numpy 函數庫)
■ Linux 基礎知識(可選項)
如果在學習過程中遇到任何問題或不太了解的概念,最好的方式是透過網路尋找答案,請相信我們所遇到的問題,有很大一部分是大家都會遇到的問題,網上說不定已經有了詳細地討論,這時只需要去發現即可;如果沒有找到對應的解決方法,那麼在對應的社區提問也是很好的一種方式。
希望讀者在閱讀本書時,謹記電腦是負責資源排程的,永遠會有時間資源和空間資源的平衡問題。GPU 的使用就是平行利用空間換取時間,而IO 密集型與計算密集型則是另外兩個常常遇到的問題。在做深度學習方面的實作時,這些問題都應該要考慮,特別是面臨巨量資料的時候,例如上億等級的影像搜索業務。這些知識在電腦作業系統的書籍當中有非常詳細的論述,如果讀者希望在電腦領域有長足的發展,本書是最基本最重要的書籍,建議好好學習。
本書的完成,要特別感謝王金柱編輯給予的幫助和指導,感謝體貼的妻子體諒筆者分出部分時間來撰寫此書。
讀者聯繫電子郵件:booksaga@126.com。
繆鵬