17年 | 重開blog | 關於對稱網絡的的一點想(kun)法(huo)

距離上篇blog已經一年又近半載了。這之間,遇見科研,遇見跑步,遇見她,遇見別樣的自己。

重開blog,重拾初心,一切都是剛剛好,重頭再來也沒什麼不可以。


往期文章和地址如下,歡迎同學們拍磚:http://blog.csdn.net/dp_bupt(16年的blog,看着都覺得是挺老的文章了……)

這裏寫圖片描述

最近在看DL網絡模型中的對稱網絡結構,主要關注了兩篇:

Unet——U-Net: [ConvolutionalNetworks for BiomedicalImage Segmentation]
Stacked hourglass networks——Stacked Hourglass Networks for
Human Pose Estimation

第一篇做生物醫學圖像分割,第二篇做人體姿態估計。但兩篇文章的網絡結構很像:

這裏寫圖片描述

他們的相似之處有如下三點:

  1. 結構對稱,成U型;
  2. 含有skip connection連接,底層和高層特徵有規律的融合;
  3. 均是原圖下采樣-上採樣至目標圖的流程,類似沙漏(hourglass)形狀。

當然,他們也有不同的地方:

  • 前者的單個方塊是Resenet block,後者就是簡單的卷積核;
  • 前者可以做多個類似結構的堆疊(如下圖),後者是單個U型;
    這裏寫圖片描述

相比傳統的從圖像到本文信息的端到端,從圖像到圖像的端到端更能找到落地的應用,比如圖像恢復(包括去噪、補全、合成、超像素增強等)、視頻幀預測等。

那我自己在這上邊想做哪些嘗試呢?我想借用這結構來做depth estimation。

首先,因爲hourglass結構相當於是UNet的升級版,所以直接用hourglass。其次因爲hourglalss的源碼是torch寫的,沒看過lua,所以就來了第一個任務:代碼移植(移植到pytorch中)。

這部分輪子造完後,開始在自己的訓練集上訓練。但因爲沒有預訓練模型,調參經驗有限,導致訓練模型的效果堪憂,所以就有了第二個任務:預訓練模型轉換。在模型轉換中遇到了讀寫的問題,因爲pytorch是基於torch內核改的,torch又是用lua寫的,而lua我真的不會……所以,至今沒有解決,感覺要跪。。。

對,就是torch model 轉pytorch model,誰知道咋整?求砸。。。不要告訴我這個鏈接https://github.com/clcarwin/convert_torch_to_pytorch,雖然對很多分類模型很管用,看着也很nice,但於我的問題依然是然並卵(我還去提問了,然而沒人理我……)

還有一個問題就是想把程序寫成多卡的。不寫不知道,一些還真有些停不下來……調blog。。。按目前的模型大小來看,單卡頂多跑batchsize=2的輸入,10w的數據一輪就要迭代5w次左右,每輪2h,跑個12輪,就需要一整天,這個速度絕對不能忍。多卡程序的難點在於需要將程序模塊化,方便調用和重複使用,有些層真的很難單獨寫……

當然,其實最早提出類似對稱網絡結構的是隨着Deconvolution的提出和其在圖像分割上的應用。也就是這篇:Learning Deconvolution Network for Semantic Segmentation,他的網絡結構如下:
這裏寫圖片描述
是吧,很對稱,像極了一個沙漏,只是它少了skip connetction而已。

Some insight:
Unet和hourglass網絡結果其實不僅長的像,其實各個部分都可以對應起來的,不信你看:

這裏寫圖片描述

(此圖的大致意思就是Unet裏的第一個conv層和hourglass裏的第一個up channel skip connection的resnet block對應;然後Unet的第一個pool+conv2層和hourglass的第一個pool+down channel resnetblock對應……以此類推,所以網絡結構改起來就很方便了~)

17年的第一篇bolg是來發泄吐槽的。後邊看到好的paper或者idea再來分享吧,前提是把這個坑先填上。。。


btw,17年CVPR的最佳論文是DensNet,相較於15年的Resnet,看着更加的暴力,但也更加work。愛因斯坦說:Everything should be made as simple as possible but no simpler。DL的網絡結構也是如此,看着是越來越複雜,其實結構總是複雜裏的簡單。
這裏寫圖片描述
(dense就體現在逐層輸出都會連接到其higher layer做輸入,更加充分的特徵組合。)

好的新鮮的idea都可以奉行「拿來主義」直接用了,畢竟一般都是你文章還沒看懂,人家源碼就已經公開了,而且還有好幾個不同框架的版本。所以,work不work,用上再說,真的work了,再去想想爲什麼和remain open的問題。接下來就打算試試這個Densnet了。(其實更想水論文。。。。)

老闆說:想法太多,train不出來,都是白想;train出的效果不能用,也是白train。所以今晚註定要加班了……