利用FCN-32s,FCN-16s和FCN-8s訓練自己製作的數據集

前言

之前寫過一篇博客是製作自己的數據集利用FCN-32s模型訓練,對FCN-16s和FCN-8s訓練寫的比較粗略,所以寫這篇博客主要是補充FCN-16s和FCN-8s訓練過程。

訓練前準備

在使用fcn之前需要配置caffe環境,可以參考win10+vs2013+caffe+gpu+python環境配置這篇博客,對如何製作自己的數據集以及FCN-32s訓練過程可以參考FCN製作自己的數據集並訓練和測試這篇博客

訓練過程

訓練FCN-16s
如果你的fcn-32s模型訓練好之後,會在路徑D:\caffe\caffe-master\fcn-master\voc-fcn32s\snapshot(這是我fcn-master代碼的路徑)中看到train_iter_100000.caffemodel文件,這個文件就是FCN-32s模型權重。如果你的fcn-32s模型訓練好之後,會在路徑D:\caffe\caffe-master\fcn-master\voc-fcn32s\snapshot(這是我fcn-master代碼的路徑)中看到train_iter_100000.caffemodel文件,這個文件就是FCN-32s模型權重。
在這裏插入圖片描述
接着在fcn-master目錄下找到所有py文件複製到voc-fcn16s文件夾中,同時新建文件夾snapshot
在這裏插入圖片描述
你的文件夾中可能沒有deploy.prototxt文件,這裏給出下載地址deploy,裏面有兩個文件,將deploy_fcn16.prototxt重命名爲deploy.prototxt並複製到到voc-fcn16s文件夾中
在這裏插入圖片描述
用vs打開solver.prototxt文件,這裏面是一些參數配置,由於我的圖片較少,所以我把test_iter參數改爲2,這個參數是指在測試時一次測試多少張圖片。其他參數默認就行。
在這裏插入圖片描述
對於train.prototxt,val.prototxt和voc_layers.py三個文件修改的方法和訓練fcn-32s時一模一樣,所以參考上述的FCN製作自己的數據集並訓練和測試的博客就行。

打開solve.py文件,修改代碼爲下

import caffe
import surgery, score

import numpy as np
import os
import sys
sys.path.append('D:/caffe/caffe-master/python')
try:
    import setproctitle
    setproctitle.setproctitle(os.path.basename(os.getcwd()))
except:
    pass

weights = 'D:/caffe/caffe-master/fcn-master/voc-fcn32s/snapshot1/train_iter_100000.caffemodel'

# init
#caffe.set_device(int(sys.argv[1]))
caffe.set_mode_gpu()
caffe.set_device(0)

solver = caffe.SGDSolver('solver.prototxt')
solver.net.copy_from(weights)


# surgeries
interp_layers = [k for k in solver.net.params.keys() if 'up' in k]
surgery.interp(solver.net, interp_layers)

# scoring
val = np.loadtxt('D:/caffe/caffe-master/fcn-master/data/pascal/VOCdevkit/VOC2012/ImageSets/Segmentation/seg11valid.txt', dtype=str)

for _ in range(25):
    solver.step(4000)
    score.seg_tests(solver, False, val, layer='score')

到這所有準備工作都已結束,下面開始訓練。
在cmd命令窗口中,指定到fcn-master\voc-fcn16s目錄下,輸入python solve.py命令,如下所示。
在這裏插入圖片描述
等待漫長的訓練後,在voc-fcn16s\snapshot目錄下生成train_iter_100000.caffemodel文件
在這裏插入圖片描述

測試單張圖片
打開infer.py文件,修改代碼如下,其中data文件夾是我在voc-fcn16s目錄下創建的,不是fcn-master目錄下的data

import numpy as np
from PIL import Image

import caffe
import vis
import sys
sys.path.append('D:/caffe/caffe-master/python')

# the demo image is "2007_000129" from PASCAL VOC

# load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe
im = Image.open('data/image.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('deploy.prototxt', 'snapshot/train_iter_100000.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'].data[0].argmax(axis=0)

# visualize segmentation in PASCAL VOC colors
voc_palette = vis.make_palette(5)
out_im = Image.fromarray(vis.color_seg(out, voc_palette))
out_im.save('data/output.png')
masked_im = Image.fromarray(vis.vis_seg(im, out, voc_palette))
masked_im.save('data/visualization.jpg')

到此所有的fcn-16s模型訓練工作都已結束。

訓練FCN-16s用的是FCN-32s的權重,訓練FCN-8s用的是FCN-16s的權重,所以對於FCN-8s模型的訓練和FCN-16s訓練的過程一模一樣,所以在這就不在重複敘述了,如果又不懂的地方可以隨時問我,我的郵箱是[email protected],歡迎一起交流探討。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章