描述
內容簡介
AI影像深度學習啟蒙 : 用python進行人臉口罩識別
本書涵蓋的內容有
★線上平台COLAB使用教學
★本機電腦Jupyter使用教學
★基本運算、變數與字串
★串列、元組、集合與字典
★流程控制if else
★流程控制for與while
★函數、類別與物件
★資料夾與檔案處理
★txt、csv、json文件的讀寫
★基礎套件的使用
★Numpy的使用
★OpenCV的使用
★完整Tensorflow安裝流程
★Tensorflow的使用
★類神經網路(ANN)原理與實作
★卷積神經網路(CNN)原理與實作
★模型可視化工具Netron的使用
★口罩識別模型教學
★影像串流與實時口罩識別
這是一本想給非資電領域或初學者的入門書籍,內容從基礎語法開始,使用日常所見的比喻協助理解,在AI類神經網路的基礎部分,使用大家都熟悉的二元一次方程式來切入,多以圖表來說明概念,避免艱澀的數學推導,一步一步講解建立深度學習模型的步驟,書本最後還帶入口罩識別模型的教學實例,協助讀者從頭到尾完成一個專題,讓AI更貼近你我的生活。
作者
廖源粕
曾在在鴻海富士康手機研發部門擔任硬體工程師,因緣際會下,被主管指派學習程式的撰寫,控制周邊硬體,開啟了正式的程式撰寫之路
曾在工業技術研究院綠能所研究與開發Zigbee、Wifi無線控制模組進行智慧節能管控,產品導入台積電、台達電、神達電子等
自學Python與深度學習,目前為全職影像AI演算法工程師
目錄
CH01 作者自序與前言
1-1 作者自序
1-2 前言
CH02 安裝Python 與編輯環境
2-1 編輯環境的選擇: Colab 與Jupyter
2-2 Colab 的介面使用說明
2-3 Jupyter 的安裝
2-4 Jupyter 的使用
CH03 Python 的運算
3-1 print 函數與程式碼註解方式
3-2 四則運算
3-3 變數(Variable)
3-4 數值型態(Numeric type)
3-5 字串
CH04 流程控制之選擇結構 if else
4-1 前言
4-2 關係運算
4-3 邏輯運算
4-4 if else
CH05 串列List
5-1 前言
5-2 串列的使用
5-3 流程控制之重複架構 for 迴圈(for loop)
5-4 物件的簡單概念(Object)
5-5 常用的基本函數
CH06 元組(Tuple)
6-1 前言
6-2 元組的使用
CH07 集合(Set)
7-1 前言
7-2 集合的使用
7-3 使用Python 開發的應用或服務
CH08 字典Dictionary
8-1 前言
8-2 字典的使用
CH09 流程控制之重複架構while 迴圈(while loop)
9-1 前言
9-2 while 迴圈使用方式
CH10 函數(function)
10-1 前言
10-2 函數的使用方式
CH11 類別(class) 與物件(object)
11-1 前言
11-2 類別的定義與初始化
11-3 物件(Object) 概念
11-4 物件的宣告
11-5 建立類別的方法
11-6 繼承
11-7 建立私有屬性與方法
11-8 範例練習
11-9 預設屬性__doc__
11-10 特殊方法__str__() 與__repr__()
11-11 物件的銷毀
CH12 宣告的數值與字串也是物件
12-1 物件導向程式設計(Object-oriented programming)
12-2 宣告整數與浮點數物件
12-3 宣告字串的物件
CH13 常用基礎套件介紹
13-1 套件(package) 的定義
13-2 查看已安裝的套件
13-3 sys 套件的使用
13-4 math 套件的使用
13-5 random 套件的使用
13-6 time 套件的使用
CH14 資料夾與檔案的處理
14-1 前言
14-2 資料夾的處理
14-3 檔案的處理
14-4 shutil 套件的使用
CH15 檔案的讀取與寫入
15-1 前言
15-2 檔案的寫入
15-3 檔案的讀取
15-4 JSON 檔案
CH16 細說數值型態
16-1 基本單位
16-2 狀態多寡與位元的關係
16-3 數值與位元的關係
16-4 Byte 與Bit 的關係
16-5 KB, MB, GB 的關係
16-6 數值型態的介紹
CH17 Numpy 的介紹
17-1 前言
17-2 Numpy 套件的基本使用
17-3 常用屬性介紹
17-4 常用方法介紹
17-5 多維陣列進行不同維度的計算( 使用np.sum())
17-6 函數np.mean()
17-7 函數np.max() 與np.min()
17-8 函數argmax() 與np.argmin()
17-9 函數np.zeros()
17-10 函數np.zeros_like()
17-11 函數np.zeros()
17-12 函數np.ones_like()
17-13 相加函數np.add()
17-14 亂數函數np.random.randint()
17-15 排列函數np.random.permutation()
CH18 圖片的顯示
18-1 圖片的尺寸
18-2 灰階圖像與彩色圖像
18-3 灰階圖像的組成
18-4 彩色圖像的組成
18-5 圖片的格式
18-6 下載練習圖庫
18-7 OpenCV 的使用說明
CH19 類神經網路的介紹
19-1 人工智慧(Artificial intelligence) 其實只是統稱
19-2 機器學習(machine learning)
19-3 回憶二元一次方程式
19-4 從二元一次方程式到機器學習
19-5 類神經網路(Artificial Neural Network)
19-6 有趣的AI 應用
CH20 Tensorflow 簡介
20-1 什麼是Tensorflow
20-2 顯示卡的多核心優勢
20-3 Tensorflow 做了什麼?
20-4 安裝Tensorflow
20-5 匯入Tensorflow 套件
20-6 Tensorflow 與其他套件的相異處
20-7 如何看待Tensorflow
20-8 如何得到計算結果
20-9 張量(Tensor)
20-10 Tf.Graph() 的使用
20-11 GPU 資源的設定
20-12 如何使用程式碼設定GPU 的使用量
20-13 AI 的實際應用: 自動駕駛
CH21 資料集介紹(Introduction of datasets)
21-1 前言
21-2 匯入套件
21-3 Cifar10 資料集
21-4 Mnist 資料集
CH22 建立類神經網路
22-1 前言
22-2 匯入套件
22-3 匯入資料集Mnist
22-4 類神經網路
22-5 開始訓練
22-6 有趣的AI 應用
CH23 卷積神經網路的介紹
23-1 全連接層(fully connected layer)
23-2 更有效的圖像學習方式
23-3 卷積(convolution)
23-4 卷積的計算
23-5 卷積是全連接層的簡化
23-6 卷積的完整範例
23-7 Kernel 學到了什麼
23-8 彩色圖片的卷積方式
23-9 計算權重數量
23-10 Kernel 的張數
23-11 池化(pooling)
23-12 計算經過卷積後的尺寸
23-13 全連接層全然無用嗎?
23-14 有趣的AI 應用
CH24 建立卷積神經網路
24-1 前言
24-2 匯入套件
24-3 匯入資料集
24-4 資料集前處理
24-5 建立計算圖
24-6 宣告tf.placeholder
24-7 計算訓練的參數量
24-8 建立選取迭代資料的函數
24-9 計算損失值函數
24-10 計算準確率函數
24-11 關於Tensorflow 的權重檔
24-12 儲存PB 檔案的函數
24-13 設定超參數
24-14 建立訓練架構
24-15 訓練集的亂數排列(shuffle)
24-16 開始訓練與訓練結果
24-17 加深模型
24-18 加深模型的訓練結果
24-19 儲存準確率最高的PB 檔案
24-20 遷移學習(transfer learning)
24-21 儲存訓練的結果
24-22 模型可視化( 使用Netron)
24-23 使用PB 檔進行推論
24-24 找出驗證集分類錯誤的圖片
24-25 練習: 使用Fashion_mnist 資料集
24-26 練習: 使用Cifar10 資料集
CH25 口罩判斷模型之資料集的準備
25-1 前言
25-2 決定分類模型的類別數量
25-3 製作有戴口罩的圖片
25-4 口罩圖片的選擇
25-5 口罩圖片的解析
25-6 偵測圖片的嘴巴區域( 使用Dlib)
25-7 安裝Dlib
25-8 使用Dlib 找到人臉
25-9 嘴部區域與口罩的結合
25-10 製作訓練集與驗證集
25-11 有趣的AI 應用
CH26 口罩判斷模型之訓練
26-1 匯入套件
26-2 訓練集與驗證集的資料安排
26-3 讀取訓練集路徑
26-4 讀取驗證集路徑
26-5 讀取口罩集路徑
26-6 建立偵測嘴部區域的函數
26-7 建立嘴部區域與口罩結合的函數
26-8 建立訓練集的迭代資料函數
26-9 建立驗證集的迭代資料函數
26-10 建立計算圖
26-11 模型架構的差異說明
26-12 訓練結果
26-13 結果圖形化
CH27 影像串流與口罩判斷
27-1 前言
27-2 影像串流
27-3 影像串流結合口罩判斷
27-4 執行結果
CH28 安裝套件的步驟說明
28-1 使用Colab
28-2 使用Jupyter
序
推薦序
Johnny 是我們在念中學就認識的老友,一路上學習互相勉勵, 在數理與電腦
科學都十分投入的Johnny,從電子板端硬體開發一直到純軟演算法與AI 研
究, 下了不少心血與努力,非常願意分享軟體開發中AI 的知識內容,從之前的
Youtube 專題介紹讓讀者可以一步步漸進式學習,更集結大成整理出書真的很不
容易。
從不同面向學習AI, 即使是沒有開發過人工智能的讀者也能依照各章節理論與
程式碼範例,建構出書中的內容,類神經網路常用於論文研究,近年來大量導
入軟體開發當中,本書介紹的觀念正在現在與未來持續被實作著,車聯網,大
數據,智能音箱助理, 雲端伺服器... 等,各大領域都陸續前進著,我們的未來
正在變成現在。
不論是軟體新鮮人或是工作十多年的軟體工程師,都建議閱讀此書,有效率的
認識AI, 短期上能幫助實作在工作的上專案更能事半功倍,中長期上增進自身
的能力與價值, 非常值得透過這本書投資自己!
Intel 英特爾 Software Engineer, Jamie Chang
近年來人工智慧的發展相當快速,工研院綠能所也將相關技術應用於節能減碳
需求,如商辦的冰水空調系統,導入冰水設備全域優化控制系統,以負載預測、
設備能耗預測等方法,進行整體空調水系統最小能耗運轉。隨著工業4.0 發展,
過去部分產業大多仰賴老師傅經驗,導致技術傳承不易和品質不穩定,同時也
造成能源浪費,藉由開發製程參數優化技術,以人工智慧演算法在最短時間內
建立高度產線適應性之能耗與品質模型,加速實現智慧製造和節能技術。此書
內容很詳細,以實作搭配觀念,把人工智慧程式常用的、重要的內容鉅細靡遺
的說明,是一本相當適合踏入此領域學習的工具書,推薦給大家。
工業技術研究院 綠能所 智慧節能系統技術組 經理 趙浩廷
隨著生物醫學工程研究的應用需求, 科學家和學者們得到了很多重大進展, 也隨
著醫學信息量的提升, 高通量技術的資料應用在生物醫學領域中得到快速的推
進, 資訊技術對未來經濟與社會醫療發展具有重要的意義。例如: 在複雜的疾病
發展中,為了分析複雜的基因序列變異,如何在廣泛的基因體資訊中, 挖掘出變
異實體識別的資訊成為一項重要的研究內容。
近年來, 落實變異命名實體識別的任務主要採用基於規則、機器學習和深度學
習等方法 , 各種方法都有不錯的研究結果。另外, 隨著深度學習架構的創建,醫
學專業人員開始著手探索醫療資訊的專業辨識, 例如根據深度學習網路的預測
輸入和放射治療(RT)結構來解決醫學圖像的各種盲點。Python 語言的易於學
習與強大功能,可直接讀取與編輯DICOM 醫學影像, 節省醫療人員在深度學
習技術上, 對於資料預處理和預測步驟中的大量時間。本書作者利用上述熱門
的Python 語言, 由淺到深的引導讀者來撰寫程式, 其中各種常用語法的意義, 巧
妙地用一些例子讓讀者很快地明白如何使用, 是一本可以從無到有的Python 語
言入門書籍 從事教育事業多年的經驗上, 推薦相關研究工作者可以將此書作為
Python 語言的基礎教材, 推進Python 在深度學習領域中的更多應用
中國科學院大學 光電學院 副教授 陳靖容
強尼撰寫本書,用心之處在於將各種觀念用簡潔易懂的描述方式或是搭配圖示
幫助讀者理解。
除了每一章節開始前,用日常生活的案例來說明此章節的用途,幫助讀者對內
容的預先了解,對於初學Python 的讀者來說,是蠻好的入門教材。
而在進入深度學習基礎的類神經網路章節,無可避免的數學式,搭配用心的圖
示和程式碼的註解,簡潔易懂,對於想了解基礎的深度學習的讀者,應可獲得
不少收穫。
台積電 3DIC 設計部門 副理 鄭詠守博士
這本書非常適合入門者由淺入深的理解深度學習與機器學習,作者幫大家列出
了雲端資源Colab,可以不用自己安裝調試寫程式的環境,就可以開始寫出電腦
程式。在整本書中,可以看到非常多的範例與情境,將Python 的語法特色列舉
出來,經常是我讀到某處有疑問的時候,適合的範例就出現在下一段。
從19 章開始進入深度學習的介紹,裡面的比喻與一層一層漸進的說明,讓人不
知不覺就碰觸到較深入的觀念而不覺得艱澀,搭配實例的程式對比就可以輕鬆
實作。最後讀完才發現,電腦理解與學習的方式跟人類真是大不同。
不論只是好奇想要看看什麼是機器學習這樣時髦的詞彙,還是想要學習一門程
式語言進入資訊科學的領域,我相信在閱讀以及進一步練習之後都可以順利達
成。
半導體 化學製程 資深工程師 Luke Lin
我是一位AI 演算法工程師,目前在友達資訊部門研發AI 演算法,Johnny 是我
多年認識的朋友,我和他會一同討論演算法的原理、效能與應用情境,Johnny
總是專注在將一件事情變得淺顯易懂,以簡單的比喻來描述複雜的問題,此書
就是用簡單的說明來教學如何入門深度學習領域。
這本書是適合給想要入門深度學習領域的第一本書,第一次閱讀時讓我以輕鬆
愉快的心情複習了深度學習的基礎,尤其是在介紹卷積神經網路,總是以平易
近人的說明讓讀者了解原理,而非艱澀難懂的數學符號。而且除了原理也有提
供程式實作說明,讓完全不懂程式的人也能輕鬆上手。
不管你是想要入門深度學習的初心者或正在學習但苦於難懂符號的學生,不要
猶豫,這本書可以讓你豁然開朗,快速帶領你進門。
友達 AI 演算法工程師 李克耘
我是一位非程式控制背景的機械工程師,本身程式基礎薄弱,只有在大學時候
修過C++ 以及工作上偶爾用到matlab 語法,當每次想要下定決心好好學個程式
語言,往往因為書籍撰寫並未考慮到隔行如隔山的痛苦,每每在一開始進行後
很快就因為看不懂而放棄。一開始我只是基於大學好友情誼想說幫忙看看哪裡
有錯字,沒想到看著看著竟然能夠反饋哪個程式貼錯了,我想莫名其妙下我是
被帶領看懂而能進一步有所回饋,這實在是很神奇。隨著章節的帶領,我發現
語言這工具好像又更貼近了我一些,正好先前韓劇Start-Up 圍繞著AI 話題進行
故事時,讓我了解這個年代若是能善用程式來與電腦溝通,電腦將會義無反顧
地用他的運算速度來協助我們達到想做的事情。
這本書用口語將複雜的程式範例簡單化,尤其對於有點程式基礎的理工科學生
來說,更能夠很快被引領進入狀況,我也因為看了這本工具書,決定將我執行
分析重複性動作用Python 程式來取代,相信讓大家工作效率增加以及協助研究
歸納程式化是本書作者期待的。
立錡科技 封裝開發部門 研發工程師 林士傑
我是一個 DotNet 軟體工程師
幾乎沒有 Python 的開發經驗
也沒有 Tensorflow 的相關知識
而因為這次的機會
我按照了這本書的內容, 一步一步做
不只學會了 Tensorflow 的基本運作流程
也學會了 Python 大致上的常用語法
他同時讓我了解了 Python 和 Tensorflow 的強大
由此可知 Johnny 對這本書是多麼的用心
這本書真的很適合初學者
前面的章節會讓沒有 Python 開發經驗的人
一步一步的學會如何使用 Python
而後面關於 Tensorflow 章節和有大量的圖解說明
讓複雜的原理都變得簡單易懂
最貼心的是每個章節都有附上 Sample Code 輔助初學者快速上手
如果你是沒有 Python 開發經驗或是沒有 Tensorflow 相關知識
誠心推薦給你這本書
Johnny 為了初學者預想了很多狀況並且提供了解決辦法
確保你一定可以花最小的成本學會這些知識
軟體工程師 Allen Tsao
近幾年來,AI 在一些領域上有了重大的突破,很多應用也慢慢融入到我們的生
活中,像自動駕駛、圖像辨識、語音辨識... 等。本書作者使用最熱門的Python
語言與Tensorflow 框架來介紹。從開發環境的選擇也推薦初學者使用的平
台,詳細說明每個步驟,跟著作者的腳步可以減少前期摸索的時間;接著介紹
Python 語法並也提供程式範例,讓初學者更容易了解與使用;後幾個章節就帶
入深度學習的理論,此書用簡單的方式來描述複雜的理論,讓讀者在面對艱深
的數學函數或抽象的類神經網路也能輕鬆且清楚了解其中的原理。
這本書很適合對深度學習有興趣的讀者,在作者循序漸近的方式引導初學者了
解程式與理論,當你閱讀完本書會讓你不知不覺中進入到深度學習領域。
百漢應用 電控部經理 楊峻岳
作者自序
早期在學組合語言或C 語言,沒有太多參考資料與友善的介面下,花費大量時
間也不一定會有好的成果,挫折感其實會蠻重的,於是很多學生不想在午夜夢
迴因為程式碼而驚醒,紛紛選擇離開程式語言。
當然,我也不是上等聰明之人,學習時期的痛苦依然歷歷在目,心裡想著,計
算機這麼簡單使用,那程式語言應該也要像這樣簡單使用,讓大家都會用,才
能全面提升人類的工作效率
直到Python 出現,簡單易學加上友善的介面,讓非資電領域的學生與專家都能
夠快速地學習如何使用程式語言來輔助專題或工作上的效率
時至2021 年,Python 已經普及到各個領域,延伸出來的教學書籍也相當多元,
若現在的你剛好在書局,可以觀察一下Python 相關的書籍與其他程式語言的數
量比較
這幾年隨著半導體的進步,讓需要超大量計算的人工智慧有了大躍進,著名的
事件有:
2016 年AlphaGo 在全球超過兩百萬人觀看下,擊敗了韓國棋王李世石。賽後的
李世石說道:「我原本認為AlphaGo 只是能夠計算每一步機率的機器,但當我看
到AlphaGo 下的棋步後,我改變我的想法,它真的下的非常有創意!」
2019 年AlphaStar 在即時戰略遊戲星海爭霸2(StarCraft II) 中大勝人類頂尖玩家,
當時排名前十的職業玩家Grzegorz Komincz 表示,AlphaStar 在每場遊戲都採用
不同的策略,能以相當人性化的方式進行遊戲。
2021 年AlphaFold 可以從蛋白質的序列來預測蛋白質的結構,若能精準預測蛋
白質架構,就能夠知道蛋白質的功能,有助於開發治療疾病的藥物,這也意味
著人工智慧已經開始協助人類解開生命起源的秘密。
為了讓人工智慧普及,GOOGLE、FACEBOOK 等大型企業紛紛推出免費開源的
人工智慧框架,讓各行各業的專家能夠快速地應用。
本書的目的也是期望以比喻、圖說及程式碼解釋讓想學習程式語言與人工智慧
的讀者能夠輕鬆地學習,了解每個步驟的來由。
書中提供兩種方式進行程式的撰寫,一種是本機電腦安裝Jupyter 來進行程式的
撰寫,另一種是COLAB,同樣是以Jupyter 為基礎的開發介面,差別在於不用
下載安裝任何程式,直接開啟瀏覽器就可以開始你的程式撰寫,即使在咖啡館
也能夠優雅地寫上幾行程式碼
兩種方式的使用介面幾乎相同,也都是在瀏覽器上進行開發,讀者們可以依照
自己的需求來選擇,相當方便。
本書內容主要分成三部分
- 19 章之前是基礎的Python 語法認識與使用
- 19 ~ 24 章是類神經網路的理論、建立與訓練
- 25 ~ 27 章是專題實作,教導如何訓練能夠判斷是否有戴口罩的模型
撰寫此書的另一個初衷是要寫一本自己也會翻找的書,內容的安排就像是我的
自學歷程或是學習筆記,紀錄下我在學習期間的重點,哪天忘了也可以回去查
閱。
本書的教學程式碼請至以下載
z 出版社網頁的資源下載頁面
z 作者的 Github https://github.com/highhand31
希望這本書能夠為你打開人工智慧的大門~
Johnny 廖源粕
FB 粉絲專頁、Youtube 頻道請搜尋JohnnyAI