###### tags: `Edge AI` `Edge AI 期中論文報告` `從頭開始說的影像辨識` `論文解說+補充` # Towards Efficient and Data Agnostic Image Classification Training Pipeline for Embedded Systems **Reference: Kirill Prokofiev and Vladislav Sovrasov, "[Towards Efficient and Data Agnostic Image Classification Training Pipeline for Embedded Systems](https://arxiv.org/abs/2108.07049)," arXiv:2108.07049v1 16 Aug 2021** <font color=#808080>_前情提要--這篇論文主要是針對**優化既有模型**的方法著墨,文章裡優化兩個著名的影像分類模型--[MobileNetV3](https://arxiv.org/abs/1905.02244)以及[EfficientNet](https://arxiv.org/abs/1905.11946),而在本文章當中會從**影像分類的先備工具**開始介紹,然後是**模型優化**的幾種常見方式,最後呈現**論文的實驗結果**。_</font> :pencil: <font size=2>***小補充:論文當中著重將機器學習模型放到嵌入式裝置當中,所以需要具備`體積容量小`與`計算量少`的特點,所以預測準確度的標準不同**</font> <font size=2>***SOTA, State-Of-The-Art,指的是在該領域當中,目前最先進,表現最好的模型**</font> <font size=2><font color=dd0000>***由於篇幅問題,本文章當中部分專有名詞僅附上連結,沒有多作解釋**</font></font> ## I. 先備工具 ### A. 經典的資料集 **要如何判斷一個模型的好壞呢?** 直觀的想法就是預測準確度高、速度快,並且可以運用在各種情境下,然而**要如何判斷模型是否可以利用在所有的情況下呢?** 這個時候就需要利用一個標準來做比較,下面將會列出在影像辨識領域<font color=dd0000>**五大經典資料集**</font>: #### a. [ImageNet](https://www.image-net.org) 是一個大型視覺訓練專用的資料集,裡面包含了兩萬多個類別,並且有超過一百萬張已標註的影像。 <font size=2>***從2010年開始,每年都會舉行ILSVRC視覺辨識挑戰大賽**</font> ![](https://i.imgur.com/fFDCx30.jpg) #### b. [CIFAR-10](https://www.cs.toronto.edu/~kriz/cifar.html) 是專屬給機器視覺學習的圖庫,裡面有十種類別,六萬張的影像,分別為飛機、汽車、鳥、貓、鹿、青蛙、馬、輪船、卡車,以及狗。 <font size=2>***現在也有CIFAR-100的資料集,內有一百種的影像類別**</font> ![](https://i.imgur.com/1PHXJaR.png) #### c. [SVHN, Street View House Numbers](http://ufldl.stanford.edu/housenumbers/) 是一個搜集各式各樣戶外門牌號碼的資料集,裡面包含了不同地區、時間,以及天氣所拍攝的影像。 ![](https://i.imgur.com/HF3ILaG.png) #### d. [Caltech 101](http://www.vision.caltech.edu/Image_Datasets/Caltech101/) 是加州理工學院自己產生的數據集,裡面包含了101種類的影像。 ![](https://i.imgur.com/dcifH1g.png) #### e. [SUN397](https://paperswithcode.com/dataset/sun397) (SUN, Scene UNderstanding) 是一個用於場景理解(Scene UNderstanding)基準測試的資料集,內涵397種類。 ![](https://i.imgur.com/gq4JmXx.jpg) ### B. 經典的影像辨識模型 知道著名的資料集之後,在這個部分將會介紹影像辨識當中相當著名的<font color=dd0000>**四大模型**</font>: #### a. AlexNet 是一個卷積神經網路(CNN)架構,透過模型的深度來增加準確度,所以計算成本很高,在加入GPU的幫助之後,使其具有可行性,但仍不適用在嵌入式系統上。 <font size=2>***該模型在2012年ImageNet的ILSVRC大賽中以15.3%的「Top-5錯誤率」榮獲第一名**</font> **<u>架構</u>:** ![](https://i.imgur.com/TcVfmy4.png) #### b. ResNet 其中最大的貢獻就是 **「Residual」** 的概念(如下圖),這可以降低參數量並減少運算複雜度(,還可以避免次要特徵在深層網路會消失的問題)。 <font size=2>***依照模型不同的深度,可以分成ResNet18、ResNet34(一般的residual block),以及ResNet50、ResNet101、ResNet152(擴張為4的`Bottleneck Block`)**</font> **<u>架構</u>:** ![](https://i.imgur.com/u9shtki.png) <font size=2>***Bottleneck Block是利用中間加入Kernal(1*1 filter)來達到減少運算量,效果如下: 若是要將(28x28x192)的feature map利用(5x5)的filter,產生(28x28x32)的new feature map,則所需要的參數量是(28x28)x(5x5x192)x32 = 120M,而透過瓶頸層則可以縮減(28x28)x(5x5x16)x32 + (28x28)x(1x1x192)x16 = 12M**</font> ![](https://i.imgur.com/RJjzeCt.png) #### c. [MobileNet](https://iter01.com/590254.html) <font size=2>***separable convolution (可分離卷積),分為:</br>:one:空間可分離:將一個大的卷積核變成兩個小的卷積核 ![](https://i.imgur.com/9oZXQNf.png) :two:Depthwise separable convolution(深度可分離),透過改變Filter架構達到減少參數值的效果。其中包含DW, Depthwise_Convolution(上)&PW, Pointwise_Convolution(下),以原本的CNN方式計算parameters of filter會是(5x5x3x256=192000),而經過深度分離之後會變成(5x5x1x3+1x1x3x256=843)**</font> <font size=2>***Depthwise Convolution: Filter的深度為1,提取各個通道中的特徵**</font> <font size=2>***Pointwise_Convolution: Filter的面積為1x1,提取通道之間的特徵**</font> ![](https://i.imgur.com/6mY7yjo.png) ##### 1. MobileNetV1 **目標**:在保持**精確度**的前提,**減少參數量**與**模型複雜度**。 :one: **Width Multiplier(alpha)**:在每一層網路的輸入輸出通道數進行縮減。 :two: **Resolution Multiplier(rho)**:用於控制輸入和內部層表示,即用解析度因子控制輸入的解析度。 **<u>架構</u>:** ![](https://i.imgur.com/4QRMTwF.png) ##### 2. MobileNetV2 **目標**:考慮更多的特徵,增加準確度。 :one: **Inverted Residuals**:利用Pointwise可以擴增通道的特性,解決V1當中DW因前層通道數太少而影響特徵的提取。 :two: **Linear Bottlenecks**:即上述之Bottleneck Block。 **<u>架構</u>:** ![](https://i.imgur.com/Nwj84x3.png) ##### 3. MobileNetV3 **目標**:朝向輕,短,簡為目標。 :one: **SE Module (Squeeze-and-Excitation)**:一種輕量級的**通道注意力模組**,透過特徵提取,賦予每個通道不同的權重值。 :two: **NAS, Neural Architecture Search**:一種**自動化設計人工神經網絡**的方法。通過學習**通道之間的關係**,自動獲得每個特徵的重要程度,提升有用的特徵並抑制用處不大的特徵,提高網路所產生表示的質量。 **<u>架構</u>:** ![](https://i.imgur.com/EgQBuwk.png) #### d. EfficientNet 這是一個把**NAS**用到出神入化的一種模型(如下圖),他沒有絕對的形狀,而是透過NAS的方式進行探索,來決定模型的高矮胖瘦,以達到最佳化的**輕量化**與**準確度**。 ![](https://i.imgur.com/e6asehy.png) **<u>架構</u>:** ![](https://i.imgur.com/dLIwlna.png) ### C. 嵌入式系統 是一種具有**專一功能**以及**即時計算效能**的小型電腦系統,但在計算力及容量都比電腦少很多,所以要存入的內容物就有很大的限制。 ***BUT!*** **為什麼我們不把東西都放到雲端上呢?** 雲端的好處在本篇文章就不再多提了,但是為什麼 **「上雲運動」** 一直無法盛行呢?主要是**兩個原因**::one:**網路安全性**:two:**資訊延遲問題**,所以**邊緣運算**出現了! **邊緣運算**,將嵌入式系統裝置部署在本地端,**直接**做傳輸與計算。以下是<font color=dd0000>**常見嵌入式系統裝置**</font>介紹: #### a. [Arduino](https://www.arduino.cc) 因為**入手容易性**而聞名,是許多~~初踏進Maker坑的~~人會選擇使用的開發版,而在官網當中,有一個很友善的[專屬討論社區(免費)](https://forum.arduino.cc/?_gl=1*13s42fd*_ga*MTg3NTk4MjIwLjE2NDgyODExMjQ.*_ga_NEXN8H46L5*MTY0ODI4MTEyNC4xLjEuMTY0ODI4MTIyOC4w)可以和很多大神交流,也可以提出疑問。 ![](https://i.imgur.com/KWyfwD2.png) #### b. [Raspberry Pi](https://zh.wikipedia.org/wiki/树莓派) 是一種以ARM為架構的電腦處理器(單板微電腦),其宗旨是要以低價硬體,及[自由軟體](https://zh.wikipedia.org/wiki/自由软件)來促進學校的基本電腦科學的教育,操作環境是[UNIX](https://zh.wikipedia.org/wiki/UNIX)架構,而較多人使用的作業系統為raspberry自行開發的Raspberry Pi OS,或是Ubuntu。 ![](https://www.howtogeek.com/wp-content/uploads/2022/02/raspberry_pi_4_and_logo_hero.jpg?width=1198&trim=1,1&bg-color=000&pad=1,1) #### c. [ARM, Advanced RISC Machine](https://zh.wikipedia.org/wiki/ARM架構) 是一種處理器核心,我們較常接觸的是屬於低階系列--ARM Cortex-M。它是一種可程式的晶片,經常被使用在電源管理制器、輸入/輸出控制器、系統控制器、觸碰螢幕制器、智慧電池控制器以及感測器控制器。 ![](https://i.imgur.com/ziR4cTu.jpg) #### d. [FPGA, Field Programmable Gate Array](https://zh.wikipedia.org/wiki/现场可编程逻辑门阵列)(現場可程式化邏輯閘陣列) 以PAL, GAL, CPL所組成,由可程式化邏輯裝置為技術基礎,可作為「特殊應用積體電路」中的一種**半客製化電路**,既彌補全客製化電路不足,又克服原有可程式化邏輯控制器門電路數有限的缺點。 ![](https://i.imgur.com/gaqbA9t.jpg) ### D. ToolKit -- [OpenVINO](https://grady1006.medium.com/%E9%82%8A%E7%B7%A3ai%E7%B3%BB%E5%88%97-openvino-%E6%87%B6%E4%BA%BA%E5%8C%85-55f357ceae75) <font size=2>***OpenVINO, Open Visual Inference and Neural Network Optimization**</font> <font size=2>***工具包內容物: :one:Deep Learning Deployment Toolkit (DLDT), :two:Deep Learning Model Optimizer: 將從不同框架所訓練出來的模型做格式與參數優化轉換, :three:Deep Learning Inference Engine: 針對不同硬體做模型掛載的API接口, :four:Samples: intel自家開發的參考模型, :five:Tools: 模型的校正與量化以及準確度驗證, :six:Open Model Zoo: 是OpenVINO的子專案,裡面包含Pre-trained, Demo Application, Tools, 利用工具可以立即體驗應用, :seven:OpenCV, :eight:OpenCL™ version 2.1, :nine:Intel® Media SDK, :one::zero:OpenVX***</font> 是一個**免費**工具包,透過裡面整合的**常用函式**與**深度學習模型**以及強大的**硬體設備**,可以協助我們快速開發與驗證**電腦視覺**的應用問題。 ![](https://i.imgur.com/gt4xrdZ.png) #### a. 常用函式 <font size=2>***這裡提供了三種跨平台(Open Source)關於電腦視覺工具**</font> ##### 1. [OpenCV, Open Source Computer Vision Library](https://ithelp.ithome.com.tw/articles/10251665) 從初踏入影像領域小毛頭到熟練老手都會接觸到的工具,裡面包含許多**基本影像處理**的方法,是相當實用的Library。 ##### 2. [OpenCL, Open Computing Language](http://www.kimicat.com/opencl-1/opencl-jiao-xue-yi) 由用於**編寫Kernel的語言**與一組用於**定義並控制平台的API**所組成,是一個為異構平台編寫程式的框架,可用於CPU、GPU、DSP、FPGA或其他類型的處理器與硬體加速器所組成的平台。 ##### 3. [OpenVX](https://medium.com/@kobeyu/openvx-%E7%B0%A1%E4%BB%8B-b706fb868012) 對於電腦視覺跟類神經網路的應用提出的一系列API,其目的是讓異質核心的嵌入式系統達到最佳的執行效率,工作方法是作用在硬體語言與應用程式之間。 ![](https://i.imgur.com/gktLEYV.png) #### b. 深度學習模型 <font size=2>***這是intel(OpenVINO)提供之已訓練完畢模型範例可供大家使用**</font> :one: 人臉模型: 臉部偵測、頭部姿態、表情、特徵點、性別年齡辨識 ![](https://i.imgur.com/5Ta4Zfa.png) :two: 人體模型: 人員偵測、高角度人體偵測、行人屬性、跨影片追蹤、動作姿態辨識、骨架偵測 ![](https://i.imgur.com/DazuQrT.png) :three: 車輛模型: 車輛偵測、車牌辨識、車道線偵測、路面區域分割、車種辨識、路標號誌 ![](https://i.imgur.com/N8EF4PL.png) :four: 其他模型: 文字標籤偵測、高解析度 ![](https://i.imgur.com/t4rx4Mi.png) #### c. 硬體設備 在intel平台上可以使用其部屬的設備進行推論,包含CPU、GPU(內顯)、NCS、Movidius VPU、FPGA, 但不支援Nvidia和AMD的設備 ~~(競爭對手)~~。 **** **終於介紹完影像辨識(分類)的基本工具了**:confetti_ball: **`接下來要分享聰明通靈的方法(誤?),是說在訓練模型時最困擾的應該是「如何設定超參數(hyperparameters)」這個問題吧?在接下來的「模型優化」段落,就要來介紹如何聰明的選擇!`** **** ## II. 模型優化 :pencil: <font size=2>***泛化能力(generalization ability):機器學習模型有學習到`隱含在數據對背後的知識`,對於不同規律的數據經過訓練也能有適應能力**</font> <font size=2>***Robustness(穩健性)(魯棒性):系統在收到noisy或是uncertain的訊號時,仍然可以保持穩定的特徵行為**</font> <font size=2>***[TPE, Tree-structured Parzen Estimator](https://www.twblogs.net/a/5c86126ebd9eee35fc142801):是一種樹狀圖結構配置空間上的超參數選擇方式**</font> ### A. Learning Rate 指的是在優化模型參數時每次**移動步伐的大小**,**太大**會很容易錯過最佳化的地方;**太小**會拖延學習的時間,其中有<font color=dd0000>**三個重要的參數**</font> :one:**Initial Learning Rate**:初始設定。 :two:**Learning Schedule**:隨著時間,學習速率的變化公式。 :three:**Stopping Condition**:這是訓練加速的方法,設定一個足夠小(自己滿意)的Loss值,**達到目標後就不再學習**。 ![](https://i.imgur.com/ghut29R.png) <font size=2>***Steepest Gradient:梯度下降法(Gradient descent)是`學習率選擇`的基本概念,我們透過`方法`選擇一組參數,計算過後與真實情況相比後會得到誤差,若誤差值如下梯度圖,我們會選擇最快(steepest)到達最佳化之處**</font> ![](https://i.imgur.com/5jVTxn0.png) ### B. Data Augmentation(影像資料增補) 由前述可以知道在機器學習當中資料集是相當重要的,對於**數量較少**的資料會因為不平衡而損失精確度,為解決此問題有以下<font color=dd0000>**四種增加資料量**</font>的方法: :one:**Random Crop(隨意剪裁)**:將圖片隨機的剪裁,可以獲得**局部的特徵** ![](https://i.imgur.com/uidvwuY.png) :two:**Color Perturbation(顏色擾動)**:將整張圖片的顏色進行同種的**變色處理**,這可以使模型學習到**形狀的特徵**,而不是顏色的部分 ![](https://i.imgur.com/zu8zn8u.jpg) :three:**Rotation & Flip**:這是影像增補當中最常使用的方法,因為其的**可控性**,而且圖片的size也不需要另外做調整 ![](https://i.imgur.com/8qydEau.png) ![](https://i.imgur.com/VX0iPxL.png) :four:**數據增強**:綜合上述三種工具,這裡提出<font color=dd0000>**四種有效利用工具**</font>的方法 :large_blue_circle:**MixUp**:透過**將兩張圖像與標籤按權重逐像素相加,得到新樣本**的方法,改善機器學習模型**過度擬合**於輸入資料的問題 ![](https://i.imgur.com/NwCYPQo.png) :black_circle:**CutMix**:先利用**特徵熱力圖**找到最重要的特徵處將其剪掉,這個動作可以讓模型學習比較**難的特徵地方** ![](https://i.imgur.com/VCY7TLT.png) :red_circle:**FMix**:是MixUp的一種變形方法,在做**影像融合**的時候不是利用內插法,而是**將圖像轉換到傅立葉空間**,取得低頻的圖像之後再轉換回來 ![](https://i.imgur.com/rTNHrEF.png) :white_circle:**AugMix**:將影像進行多種**改造**後**疊合**在一起,避免新產生的影像無意義,所以會與原影像做**比對** ![](https://i.imgur.com/d6UJR2u.png) ### C. Regularization(正則化) 當模型訓練時的準確度太高就需要擔心**過度擬合**的問題,簡之就是模型只適合這群資料集,當在實際利用時準確度就會下降很多,這個時候就需要加入正則化,會使訓練與測試的準確度較為相近。 ![](https://i.imgur.com/8vfBJR5.png) ### D. Optimization #### a. Learning Optimizer ##### 1. SGD, Stochastic Gradient Descent 每個訓練樣本透過**隨機的梯度下降權重**可以更快地達到收斂,為了通過隨機梯度下降獲得準確的結果,以**隨機順序**呈現數據非常重要,所以每個epoch會打亂訓練集以防止循環。 ##### 2. SAM, Sharpness Aware Minimization 將真實的參數模型視覺化表示會像是左圖,透過SAM會先將整體**環境平坦化(Sharpness)** 再來尋找最佳點,如此可以有更好的**泛化能力**。 ![](https://i.imgur.com/rryioKh.png) ##### 3. AdaGrad 這是SGD的進階版,當次的學習率會**參考過去的行為**,如此可以增快前期訓練,到了後期也可以透過微調達到最佳化。 ##### 4. Adam 此為AdaGrad的進化版,是更有智慧的利用過去狀態,數值優化每次都會考慮到前一步的 **[動量(Momentum)](https://ithelp.ithome.com.tw/articles/10236554)**,如此除了可以加快訓練速度,亦可**跳脫Local Minima**。 ##### 5. AdamW 此透過 **正則化(L2)** 解決Adam泛化性不足的部分。 <font size=2>***若是上面的介紹比較難懂,筆者有找到一個很棒的網站,包含SGD->Adam的動圖會更好理解--[梯度最佳解相關算法](https://chih-sheng-huang821.medium.com/機器學習-基礎數學-三-梯度最佳解相關算法-gradient-descent-optimization-algorithms-b61ed1478bd7)**</font> #### b. Data Optimizer ##### 1. softmax 當輸入資料**數值差距不大**時會導致學習上的困難,透過此方法可以**拉大之間的差距**,使其特徵更加明顯。 ![](https://i.imgur.com/IwxY4Py.png) ##### 2. AM-softmax, Additive Margin softmax loss 這是softmax的強化版,除了將輸入資料分開之外中間還加上間隔(margin),這會使學習效果更加提升。 ![](https://i.imgur.com/wyCDy40.jpg) #### c. Compression ##### 1. Pruning 將權重較小的連結移除,除了減少記憶體容量,也可以避免過度擬合的情況。**</font> ![](https://i.imgur.com/hbKWJt6.png) ##### 2. Knowledge Distillation(知識蒸餾) 大模型將某種特定功能的知識傳遞給小模型來減少參數,有點像是老師教導學生的模式。 ![](https://i.imgur.com/3BzyhC8.png) ##### 3. Deep Mutual Learning 這打破知識蒸餾的層級與單向之關係,而是類似同學互教互學的學習的概念。 ![](https://i.imgur.com/WFRGD7f.jpg) #### d. Trick ##### 1. Fine-Grained Grid Search 不同於一般設定區間以隨機的方式盲找超參數,是一種有效率的**網格**尋找方式。 ![](https://i.imgur.com/QOuXvPl.png) ##### 2. ReduceLROnPlateau 一種衰降學習率的方法,用於模型訓練後期**成效都沒有好轉時,就進行一次學習率衰降**,如此有助於跳脫Local Minima朝向Global Minia。 ## III. 論文結果 本片論文利用時下最著名的light weight model -- **MobileNetV3** & **EfficientNet**透過前述的增強與優化方法,提升準確度與運算速度。 ### A. 實驗材料 #### a. 資料集 論文當中採用下圖之11種資料集來做測試 ![](https://i.imgur.com/LyyyoLj.jpg) #### b. 比對標準 mAP, mean Average Precision:這是評斷物件偵測(辨識)模型的一種標準,將每種類別的準確度計算後再做平均。 ![](https://i.imgur.com/rYPCRHt.jpg) ### B. 實驗結果 表格二是在比較**原始的模型訓練**與**加上模型優化**對於前述之11種模型的mAP,表格三為個別模型與資料集的評比。 ![](https://i.imgur.com/Tb8Fb4H.jpg) ![](https://i.imgur.com/hlCT98z.jpg) #### a. Baseline training length is **200 epochs**; **learning rate is annealed to zero with cosine schedule**; optimization is performed with **SGD with momentum**; training images are augmented with **random flip, random color jittering, random crop** and **random rotation**; **dropout with p = 0.2** is applied to the classifier layer; learning rate is set as an average of optimal learning rates obtained by grid search over all the 11 considered datasets for each model individually. #### b. Adaptive **maximum training length to 200 epochs**, **maximum amount of trials in TPE to 15 (each trial takes 6 epochs or less)**; **learn- ing rate search range** for **EffficientNet-B0 is [0.001−0.01]**, while for **MobileNetV3 the range is [0.005 − 0.03]**; **Augmix with a pre-trained** on ImageNet policy, **random flip, random crop and random rotation** are employed for data augmentation; **early stopping and learning rate decay patiences are equal to 5 epochs**; **ρ in SAM is 0.05**. **Weight decay is always set to 5 · 10−4**. Input resolution for all versions of the considered models is **224 × 224**, no test time augmentation is applied. ### C. Ablation Study #### a. 由上述模型進行拆解 經過測試我們可以得到比較好的準確度,而在這個部分將其**拆解**,來得知增加某個工具之後準確度的差異。 ![](https://i.imgur.com/4fIKpYB.jpg) <font size=2>***根據NBD這項進行其他參數的訓練結果**</font> ![](https://i.imgur.com/S8uM8fB.jpg) #### b. 其它 ##### 1. MobileNetV3 + Adaptive :one: Input datasets: CIFAR-100, DTD, Flowers, Cars, Pets, Caltech101 :two: Adaption: random flip, rotate, scale, and color jitt ![](https://i.imgur.com/6EntsHS.jpg) ##### 2. EfficientNet-B0 + Adaptive :one: Input datasets: CIFAR-100, DTD, Flowers, Cars, Pets, Caltech101 :two: Adaption: random flip, rotate, scale, and color jitt ![](https://i.imgur.com/21raYEI.jpg) ##### 3. (MobileNetV3 vs. EfficientNet-B0) + Adopting SAM(ρ= 0.05) ![](https://i.imgur.com/hBAwCcP.jpg) ##### 4. ReduceLROn-PlateauV2 scheduler 測試 :one: Input datasets: CIFAR-100, FOOD101, DTD, Flowers, Cars, Pets, Caltech101 :two: **cosine schedule** for **200 epochs**, all the cases **learning rate was fixed to 0.013**, **SGD** was set as an optimizer. ![](https://i.imgur.com/npDbcbH.jpg) :three: Distribution of optimal learning rates: 利用本篇題及之11種數據集找出最佳化學習率分布 ![](https://i.imgur.com/nvRQixs.png) ##### 5. 不同超參數選擇方法比較 (using MobileNetV3-large) :one: Input datasets: 本篇題及之11種資料集 :two: use **6 epochs per trial** and **restrict the number of trials to 15**, trials are conducted on **all the training data** ![](https://i.imgur.com/JMAyR5e.jpg) ##### 6. Different DML settings (using MobilenetV3-large) ![](https://i.imgur.com/JV2ZjCs.jpg) ## IIII. 補充資料 <font size=2>***MobileNetV3 vs. EfficientNet 的效能比較**</font> ![](https://i.imgur.com/yiGABuG.jpg) **** 結語 :pencil2: 這篇論文雖然**沒有新穎的想法**,但提供很多**工具**幫助我們**解決問題**,同時也讓我們學習到**做實驗的方法**,`另外,透過撰寫論文研讀總結文章,不僅讓我練習表達學習內容的能力,也在查詢資料當中加深了很多對於基本工具的認識`,最後在這裡提供在查詢資料時找到的**免費機器學習的教學網站**,提供大家參考 :sunflower: <font size=2>***[Fast-ai's Heuristic](https://en.wikipedia.org/wiki/Fast.ai):是一個非營利的組織,其專注於深度學習以及人工智慧,開放免費課程期望智能產業民主化,這裡是[官網連結](https://www.fast.ai)。**</font> ****