日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FCN网络训练 SIFTFLOW数据集

發布時間:2024/9/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FCN网络训练 SIFTFLOW数据集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

論文全名:Fully Convolutional Networks for Semantic Segmentation


全卷積神經網絡 FCN代碼運行詳解:

運行平臺:

Ubuntu 14.04 + cudnn7

步驟1.代碼準備: 下載新版caffe: ? https://github.com/BVLC/caffe
下載fcn代碼: ? ? ?https://github.com/shelhamer/fcn.berkeleyvision.org 將下載后的壓縮包解壓 將解壓后的代碼丟進服務器
步驟2.編輯caffe和python接口: cd進入caffe所在路徑 以個人路徑示例:/home/my/caffe-master/caffe-master? 在該目錄下,執行 cp Makefile.config.example Makefile.configvim Makefile.config(這句代碼根據自己情況選擇,如果需要修改相關設定,就使用這句,需要注意的是,將WITH_PYTHON_LAYER := 1前面的#去掉如果使用cudnn,就把use cudann前面的#去掉我這邊安裝的是openbla,所以我的設置為BLAS:=open) make all -j8 //8代表線程數量,可以加快編譯速度 make test -j8 //編譯測試需要的文件 make runtest //開始運行測試例子,這一句貌似有沒有都行以上結束后開始編譯python接口 在下載的caffe源碼包中,有個叫python的文件夾,cd進入這個文件夾 以我個人路徑為例cd至?/home/wangkun/caffe-master/caffe-master/python 編譯python:
make pycaffe #測試是否成功 cd caffe-folder/python python import caffe #如果上述命令未報錯,說明成功 #添加caffe/python 到python path變量 vim ~/.bashrc #set the caffe PYTHONPATH export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH

!如果是采用的Anaconda python,切記編譯python接口在最后執行。

!如果是系統自帶的python在make pycaffe可能出現python/caffe/_caffe.hpp:8:31: fatal error: numpy/arrayobject.h: No such file or directory
這是因為64位的python 庫的存放路徑問題。

查找arrayobject.h所在的目錄:

sudo find / -name arrayobject.h

然后修改Makefile.config:

PYTHON_INCLUDE := /usr/include/python2.7 \/usr/lib64/python2.7/site-packages/numpy //這里修改成找到的路徑
以上,編譯結束,關于編譯python,由于我這邊服務器上使用的是Anaconda python,大家可以根據自己的實際情況進行python接口的編譯
步驟3.數據文件下載 下載siftflow數據集:http://www.cs.unc.edu/~jtighe/Papers/ECCV10/siftflow/SiftFlowDataset.zip 并解壓至/fcn.berkeleyvision.org/data/下,并將文件夾名重命名為sift-flow

步驟4.預訓練模型下載: 下載VGG16的預訓練模型并放在FCN源碼文件夾中的ilsvrc-nets文件夾下 https://pan.baidu.com/s/1qYJeFfQ
以個人路徑為例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/ilsvrc-nets
步驟5.為了避免運行程序時候出現no module named caffe 在代碼中包含import caffe的py文件(solve.py)的第一行加入 import sys ?
sys.path.append('/home/my/caffe-master/caffe-master/python')
其中,/home/my/caffe-master/caffe-master/python為你下載的caffe源碼中python文件夾的路徑

步驟6.cd進入fcn源碼路徑 以個人路徑為例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master 將其中所有的py文件,例如surgery.py等等,全部復制到siftflow-fcn32s文件夾中
步驟7.solver.prototxt文件修改 進入siftflow-fcn32s文件夾 打開solver.prototxt 其中snapshot:10000 表示訓練10000次保存一次模型 snapshot_prefix:"/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/siftflow-fcn32s/train"
表示訓練得到的模型,也就是model存放的路徑 在此,我附上個人的solver.prototxt供大家參考 [python] view plaincopy
  • train_net:?"trainval.prototxt"??
  • test_net:?"test.prototxt"??
  • test_iter:?200??
  • #?make?test?net,?but?don't?invoke?it?from?the?solver?itself??
  • test_interval:?999999999??
  • display:?20??
  • average_loss:?20??
  • lr_policy:?"fixed"??
  • #?lr?for?unnormalized?softmax??
  • base_lr:?1e-10??
  • #?high?momentum??
  • momentum:?0.99??
  • #?no?gradient?accumulation??
  • iter_size:?1??
  • max_iter:?300000??
  • weight_decay:?0.0005??
  • snapshot:10000??
  • snapshot_prefix:"/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master/siftflow-fcn32s/train"??
  • test_initialization:?false??



  • 步驟8.solve.py文件修改

    在這里鄭重聲明一下:如果訓練fcn32s的網絡模型,

    一定要修改solve.py

    利用transplant的方式獲取vgg16的網絡權重;

    具體操作為

    [html]?view plaincopy
  • import?sys????
  • sys.path.append('/home/my/caffe-master/caffe-master/python')??
  • import?caffe??
  • import?surgery,?score??
  • ??
  • import?numpy?as?np??
  • import?os??
  • import?sys??
  • ??
  • try:??
  • ????import?setproctitle??
  • ????setproctitle.setproctitle(os.path.basename(os.getcwd()))??
  • except:??
  • ????pass??
  • ??
  • vgg_weights?=?'../ilsvrc-nets/vgg16-fcn.caffemodel'??
  • vgg_proto?=?'../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt'??
  • weights?=?'../ilsvrc-nets/vgg16-fcn.caffemodel'??
  • ??
  • #?init??
  • caffe.set_mode_gpu()??
  • #?caffe.set_device(int(sys.argv[0]))??
  • caffe.set_device(7)??
  • ??
  • #solver?=?caffe.SGDSolver('solver.prototxt')??
  • #solver.net.copy_from(weights)??
  • solver?=?caffe.SGDSolver('solver.prototxt')??
  • vgg_net=caffe.Net(vgg_proto,vgg_weights,caffe.TRAIN)??
  • surgery.transplant(solver.net,vgg_net)??
  • del?vgg_net??
  • ??
  • #?surgeries??
  • interp_layers?=?[k?for?k?in?solver.net.params.keys()?if?'up'?in?k]??
  • surgery.interp(solver.net,?interp_layers)??
  • ??
  • #?scoring??
  • test?=?np.loadtxt('../data/sift-flow/test.txt',?dtype=str)??
  • ??
  • for?_?in?range(50):??
  • ????solver.step(2000)??
  • ????#?N.B.?metrics?on?the?semantic?labels?are?off?b.c.?of?missing?classes;??
  • ????#?score?manually?from?the?histogram?instead?for?proper?evaluation??
  • ????score.seg_tests(solver,?False,?test,?layer='score_sem',?gt='sem')??
  • ????score.seg_tests(solver,?False,?test,?layer='score_geo',?gt='geo')??
  • 可以看到我注釋了

    [html]?view plaincopy
  • #solver?=?caffe.SGDSolver('solver.prototxt')??
  • #solver.net.copy_from(weights)??
  • [html]?view plaincopy
  • 添加了??
  • [html]?view plaincopy
  • solver?=?caffe.SGDSolver('solver.prototxt')??
  • vgg_net=caffe.Net(vgg_proto,vgg_weights,caffe.TRAIN)??
  • surgery.transplant(solver.net,vgg_net)??
  • del?vgg_net??


  • 并且在import后添加了

    [html]?view plaincopy
  • vgg_weights?=?'../ilsvrc-nets/vgg16-fcn.caffemodel'??
  • vgg_proto?=?'../ilsvrc-nets/VGG_ILSVRC_16_layers_deploy.prototxt'??
  • weights?=?'../ilsvrc-nets/vgg16-fcn.caffemodel'??
  • 關于 [html]?view plaincopy
  • VGG_ILSVRC_16_layers_deploy.prototxt??
  • 我附上我的百度網盤的鏈接 如果大家找不到 可以在這里下載

    http://pan.baidu.com/s/1geLL6Sz

    如果訓練fcn16s,則可以直接copy自己的fcn32s的model的權重,不需要transplant,也就是不需要修改solve.py

    如果訓練fcn8s,則可以直接copy自己的fcn16s的model的權重,不需要transplant,也就是不需要修改solve.py

    只有如此,才能避免loss高居不下的情況
    步驟9. 以上配置全部結束,開始進行模型訓練 進入siftflow-fcn32s文件夾 執行 python solve.py

    步驟10.測試單張圖片 在fcn源碼文件夾,找到infer.py 以個人路徑示例:/home/my/fcn.berkeleyvision.org-master/fcn.berkeleyvision.org-master 打開infer.py 在第一行加上 import sys ?
    sys.path.append('/home/my/caffe-master/caffe-master/python')
    其中/home/my/caffe-master/caffe-master/python為自己所下載的cafe源碼包中的python所在路徑
    其中,net = caffe.Net('deploy.prototxt', 'siftflow-fcn32s/train_iter_100000.caffemodel', caffe.TEST) 中,train_iter_100000.caffemodel為訓練得到的模型
    其中,im = Image.open('test.jpg')為 測試的圖片名,
    plt.savefig('test_out.png')為將測試結果保存為test_output.png
    此外? out = net.blobs['score'].data[0].argmax(axis=0)
    改成 out = net.blobs['score_sem'].data[0].argmax(axis=0)
    我附上個人完整的infer.py的代碼
    [python] view plaincopy
  • import?numpy?as?np??
  • from?PIL?import?Image??
  • import?matplotlib.pyplot?as?plt??
  • import?sys????
  • sys.path.append('/home/my/caffe-master/caffe-master/python')??
  • import?caffe??
  • import?cv2??
  • %matplotlib?inline??
  • #?load?image,?switch?to?BGR,?subtract?mean,?and?make?dims?C?x?H?x?W?for?Caffe??
  • im?=?Image.open('siftflow-fcn8s/test.jpg')??
  • in_?=?np.array(im,?dtype=np.float32)??
  • in_?=?in_[:,:,::-1]??
  • in_?-=?np.array((104.00698793,116.66876762,122.67891434))??
  • in_?=?in_.transpose((2,0,1))??
  • ??
  • #?load?net??
  • net?=?caffe.Net('siftflow-fcn8s/deploy.prototxt',?'siftflow-fcn8s-heavy.caffemodel',?caffe.TEST)??
  • #?shape?for?input?(data?blob?is?N?x?C?x?H?x?W),?set?data??
  • net.blobs['data'].reshape(1,?*in_.shape)??
  • net.blobs['data'].data[...]?=?in_??
  • #?run?net?and?take?argmax?for?prediction??
  • net.forward()??
  • out?=?net.blobs['score_sem'].data[0].argmax(axis=0)??
  • #print?"hello,python!"??
  • ??
  • #plt.imshow(out,cmap='gray');??
  • plt.imshow(out)??
  • plt.axis('off')??
  • plt.savefig('test.png')??


  • .使用infer.py時候遇到no display name and no $DISPLAY environment variable的話 證明服務器上沒安裝顯卡
    不支持plt命令,具體解決方法可以見我的另外一個博客中的問題1,2個解決方法: http://blog.csdn.net/wangkun1340378/article/details/56834642

    如果沒有deploy文件,可以參考如下方法:

    deploy文件如果沒有 可以參照一下方法

    首先,根據你利用的模型,例如模型是siftflow32s的,那么你就去siftflow32s的文件夾,

    里面有train.prototxt文件,將文件打開,全選,復制,新建一個名為deploy.prototxt文件,粘貼進去,

    然后ctrl+F 尋找所有名為loss的layer 只要有loss 無論是loss還是geo_loss 將這個layer統統刪除

    然后在文件頂部加上

    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: 256 dim: 256 }
    ? }
    }

    其中shape{dim:1 dim:3 dim:256 dim:256}這兩個256,是由于我的測試圖片是256X256 如果你的是500X500 那你就將最后兩個dim改為500 500

    需要注意的是 如果你執行的是siftflow32s,你沒有deploy,你需要加入inputdata layer,你如果執行sififlow16s的model 那么是不需要加inputdata layer的

    因為他們的train.prototxt文件里已經有了inputdata layer

    此外,關于siftflow-fcn32s需要的deploy文件,我在這里附上一個下載地址,如果不愿意自己制作可以下載這個:

    http://pan.baidu.com/s/1dFCHWf3

    其中 deploy是fcn32的

    deploy16是fcn16的

    deploy8是fcn8的


    需要額外注意的是 如果使用siftflow數據集訓練得到的model

    在測試時候 也請使用siftflow數據集中的img進行test,我以一張voc數據集的img利用siftflow數據集得到的model示例


    可以看到voc的圖像 在利用siftflow數據集進行測試的結果并不好

    在siftflow數據集中 class.txt文件中是包含person這個類別的 但在這個例子中 仍然無法將person完整分割出來

    這是因為 train data中 person類別的多樣性不足 在大家自己制作自己的數據集時候

    不僅要完整包含自己所需要的類別(class) 在保證數據集的數量足夠大的同時 更要注意每一個class的 多樣性

    例如 person的姿勢 多樣性 等等 只有如此 才能使得分割結果更加完善

    fcn只是工具 就像汽車的發動機?

    我們使用fcn 時候 我們的數據集就是機油 ?

    機油純度高(數據集做得好) 汽車跑的就快,跑的遠(分割結果就好)

    在此,fcn的訓練已經結束,祝大家順利


    如果想下載官方的訓練好的model 試試結果可以在這里下載到

    http://dl.caffe.berkeleyvision.org/

    以上,FCN的訓練和測試全部結束,這次有個朋友催我做這個,做得比較倉促,如果有問題,歡迎指摘

    感謝Zoro_H提供的 利用siftflow訓練得到的model 對voc數據集中圖片的測試結果 與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的FCN网络训练 SIFTFLOW数据集的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。