FCN關於loss下不去的問題
相信剛學caffe,跑FCN模型的時候都遇到過loss下不去的問題,用的明明是給定的數據集和模型的啊,本人也是新手,在這個坑裡爬了好久,終於在學弟的指導下(捂臉)解決了這個問題。
簡單說大家直接用官方給的caffe FCN代碼的時候應該會碰到報錯fc6層shape mismatch,然後網上看到有人說要把fc6層改為fc6_new,其實也算是對的,但是fc6層可是有102760448個參數啊,那麼低的學習率不知道要學到猴年馬月了,然後看vgg16model可以看到fc6層是全連接的,而fcn裡面用的卻是卷積層,這不是坑爹嗎。
解決方法:使用surgery.py裡面的transplant函數
以siftflow為例,在siftflow-fcn32s裡面,原始的solve.py是這樣拷貝權重的
weights = ../ilsvrc-nets/vgg16-fcn.caffemodel
solver = caffe.SGDSolver(solver.prototxt)
solver.net.copy_from(weights)
這樣會丟掉fc6的參數,應該改為
vgg_weights = ../ilsvrc-nets/VGG_ILSVRC_16_layers.caffemodel
vgg_proto = ../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt
solver = caffe.SGDSolver(solver.prototxt)
vgg_net = http://caffe.Net(vgg_proto, vgg_weights, caffe.TRAIN)
surgery.transplant(solver.net, vgg_net)
del vgg_net
其中VGG_ILSVRC_16_layers.caffemodel是下載的vgg參數
VGG_ILSVRC_16_layers_deploy.prototxt是模型,可以在Visual Geometry Group Home Page下載到,網頁中搜索 16-layer model ,後面的連接就是
https://gist.githubusercontent.com/ksimonyan/211839e770f7b538e2d8/raw/0067c9b32f60362c74f4c445a080beed06b07eb3/VGG_ILSVRC_16_layers_deploy.prototxt
可以看到211839e770f7b538e2d8和參數caffemodel的數字是一樣的
另外也有vgg16_conv的,有學長給了我一個,但是他也忘記從哪裡下載來的了- -,有興趣的可以找找看,那個網站裡面沒仔細看不知道有沒有,有知道的評論個鏈接吧
然後上圖,我跑的siftflow的結果
順便提醒下新手們,solver.py裡面有個
也就是跑50*2000,和solver.prototxt裡面max_iter: 300000不一樣的- -,也就是只跑100000不會跑300000
結果害我只保存了60000的結果,上圖
可以看到32s跑出來的效果果然不是很理想啊,可以慢慢繼續跑16s,8s
最後,感謝一起交流的大夥,感謝實驗室學弟的幫忙,
有興趣交流的可以加入我之前加的一個FCN討論群,當然都是新手為主- -希望能有大佬加入幫主大家啊,感謝!!
QQ群560233379
———————————————略有違和的分割線—————————————————
怕有些人那個連接打不開,VGG_ILSVRC_16_layers_deploy.prototxt直接貼在評論了
還有測試單張圖片的話,複製一個train.prototxt,然後吧輸入層改成voc-fcn8s裡面deploy.prototxt的輸入層就行,再把最後的loss層去掉(siftflow有2個loss層:sem的loss和loss_geo),然後打開infer.py,把out = net.blobs[score].data[0].argmax(axis=0)中的score改成score_sem或者score_geo,最後加上
plt.imshow(out)
plt.show()
來顯示圖片
輸入層
layer {
name: "input"
type: "Input"
top: "data"
input_param {
# These dimensions are purely for sake of example;
# see infer.py for how to reshape the net to the given input size.
shape { dim: 1 dim: 3 dim: 500 dim: 500 }
}
}
推薦閱讀: