Adrien
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # DLCV Exam - Share # 109 年 ### 1. (15%)1 為什麼卷積神經網路 (CNN) 的卷積層所運算出來的資料是 “特徵” ? 特徵的意義是什麼 ? 為什麼辨識 (recognition) 或分類 (classification) 要比較特徵,不能直接比較兩張影像的相似度 (similarity)? **--- 啟恩 ---** 在CNN中每張圖片都會經過許多的kernel運算,在影像處理中也通常稱作為遮罩。這些kernel的做用就是找出圖型中的某些pattern,像是直線的pattern,或是橫線的pattern。而由許許不同的kernel所算出來的結果,也可以看作看圖片上尋找不同的pattern,這些pattern就叫做「特徵」。而在深度學習中,這些特徵不再只是簡單的直線、橫線、邊…,而是複雜的概念,這些複雜念是由機器自己去尋找的。 而特徵的意義就是指圖片經過kernel後的數值大小,如果結果數值大就為特徵明顯處,結果數值小就不為特徵處。 一張影像會有一個特性:就是一些特徵點通常會出現在圖片中的不同位置,例如車子,可以在畫面的最左邊也可以在畫面的最右邊。如果直接把影像拿來比較,就等於失去了影像特徵點可在不同位置的特性,做出來效果一定不好。 :::warning --- 仲瑜 做卷積運算可以想成是在尋找適合的權重值,我們會希望影像經過這些權重值的運算之後,能夠幫助我們更容易地去辨識物件或是分類。而影像經過權重值的運算結果就被我們視為是一種特徵,這個特徵會依照我們指派任務去做適當的適應與變化,也因此比傳統影像特徵的定義更加的抽象與不易理解。 相同的物件可能會有不同角度不同背景等等因素存在於不同影像當中,因此在做辨識與分類時,我們需要依靠物件的特徵來做確認會比較準確,單純依靠兩張影像的相似度容易被外在因素干擾,導致錯誤的辨識與分類結果。 ::: **--- Adrien ---** 要更詳細的話,感覺還要再去和傳統的特徵擷取來做比較 (Ch1 p.28) CNN 的 "特徵" 不具有物理意義,他的特徵是依靠各神經元學習而來的權重值的輸出,即是深度學習的特徵,但因為是靠 "學習" 而來的,因此比較不直覺,且相較於傳統特徵也比較不容易修改 影像的內容太豐富,且物體所在的區域也有影響,一張貓在右上角的圖片 和一張在貓在左下角的圖片,這兩張圖並不相似,但因為 CNN 具有共享權重和平移不變性的效果 (Ch2 p.5),因此使用 CNN 擷取出來的 "特徵" 是相似的 :::info --宇 特徵是依靠個神經元權重值的輸出所獲得的,會依照我們所輸入的權重等去做適度的修改,使得權重輸出更符合我們所需的任務,不過他不具有物理意義,也就代表著特徵不直覺、不容易理解、不容易被修改。 每張圖的大小、像素、背景、前景都不一樣,像是狗有白狗黑狗,但是直接做辨識分類會分出不同的結果,因此就是需要做 CNN 提取出影像當中的特徵,如上面所說特徵是依靠神經元權重輸出取得,就算圖片不一樣,但提取出來的特徵會相似狗這邊。 ::: ### 2. (15%)2 說明卷積神經網路使用激發函數 (activation function) 與池化 (pooling) 的目的。可以不用嗎,會怎樣? 學過的激發函數好像都差不多,會對結果有多大的影響 ? 為什麼 ? **--- 啟恩 ---** Activation function的目的有以下:加強數值的非線性組合(ReLU)、加強數值與數值之間的差異性 (softmax)、壓縮結果到一數值之間(sigmoid)。 Pooling 的目的有以下:加速網路速度、減少網路運算量。因為一張影像有一個特性,就是放大縮小不會差太多,因此可以在保留原圖重要的像素並捨去不重要的像素,可達到減少運算的效果。 當然可以不用,但在在一些情況下如果做了會有更好的結。因為activation function 會是針對一些特定的網路有特定的果效。 像是加上 ReLU 可以使神經元是負值的地方為 0,也就是比較不重要的神經元,這樣在做 backpropagation 的時候可以直接乎略掉它,使網路backpropagation更快更有效。或是加上 Sigmoid 加強數值在 0 ~ 1 之間的差距,當數值超大或超小時結果差不多,但當數值介於 0 之間,就會加大它們的差異。 如果沒有做以上的 activation function 的話有可能會出現,特徵數值對比不明顯、因為weight太大或太小而導致梯度爆炸等等… :::warning --- 仲瑜 使用激發函數可以加強輸出數值的差異,也可將我們資料進行強化對比的效果,讓模型能夠更穩定的完成訓練。 池化可以降低影像或特徵空間的資料量,可以減少網路餐數量的計算時間,也會丟棄一些過度重疊的資訊。讓網路不會過度重視影像的確實位置,也就是能容忍偵測及辨識對象的位置及大小的變異。 激發函數通常是一種非線性的轉換過程,由於現實生活中所蒐集的資料變化差異性不好掌控,也因此導致模型的訓練上產生困難,因此現今通常會透過激發函數來強化資料之間的對比,以此讓我們的網路能夠更快速的學習,且容易優化系統。 若我們的資料量很大,會建議繼續使用池化的功能,而目前池化層的功能也已經漸漸被卷積神經網路的stride2給取代,原因是stride2與池化效果相近,但是stride並沒有運算過程,因此速度會快一些。 因此我認為激發函數與池化功能未必一定要做使用,而是依照我們應用所需來做適當的取用,來讓網路模型達到更好的效果即可。 ::: **--- Adrien ---** 激發函數: 激發函數通常會接在神經元的後面,用以轉換輸出的函數值,比較特別的是激發函數是一個非線性轉換函數,這是和以往的影像轉換技術特別不一樣的地方,因為以前的影像轉換技術 (像是 二值化、平滑化) 多為單純的線性轉換,而加入激發函數後的神經網路能對影像有更多的轉換,也就能學習到更豐富的特徵;此外,激發函數也有強化對比的功用。 池化函數: 池化函數最主要的目的是想要在僅損失少許過度重疊的資訊下 非線性地降低影像或特徵空間資料量,並且讓卷積核的 receptive field 範圍變大,只是也理所當然地會降低解析度。 此外,還可以容忍偵測及辨識對象的大小及位置的變異,因為特徵的確實位置沒有大略位置來的重要,因此過度重視確實位置反而會造成過度擬合 (overfitting) 的問題。 不過因為做 stride 2 也可以達到和 pooling 一樣的效果,而且 stride 2 比 pooling 的運算量少,因此後來的神經網路漸漸以 stride 2 代替 pooling。 不同的激發函數的確會對結果造成不同的影響,但影響並不會非常大,而且也沒有哪一個激發函數一定能在所有情況的表現都最好,仍然要看網路架構以及要做的任務而定。 :::info --宇 激發函數只要是為了強化對比,將輸出進行非線性轉換,主要是因為在資料集中變化差異太大,因此在訓練上會比較困難,所以使用激發函數可以容易將資料有明顯對比,可以更輕易的去學習,並且若不做激發函數則輸出內容會是線性函數,這樣就失去了學習的效果。 池化可以將過度重複的資訊整合壓縮或是丟棄一些不重要的資訊,可以減少運算時間,不過目前池化早已不再被使用,取而代之的是使用stride為2的卷積,因為是在進行卷積時將步幅加大,可以不需要計算,可以大幅減少計算時間。 我認為不一定需要做使用,主要是看網路架構以及資料集,像是他人的架構適合做池化但自己的做起來效果很差,所以需要多做嘗試來找到最適合該模型較好的效果。 ::: ### 3. (15%)2 交叉熵 (cross entropy)、KL 散度 (KL divergence)、softmax、及sigmoid 常被應用在損失函數中,請比較 - i. cross entropy 與 KL divergence 的差別 - ii. softmax 與 sigmoid 的差別。 (可先各別說明各項目的意義,再比較這些項目在應用上的差別及優缺點)。 **--- 啟恩 ---** Cross entropy 在計算兩個向量的相似度,計算期望向量與實際向量的相似度 為一類別實際的機率值乘上預測出來的機率值取 log 最後取一個負號,出來的意義為一個類別的 entropy ,可看做為一個類別機率的資訊量。當這個資訊量越大代表越不可能發生,資訊量越小代表經常發生,因此 entropy越大越代表兩個機率相似,加上負號是為了付 loss function 的定義 (越小越好) KL divergence 又叫相對熵,是用來測量兩個機率的「不相似度」 其實就是 cross entropy - entropy 與cross entropy相反,兩機率值越相,KL divergence越小 Softmax vs sigmoid Softmax 有放大「小數值」之間差異,縮小「大數」之間的差異的特色。 特色為會把全部值的機率壓縮到 0~1之間,且相加等於 1。 可以用在單獨只需要預測一個值出來的網路。因為各機率間彼此相關,彼此相加等於 1。 Sigmoid 有放大「小數值」之間差異,縮小「大數」之間的差異的特色。 特色同樣為會把全部值的機率壓縮到 0~1之間,但彼此機率不相關。 可用在多機率輸出的網路,因為機率彼此獨立,所以可能會有多個機率高的結果。 :::warning --- 仲瑜 i. cross entropy 是用來分析兩個機率值分佈的相似程度,可以比較我們期望輸出與模型輸出兩個向量是否相似,以此來對模型進行修正,若兩個向量越相似,cross entropy就會越小,也就是兩個機率分佈差異越小。 KL散度 用來分析兩個機率分佈的不相似程度,與cross entropy的差異之處在於,KL散度會去扣掉自己的機率分佈,以此避免自身分佈的影響,也因此被稱為相對熵。KL散度越小,表示兩個機率分佈越相似。 我認為KL散度的定義會比cross entropy來得合理一些,兩種機率值在做相似度比較時,先去除掉自身影響因素會比較符合常理。 ii. softmax 會先用指數函數(exp)放大每個元素,加強每個元素之間的對比之後,接著做正規化,將每個元素的範圍都介於[0,1]之間,且這邊所有元素的總和為1。 sigmoid 會將我們輸出值正規化到[0,1]之間以代替機率值,這邊不保證所有輸出值的總和為1,只是單純增加判別的對比性去做的正規化。 兩種都是為了增加判別的對比性所做的函數,差別在於它們最後輸出元素總和是否為1,因此softmax輸出的值可視為一種機率值,而sigmoid就無法表示為一種機率值。 ::: **--- Adrien ---** i. cross entropy 是在分析兩個分布的相似程度,若兩個機率分布越相似,則 cross entropy 會越小 KL divergence 是用來度量兩個分布的不相似度 KL divergence = cross entropy - entropy Reference: https://www.ycc.idv.tw/deep-dl_2.html ii. softmax 和 sigmoid 都會強化對比,都會將輸出值的範圍正規化在 [0, 1] 之間,但是 softmax 最後的總合為 1,而 sigmoid 則未必,因此 softmax 的輸出可以用來代表機率值,但是 sigmoid 不行 :::info --宇 i. cross entropy 是用來分析兩個機率值的相似程度,cross emtropy 越小,則代表機率分佈差異越小,兩者越相似。 KL散度與 cross entropy 相反,是用來分析兩個機率分布的不相似度,不過對於KL散度它會扣掉與自己的機率分佈,避免過度相似,被稱之為相對熵,相對熵=交叉熵-熵。 對於KL散度比 cross entropy 來的好一點,畢竟在計算機率差異時會將自己的機率分佈扣掉,因為自己與自己差異一定是最少的,所以這樣對於計算會比較合理一點。 ii. softmax 會將輸入的元素進行正規化,將輸出範圍訂在[0,1]之間,並且所有輸出值相加起來為1。 sigmoid 與 softmax 類似,將輸入元素正規化在[0,1]之間代替機率值,以增加判別對比性,不過所有輸出相加不為1。 兩者都是為了判別所做的函數,差別在於 softmax 可以代表為機率,因為輸出相加為1,但是 sigmoid 並不是機率。 ::: ### 4. (15%)2 偵測 (detection) 與辨識 (recognition) 的效果都可以使用 mAP (mean average precision) 當做評估準則;請各別說明偵測與辨識的 mAP 意義;與 precision 或 recall 的比較,請說明 mAP 的優缺點。 **--- 啟恩 ---** 算出 IoU Intersection of union,如果大於個threadhold就是1否則為0。每一個 iteration 會算出一個precision 以及recall的值,接著把值畫在 PR curve底下的面積就為 AP,而 mAP則為全部的 iteration 加總起來取平均。 舉老師投影片的例子 ![](https://i.imgur.com/JNHfjVN.png) 接著依照confidence score機率的信心程度排序,算出各個 precision 以及 recall Precision 代表為:找出的是不是我要的 / 除以找出來的數 Recall 代全為:找出的是不是我要的 / 除以正確的總數 ![](https://i.imgur.com/aLx3QK9.png) 與物件偵測不同的是這個沒有 Recall 因此是由 top-k 來決定 recall 在物件辨視中如果沒有 top-k 就不太需要用到 mAP 而 mAP的優點為可以了解網路在框 IoU時的效果,分析出IoU框得最符合真實資料的網路。 缺點為:理論上 AP 應該是要一個絕對遞減的曲線,但因為我們考慮的 recall 並不是一個連續的曲線,因為 AP 會受到 recall 數量不足而上上下下的,因此後來有了很多新的方法 IAP 以及 AAP :::warning --- 仲瑜 precision 是"正確判斷有"與"判斷有"的比值。 recall 是"正確判斷有"與"實際有"的比值。 precision 與 recall 是彼此消長的關係。 定義上mAP會經過多次查詢後,取多次搜尋的AP計算平均值來表示查詢或檢索系統的準確度,而一個AP是根據n個正相關候選項目,其所出現的順序計算出具體的衡量指標,因此這邊AP與正確答案的出現次數與順序都有關係。 物件偵測的mAP是precision,recall及IoU的整合結果。檢測系統是否偵測到物件是用IoU來做判定的,而後續評估準則只會去計算檢測系統偵測到的物件(positive cases)來做計算。在計算precision與recall之前,會先將偵測出的物件依照信心分數大小做排序後才進行計算。利用precision與recall的結果畫出PR-curve,圖中的面積就會是此次偵測的AP,多執行幾次後取多個AP結果的平均值就會是mAP。 辨識會先將所有物件依照信心分數去做排序,接著會有多重門檻值篩選出"正樣本"。最後一樣會畫出PR-curve並計算出AP值。 mAP是一個常被使用的評估準則,而他的計算過程與正確答案的出現次數與排序都有關係,但是在偵測與辨識任務上,我們只會關係有無偵測到或分類正確與否,並不會去在乎其正確答案排序問題以及不同門檻值出現幾個正確答案,因此一般在做物件偵測與辨識的時候會使用accuracy,precision,PR-curve等等來做評估,不需使用mAP的方法。 ::: **--- Adrien ---** 偵測與辨識的 mAP 意義。 (我還真的不知道他們之間的意義有甚麼不一樣) > Ch2 p137: 一般辨識問題的評估,大都使用 accuracy > Ch2 p138: 一般偵測問題的評估,大都使用 mAP > > 不就是說辨識問題不太用 mAP 嗎? precision 是 "正確判斷有" 與 "判斷有" 的比值。 recall 是 "正確判斷有" 與 "實際有" 的比值。 precision 與 recall 是彼此消長的關係。 AP (Average Precision) 是依 "正確結果要優先出現" 的概念所定義的具體衡量指標,所以 AP 與答案出現的次數和次序都有關係。mAP 則是經過多次查詢後,取所有的 AP 來計算平均值,用以表示整體的準確度。 偵測: 首先會用 confidence score 來排序,接著以 IoU 來判定是否有偵測到物件,再來算 precision 和 recall 時只會考慮 positive cases,也就是 TN, FN 都不會考慮,最後將算出來的 precision, recall 畫成 PR-curve,AP 的值即是 PR-curve 下的面積。 而通常偵測任務不會只偵測一種物件類別,因此 mAP 即是將所有所有偵測物件類別的 AP 的平均值。 辨識: 會先將物件依照 confidence score 排序,接著選擇多重門檻值篩選 "正樣本", > 依照第一句話可以算出一個 AP,所以辨識的 mAP 是將多重門檻值算出來的 AP 做平均得到的? 還是是多種的辨識種類的 AP 做平均得到的? 比較: AP, mAP 的結果都與正確答案的出現次數及排序有關係,不過在視覺偵測與辨識應用上,只需要考慮有無偵測到、分類是否正確,不需要考慮排名,因此視覺偵測與辨識應用的評估準則用 accuracy, precision,PR curve, ROC curve 即可,不需要使用 AP, mAP。 :::info --宇 偵測: 先對 confidence score 的大小排序,接著有無偵測到是用 IoU 判定,而後續評估準則只會去計算檢測系統偵測到的物件來做計算,利用 precision 與 recall 的結果畫出 PR-curve,圖中的面積就會是此次偵測的 AP,多執行幾次後取多個AP結果的平均值就會是 mAP。 辨識: 先將物件依 confidencescore 排序,接下來選擇多重門檻值篩選 “正樣本”,之後畫出 PR-curve 用來計算 AP。 precision = 正確判斷有/判斷有 recall = 正確判斷有/實際有 AP, mAP 的結果都與正確答案的出現次數及排序有關係,不過在視覺偵測與辨識應用上,只需要考慮有無偵測到、分類是否正確,不需要考慮排名。 ::: ### 5. (15%)3 一個只有辨識 (recognition) 功能的卷積神經網路,怎麼變成也具有語意分割 (segmentation) 功能的卷積神經網路;說明內容包括 - i. 加入或改變怎樣的功能模組及 - ii. 分割與辨識的聯合執行步驟。 **--- 啟恩 ---** 語意分割的意思是:把最後一層特徵圖用同一類的像素把它用同一個顏色來表示得出的圖片。也可說就是在把像素做分類,但「不具偵測物件的功能」 一個單純的辨識網路在這裡可看做為一個「解碼器」,「解碼器」經過層層卷積downsampling得到特徵圖,接著在解碼器後面可在後加上「編碼器」,經過許多的 upsampling 把最後一層的特徵圖長寬慢慢的放大,最後編碼為一張圖片。 :::warning --- 仲瑜 i. 以往做辨識功能的卷積神經網路時,都是針對一張影像去做分類辨識,而轉變成語意分割功能的重點在於卷積神經網路會去針對每一個像素去做分類,可以視為一種像素級的分類。除了在解碼端有不同詳細程度的解碼過程之外,有些網路架構會將編碼端的資料傳給解碼端做使用或是額外增加注意力模組(attention module)來協助解碼。 ii. 將影像輸入至編碼器擷取特徵後,每個像素有所有類別的機率值,找出其最大值的類別輸出,以此完成分割與辨識,最後利用多階上採樣或反卷積運算來獲得像素標記的預測圖。 ::: **--- Adrien ---** 將只有辨識功能的網路最後面的全連接層拿掉,改用卷積層取代,可以再加入上採樣或是反卷積,還原成原來的解析度。 甚麼叫 "聯合執行步驟" 阿?? 我猜是要叫我寫,將辨識編碼過程中不同階的特徵的資訊傳給分割上採樣過程的步驟,就是 skip connection 的東東。 :::info --宇 由於辨識功能是針對一整張影像去做分類辨識,而語意分割是針對每個像素去做分類,不具備偵測物件的風格,給予解碼端不同的解碼程式即可獲得不同的分割功能。 ::: ### 6. (15%)3 比較一階段與二階段偵測網路 (one-, two-stage detection network) 的差別;包括網路架構、訓練程序、偵測程序、效果、與效率。 **--- 啟恩 ---** 網路架構: 一階段偵測網路,通常是把分類偵測合份成一個網路,將件偵測成一個迴 歸,有點像是把loss function 把兩個合併在一起計算。 二階段偵測網路,則是分為兩個網路各別訓練,會先訓練偵測網路,再利用偵測網路的結果來訓練分類網路。 程序: 一階段網路會在 loss function 上就定義好全部的東西了,像是 BBox 的位置、大小,以及預測信心程度、類別…等等,網路會直接根據 loss function 去調整結果。 而二階段網路會先訓練一個網路用來找出在一大堆Anchor Box中哪一些是最能框到物件的,再把這些框到的結果放進辨識網路中去辨識屬於哪一類 效果: 二階段的效果比一階段好 效率: 但是一階段的效率比較高,二階段的計算比較複雜一點 :::warning --- 仲瑜 二階段偵測網路會先訓練偵測才訓練分類,偵測與辨識是分開獨立去訓練的。二階段偵測網路會先在輸入影像中找出可能的物件區塊(region proposal),接著再針對前面所找出的物件區塊擷取特徵,最後依照這些特徵去做分類。以較有名的網路Fast R-CNN為例,它將建議區域網路(region proposal network, RPN)與Fast R-CNN做結合應用,得到一個完整的偵測卷積神經網路。此網路需要先訓練RPN來偵測出疑似物件的矩形框及物件機率值,RPN會以sliding window方式滑動整個特徵圖,過程中會找出k個錨框(anchor boxes, AB),每個錨框會產生一個特徵向量,將此特徵向量傳給兩個全連接層,分別是做偵測框的位置及大小擬合(box-regression)與類別分類(box-classification)。RPN當中的每個錨框位置輸出一個二元類別標籤用以判斷是否為物件,訓練過程中只會去訓練偵測出正樣本的錨框。 一階段偵測網路會同時訓練偵測與分類,以目前較有名的網路YOLO系列為例,作者們將像素依類別機率及矩形框位置匹配成一個個物件。此種偵測網路會先將輸入影像分成SxS個方格(grid),每個方格都會預測B個矩形框(bounding boxes, BB),每個矩形框會有它的座標位置、長寬及信心分數(IoU)共5個值,且每個方格還要設定C類類別的機率。 一階段與二階段偵測網路在架構上較大的差異就是有無RPN的網路模型。 一階段的誤差會同時考慮偵測與辨識的誤差,而二階段的誤差則是偵測與分類個別考慮。一階段的損失函數因為是同時考慮,有可能是偵測的誤差很小辨識的誤差很大,但因為同時考慮,所以總體誤差只要在可接受的範圍之內就會被認為正樣本,因此導致準確度下降。 因為二階段偵測網路需要先找出所有可能的物件框,才對這些物件框去做分類,導致過程中浪費很多運算資源與時間的花費,效率也因此較差,但準確度高。而一階段偵測網路是一次完成偵測與分類的任務,因此效率高,但準確度會稍微低一點。 ::: **--- Adrien ---** 網路架構、訓練程序、偵測程序、效果、與效率。 二階段偵測網路顧名思義就是整個偵測的過程分成兩個階段,第一階段是先選取建議區域 (偵測),第二階段是根據這些被選取的建議區域來做分類 (辨識)。舉相對來說比較成熟的 Faster R-CNN 為例,首先會將原圖通過一個 CNN 做擷取特徵,在第一階段會利用產生的特徵圖訓練一個 RPN (Region Proposal Network) 模型,他是一個用來做偵測的全卷積網路,偵測的方式是用 sliding window 的方式,每個 sliding window 可以產生 k 個 anchor boxes,他會輸出兩組數值,一組是這個物件的矩形框數值,另一組是這個是否為物件的機率值;第二階段會訓練 Fast R-CNN,將經過 RPN 所產生的高品質建議區域與由 CNN 產生出來的特徵圖一同輸入,來進行最後的物件偵測與分類。 RPN 與 Fast R-CNN 的訓練程序可以使用交錯訓練的方式,也就是一次只訓練一個部分,另一部分的參數值會固定,且不斷地輪流下去,舉例來說可以先訓練 RPN,再利用他提出來的建議區域訓練 Fast R-CNN,Fast R-CNN 的訓練結果再去更新 RPN 的建議區域,一直不斷地輪流下去。 一階段偵測網路就是將偵測任務和分類任務合成一個任務來做,更具體一點是變成一個迴歸任務,這個回歸的目的即是要去預測類別的機率以及舉行框的位置。 舉一階段網路比較有名的 YOLO 系列為例,首先會先將圖片分成 SxS 個方格 (grids),每個方格要預測 B 個 Bounding boxes (BB),每個 BB 都會需要預測它的舉行框位置,而類別預測的部分會根據不同版本的 YOLO 而有差別,YOLO v1 是每一個 grid 會去預測分類類別,YOLO v2 以後則是每個 BB 都會去預測類別;後續的 YOLO v3, v4 則主要是改進網路讓速度以及效率提升,像是 YOLO v3 加入 residual block, FPN, YOLO v4 加入 CSP dense block, Self-Adversarial Training (SAT) 等,不過最主要的偵測與分類的概念都是一樣的。 -- 效果與效率我就略過拉 :::info --宇 網路架構: 一階段為同時訓練偵測與分類 二階段會先訓練偵測,之後才是訓練分類 程序: 一階段將像素依類別機率及矩形框位置匹配成一個個物件,同時對物物件框進行偵測分類 二階段主要會先偵測出所有可能的物件區塊,再接著對這些區塊擷取出特徵 效果: 二階段效果比較好,因為在 loss function 時一階段他是兩項誤差加在一起的,所以有時誤差一個很大一個非常小,但是相加沒有超過設定的值,那這時的效果就比較差了。 效率: 一階段效率會比較好,因為二階段偵測網路需要先找出所有可能的物件框,才對這些物件框去做分類,導致過程中浪費很多運算資源與時間的花費。 ::: ### 7. (15%)3 比較生成對抗網路 (GAN)、自動編碼網路 (AE)、與 “AE+GAN” 三者在架 構與意義上的差別,並說明為什麼 GAN 不容易訓練 ? **--- 啟恩 ---** GAN 是輸入一段亂數向量,經由Generator upsampling 出一張影像,再經由 Discriminator去與它對抗使 Generator 效果再好一點。 而 AutoEncoder 則是先輸入一張影像,經過許多 MLP後得到這張影像的特徵向量,再依據這個向量重新upsampling回一張影像。也就是說AE 有解碼端,可以去找出圖片中的特徵用這些特徵來生成圖片。 AE+GAN 則是結合了兩者的優點,解決了 GAN 在應用上的問題,從原本的輸入一段亂數向量改為輸入一張圖片,多了許多影像風格轉換…等應用。 GAN 不好訓練有幾個原因: 沒有一個評估標準可以去判斷這個網路生出來的圖片真不真實,最後都還是要用人眼去觀察。 Generator 與 Discriminator 的相互抗衡很不好控制,也就是在 loss function 中D同時要最大也要最小的問題。如果今天Discriminator 太強,Generator就學不到東西,如果太弱 Generator 又不會進步,因此如果使 Generator 與 Discriminator 一起變強是 GAN 最難的地方。 :::warning --- 仲瑜 GAN 希望透過隨機亂數來生成影像,藉由訓練來讓亂數向量與影像樣本之間擁有對應的關係,而亂數向量內並沒有對應影像的特徵。GAN主要由生成器(generator)與判別器(discriminator)所組成,生成器會盡可能的生成影像來騙過判別器,而判別器要盡可能的判別出真假影像,因此雙方會互相對抗來增強彼此的能力。 AE 主要用於資料降維及擷取特徵,他可以藉由訓練獲得影像的特徵並且編碼成潛伏向量,可以視為一種非線性版的PCA(principal component analysis)。AE主要由編碼器(encode)與解碼器(decode)組成,通常編碼與解碼會設計成對稱的架構。 GAN與AE架構上的差別就在於是否有判別器(是否擁有對抗功能)以及兩者的編碼解碼順序剛好相反。因為AE缺少判別器,導致其解碼器無法越來越優秀,也因此沒辦法生成較好的結果。 AE+GAN 前面有提到AE與GAN的編碼解碼順序相反,AE是先編碼再解碼,GAN則是先解碼再編碼,因此我們將兩者的解碼作為兩個架構的串接點,形成AE與GAN的結合應用。 AE會先經過編碼器得到影像的特徵再輸入給GAN去做使用,而單純的GAN原本所輸入的亂數向量是與影像特徵沒有對應的關係,最後透過判別器去加強生成器的訓練結果,判別器的部分則是原本AE所沒有的內容。 GAN的運作方式是希望從少資料變成多資料,也就是想要嘗試無中生有,這明顯會比多資料變成少資料困難許多。若目標函數定義不好,可能導致模型訓練無法收斂或網路模式崩潰(輸入不同的資料但生成的資料都相同)。 ::: **--- Adrien ---** skip :::info --宇 GAN 的構想是使用隨機亂數生成影像,當中主會有兩個網路,其中一個為生成器,用來 ::: ### 8. (15%)3 下列兩模組,一是一般卷積,一是分支卷積,都一樣產出相同大小及個數的 特徵圖;請說明一般卷積模組與分支卷積模組產出的特徵圖有哪裡不一樣 ? 並且各別計算兩模組的乘法數 (所有 feature map 解析度都是 32x32)。 ![](https://i.imgur.com/lonqmCN.png) **--- 啟恩 ---** 把特徵圖分群後,每個特徵圖皆只與自己那一群的特徵相關而已,相關性比原本的 3x3 64 還要少,線性組合數也比原本的少,因此計算量降低,但可以說有做分支的為沒有做分支的子集合 沒有分支的計算量超大,彈性也很高。 有分支計算量少,特徵彼此的相關複雜度降低 沒做分支的乘法數: (32x32) x 64x64 x (3x3) 有做分支的乘法數 ((8x8) x (3x3) x (32x32)) x 8 :::warning --- 仲瑜 pg.85 ResNeXt block 一般卷積是尋找所有特徵圖之間的關係,但是分支卷積只會對各自分支當中的特徵圖去做運算,因此分支與分支之間是互不相關的。 (輸入特徵圖數x輸出特徵圖數x解析度大小x卷積核大小) 一般卷積 : 64x64 x 32x32 x 3x3 分支卷積 : 8 x (8x8 x 32x32 x 3x3) ::: **--- Adrien ---** 一般卷積: (3x3) x (32x32) x 64 x 64 分支卷積: ((3x3) x (32x32) x 8 x 8) x 8 分支卷積可以看成一般卷積的子集合;分支卷積會先把特徵圖分群再去做卷積,而被分群後的特徵圖,群和群彼此是無法做相關性運算的,只有同一群內的特徵圖可以做相關性運算,也就是能參考到的特徵圖數就會比較少,複雜程度及關係性也比較低,但運算速度比一般卷積快很多 --- # 108 年 ### 1. (15%) 比較卷積神經網路 (CNN) 與統計式機器學習 (statistics-based machine learning) 方法在演算法及效果上的差異 (最好劃一表格,對比式的比較)。 :::success --- 仲瑜 卷積神經網路是由類神經網路演化而來,透過卷積運算進行特徵擷取,接著會送入分類器進行分類。 統計式機器學習利用已知的數學運算對我們輸入的資料進行分類,較為有名的演算法是利用群聚分佈或迴歸模型等等,而輸入的影像特徵都是由人工去做篩選所得。 演算法上的差異: 卷積神經網路的變化較為複雜,不易想像模型內的運作細節,因此要修改演算法(網路架構)也不容易。在特徵擷取任務上不需要人工的參與,可以節省許多不必要的人力資源,但模型的訓練時間可能因此拉長 ; 統計式機器學習是由統計學已發展出的方法去對資料做規律的運算來得到最終結果,對於演算法調整較容易修改。在特徵擷取上需要人工去對資料進行特徵擷取,會耗費大量的人力成本,模型因為已經有一套規律的數學運算,因此訓練過程相較於卷積神經網路可能較不耗時。 效果上的差異: 影像特徵的擷取是影響模型效果中的一個重要因素,卷積神經網路是透過卷積運算進行特徵的擷取,因此可以擷取出較細節的影像特徵,能夠提高模型最後分類與偵測的準確度,運行速度通常較慢 ; 統計式機器學習的影像特徵是人工去做篩選,可能是較為粗略的影像特徵,因此準確度不易提升,運行速度通常較快。 ::: :::danger --- 蔡杰 演算法比較: 卷積神經網路由數個卷積層形成的特徵擷取器配合全連接層構成的分類器所組成的模型。 統計式機器學習從資料中自動分析獲得規律,並利用規律對未知資料進行預測。 效果比較: 卷積神經網路功能強大,在牽涉到特徵擷取、分類、辨識、分割等應用時,效果比統計式機器學習好,但在牽涉到方位、幾何、顏色、運動等度量或精算時效果不會比較好。 例如在瑕疵檢測應用上,統計式機器學習可以透過修改演算法的亮度、色彩、幾何、或紋理等特徵的參數,改進目前檢測不良的問題,而且執行速度快;但卷積神經網路必需藉由修改影響神經網路模式效能的各種因素,例如訓練資料、網路架構、各種函數及演算法、超參數的設定、訓練的外加策略等因素,才有可能改進檢測不好的問題,而且許多方面應用的執行速度不夠快。 ::: --- Adrien --- ### 2. (15%) 說明卷積神經網路之深度與廣度的意義及深度與廣度的取捨 (也就是深 淺、廣窄的優缺點)。 :::danger --- 蔡杰 深度:卷積層的層數 越深層的卷積運算範圍涵蓋原始影像的面積越大,在物件偵測與辨識上,要大一點的區域才能顯露該物件的穩定特徵,就要用多層的網路架構。 廣度:特徵圖的張數 越複雜的影像區塊內容,應該擷取越多的特徵才足以偵測背景複雜的物件或分辨多種不同的物件。 增加深度和廣度,都是在增加可學習參數的個數,從而增加網絡的擬合能力,但當深度過大的時候會比較難訓練,因為有梯度爆炸和梯度消失的問題,而廣度過大時,可能導致過度擬合。 參考 https://www.zhihu.com/question/53976311 ::: ### 5. (15%) 比較下列兩模組的差別,包括計算組合種類數、乘法數、及相關性。 ![](https://i.imgur.com/B6fvjF0.png) :::success --- 仲瑜 ![](https://i.imgur.com/t8zUarW.png) ::: ### 6. (15%) 比較 squeeze-and-excitation network 與 pyramid attention network 兩個網路模式在 “注意力” (attention) 作法上的不同 (至少兩點不同之處) :::danger --- 蔡杰 ::: ### 7. (15%) 比較特徵金字塔網路 (Feature Pyramid Network, FPN)、YOLO v3 (You Only Look Once v3)、與 SSD (single shot multiBox detector network) 三個網路在偵測功能上的相同與不同之處。 :::danger --- 蔡杰 ::: ### 8. (15%) 說明生成對抗網路 (GAN) 與自動編碼網路 (Autoencoder) 的差別,包括 架構與效果,並且說明 GAN 在影像轉移 (translation) 或轉變 (transfer) 上,如何訂定目標函數 (objective function) 或損失函數 (loss function)。 :::danger --- 蔡杰 損失函數部分(from ppt 因為我好像沒聽到這部分) 在影像生成或轉移的應用中,使用L1 orL2損失函數容易產生模糊的影像;也就是L1 or L2適合擷取低頻資訊,但無法獲得細微變異的高頻資訊。因此為了獲得高頻資訊,本研究強迫關注每一個小區域內的細微變異,因而設計一個特殊的判別器稱為 PatchGAN;它僅判定各別小區塊(patch)真假,再平均所有區塊的判定結果做為判別器的最終輸出結果。 目標函數則定義為 ![](https://i.imgur.com/g70WQeU.png) 其中 ![](https://i.imgur.com/qpXbOEx.png) 輪流各別訓練判別器 (D) 及生成器 (G)。對D而言,第一項極大值是要訓練 D 得真實影像y;第二項極大值是極小化 D,表示要訓練D知道經由G所轉成的G(x, z)不是期望的轉移影像。對G而言,只有第二項極小值,相當於極大化D,表示訓練G的目標是讓D認為G所轉成G(x, z)是期望的轉移影像。 與 ![](https://i.imgur.com/Eq6ELBc.png) 目的是要求G(x,z)與y盡量相似的目標函數 :::

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully