# U-Net Note ::: danger 紅色danger部分,代表我們還沒看很懂得地方 ::: ## Abstract: 依賴於annoted data(labeled data?)的data agumentation的訓練策略 包含: contracting path(把資料縮小的過程 ex 卷積)、expanding path(把資料放大,把縮小的資料還原原大小) 這個方法可以用少量的image做到比sliding network的卷積方式更好的結果 訓練一張512*512的圖只要不到一秒 --- ## Introduction: 傳統卷積網路,受限於avaiable data set的size,醫學上的data就很少。 傳統卷積常用作分類,只輸出單一label,但在醫學上,會希望附上localization(eg: label可以被標在pixel上,而非圖上) 2012年Ciresan等人,做了一個sliding-window CNN,然後把資料的每個pixel取一個local region(patch),再用patch去訓練。 這樣讓網路可以做到localization,並且能用的training data變得多很多。但是練起來會很慢,並且因為patch overlapping會有很多的redundancy(冗餘)。 另外,有個trade-off在於localization accuracy與use of context,大patch會導致需要更多max-pooling(池化)使準度下降,小patch則只有更小的context, 有很多更好的網路後來解決的這個trade-off問題 ---- 這篇paper建了一個fully CNN(把全連接層的部分,換成卷積),然後把裡面的pooling operator layer換成upsampling(反卷積(本文)、反池化等,可以增加data大小,在fully CNN常用的有FCN-8,FCN-16,FCN-32) operator layer :::spoiler unampling, copy&crop補充 關於upsampling:[link](https://zhuanlan.zhihu.com/p/359762840),裡面很詳細的介紹了各種反卷積反池化的方式,比之,下面的只是我隨便截幾張圖代表的 unpooling: 1:  2:  補充: 卷積實際上可以被換成矩陣的相乘(Y=CX),而反卷積就是反過來,乘以卷積矩陣的transpose矩陣(不過不會回復原圖,只是回復了矩陣的大小) [參考資料](https://zhuanlan.zhihu.com/p/48501100) [參考資料2](https://medium.com/ching-i/fully-convolutional-networks-%E8%AB%96%E6%96%87%E9%96%B1%E8%AE%80-246aa68ce4ad) 補充: [copy and crop的資料](https://zhuanlan.zhihu.com/p/42833949) 就是為了解決梯度消失而存在的 ::: 這份paper對於upsampling的一大修改是,擴增了feature channel(特徵深度,ex: RGB是3),讓他可以傳遞到更高的resolution layer(應該就是upsampling) 形成了一個U型結構  (小備註: feature channel會變深是因為用了多個捲積核,提取不同特徵後疊在一起的,有多深就是用了幾個捲積核) 這個網路沒有任何fully connected layer(因為全連接層是忽略空間訊息的,因為他就像是對於全局的捲積,是為了圖中再任意位置出現該有的特徵,就輸出對應結果,這不符合localization要得)。 [參考link](https://zhuanlan.zhihu.com/p/33841176) 卷積過程中,只使用完全在convolution之內的pixel(稱為 vaild part)[參考資料,卷積的valid mode](https://blog.csdn.net/leviopku/article/details/80327478) 在論文發出的當時,由於GPU記憶體比較小,所以如果圖太大,會把圖分割成好幾個小圖  如果遇到了在小圖的邊邊的問題,因為缺少上下文,他會使用鏡像反射複製一張input image作為context。 該網路是為了適應少量資料,所以他的data augment使用了elastic deformations(彈性變形,即用非線性的方式,模擬物理的彈性變化,做出很多張圖)。 另外,醫學上會面臨圖像中的細胞分割任務(cell segmentation,把一張圖上的兩個細胞分開來),該model使用了。該model利用把背景的loss權重調大來達成 --- ## Network Architecture  圖的左邊是contracting path,右邊是expansive path 左邊的結構就是傳統的CNN,基本上看圖就懂了,包含3\*3捲積、2\*2max-pool、Relu avtivation func,每次downsampling(pooling)之後,就會加倍feature channel 右邊,則是由2\*2 upsampling與3\*3 conv組成,並且每次upsampling後,會用conv降低feature channel 最後一層則把它一路捲積到剩下64時,用1/*1的conv把他的feature channel降維到2(希望的class數量) 總共進行了23次convolutional layer(作者應該把up-conv也算進去了?) 然後這個網路要挑選適當的image size,以確保每次pooling都是對於偶數size進行 可以看見,輸出圖比輸入圖還小,這是因為使用了卷積的valid mode,造成的-2導致的差異,[參考連結](https://blog.csdn.net/leviopku/article/details/80327478) 但這張圖似乎不是最終圖,為了解決圖片變小的問題,會使用前面講到的鏡像複製擴大圖片,然後讓最終的輸出跟原圖一樣 /* 鏡像複製好處除了不會縮放圖片,也可以適應全部大小的圖片,也可以調整輸出使其與原圖相同 */ [overlap-tile](https://blog.csdn.net/soaring_casia/article/details/110677745) 所以最終出來的圖應該長這樣  ## Training 用隨機梯度下降 為了最大化運用GPU memory,通常會偏好更大張的而非更大的batch 使用了高的momentum(0.99)(梯度下降的一個參數,會把一次梯度下降動的向量,再加上一部分的前幾次的向量,0.99代表被前面決定很多)(具體怎麼算窩不知道) 先解釋一些名詞: enery function: 應該跟loss function一樣 pixel-wise: 對於每個pixel逐一處理而不看整體 soft-max: 把pixel變成0~1之間的概率 該model的energy function是cross entropy loss function,然後他會對於final feature map用pixel-wise soft-max,也就是把要輸出的東西,變成是某個class的概率 這個model裡面的soft-max的函數長這樣:  $a_k(x)$是對於final map上x位置(x是二維向量)的pixel,把他的feature channel的第k個(第k個class)用activation function1變成0~1之間 $p_k(x)$是approximated maxiumn-function,是跟activation得出結果相似的函數,但比較好用來做energy function的計算 energy function則是:   L(x)是從x映射到(1~K)的函數,映射到該pixel的true label,形成$p_k(x)$,當$p_k(x)$越小,代表model預測是ture label的機率越小,log出來的值也就負越多。當$p_k(x)$==1,該處獲得的值為0 w(x)是用來調整不同pixel重要性的權重函數,因為log會引出一個負號,所以w應該會是負值? 然後w(x)會是使用者預先計算出來的weight map,當這個class很常在Ground truth map出現,他的weight絕對值會更低,反之則更高,用來讓model不會過度關注那些出現率高的class,而會去關注比較少出現的類別 同時,作者也在ground truth map中,不同class(這裡是寫不同的cell,我其實也不確定是不是不同class /* 應該是同class */ )的邊界設下更高的weight,讓model能夠更好的辨識邊界 此為w(x)的初始化的計算方式  $w_c(x)$是用來平衡class出現次數的function $d_1(x)$是離最近cell的邊界的距離,$d_2$則是離第2近cell邊界 在作者的實驗中,$w_0$設10,$\sigma$設5(pixel) /* 對於權重的初始化,理想是每一個feature map要有差不多unit variance(單位變異數) 他們是用Gaussian distribution with a standard deviation(標準差) of $\sqrt{2/N}$ ::: danger N是單一神經元所接收到的 feature數 * conv 舉例:3x3 convolution and 64 feature channels in the previous layer N = 9 * 64 = 576 */ ::: ### 3.1 Data Agumentation [w-r-p-error](https://cvinvolution.medium.com/warping-error-rand-error-and-pixel-error-in-semantic-segmentation-5cd561ba99cb) [warp-error](https://imagej.net/plugins/tws/topology-preserving-warping-error) pixel error: $與ground truth 不同的predict pixel / ground truth pixel$ N = (predict == GT) M = GT pixel error公式: $(M - N) / M$ warping error: pixel error的不在意細節版  先semantic segmentation 把 所有 pixels cluster into integer indexes a = X & Y (number of element pair in the same subset of (X clasifier,Y clasifier)) b = !X & !Y c = X & !Y d = !X & Y rand index (RI): = (a + b) / (a + b + c + d) = (a + b) / C(n,2) (n : element 數) rand error (RE): 1 — RI rand index = Dice Coefficient 的無視index重視cluster結果版  這張圖 Dice 低 但rand 高,在cell segmatation 中 分開細胞 > 分開不同類細胞,所以用rand較好 [Dice and IOU](https://cvinvolution.medium.com/dice-loss-in-medical-image-segmentation-d0e476eb486) 實驗中,作者使用了elastic deformaion,做法是把圖片分成好3 * 3為一格單位的網格狀圖,然後以一格為單位去做位移 位移的隨機變量samlping自標準差為10(pixel)的常態分佈 :::danger 然後使用bicubic interpolation(雙三次插值)計算每個pixel的偏移量 ::: 再contracting path的最後,還會有個dropout layer(隨機讓某些神經元的輸出為0,藉此讓data失去某部分訊息,用來強化魯棒性),也算是另類的data augmentation ## Exeperiment 這個model做了3個實驗 但我只看到兩個??? 1. 電子顯微鏡下的神經結構分割(segmentatiom) 2. cell segmentation 這段其實沒啥重要的 ## conlution U-net在bio-medical segmentation的表現非常突出 因為有elastic deformation,他可以只用很少的資料,以及合理的時間去訓練 [他人論文摘要](https://medium.com/@hyponymous/paper-summary-u-net-convolutional-networks-for-biomedical-image-segmentation-8df7b802281)
×
Sign in
Email
Password
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