1. 程式人生 > >利用FCN-32s,FCN-16s和FCN-8s訓練自己製作的資料集

利用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],歡迎一起交流探討。