用FCN训练自己的数据集+caffe

FCN模型下载

0.      我的caffe是早就安装好的。所以不多说,没安装的自己百度

1.      我用的是caffe在github上FCN的代码和模型,链接是:

https://github.com/shelhamer/fcn.berkeleyvision.org

我在服务器上用下面的语句下载这个FCN的工程包“fcn.berkeleyvision.org-master”。由于我只打算用voc-8s的网络,所以后文只针对此网络,别的相似。

git clone https://github.com/shelhamer/fcn.berkeleyvision.org.git

模型下载的方法是,点进这个文件夹,然后用Notepad++或者txt把打开,里面就是训练好的基于VOC数据集的FCN8s的模型的下载链接,下载好后就是:这个模型,我们之后用这个模型初始化网络。最好将模型和其他要调用的文件放在同一个目录下,我的是:


自己的数据集

1.      把所有图片的名字改成从0~N-1,N是你数据集图片的个数。

我的训练集是N=440张图,那么将原图(必须是3通道的RGB图)和label图(必须得是灰度)的名字都变成0.png~439.png。

我的验证集是N=94张图,那么原图和label图都是0.png~93.png

(训练集和验证集都是训练时用的,与测试集不同)

注意:如果你想直接用VOC数据集里自带的测试脚本来分割你的图片,请把你的图片类别的RGB值转成VOC数据集21个类别里有的颜色。我的数据集的类别是我自己设置的RGB值。所以我自己写了测试脚本来还原分割图的色彩。

2.      把数据放在一个你自己制定的目录下,并按照原图和label图分好。

我的训练时的原图在data/train、训练时的label图在data/grey;

我的验证集的原图在data/val、训练时的label图在data/val_grey。

并且生成好训练集和验证集的标签list。如图,训练集的是“train.txt”,验证集的是“segvalid.txt”。

注意:list里只是数字,没有“.png”,因为FCN源码里是需要利用这些序号的。

训练

1.      先建立一个文件夹用于存放训练中间的caffemodel。

2.      那么,solver.prototxt基本不用改,本次训练是4000次迭代存一个caffemodel,我把最大迭代次数改成了10万次。

train_net:"train.prototxt"
test_net:"val.prototxt"
test_iter:736
# maketest net, but don't invoke it from the solver itself
test_interval:999999999
display:20
average_loss:20
lr_policy:"fixed"
# lr forunnormalized softmax
base_lr:1e-14
# highmomentum
momentum:0.99
# nogradient accumulation
iter_size:1
max_iter:100000 #最大迭代次数
weight_decay:0.0005
snapshot:4000
snapshot_prefix:"snapshot/"
test_initialization: false

3.      需要改的有train.prototxt和val.prototxt。

要改的地方有两种,先说train.prototxt

(1)      data层,我使用的是

我将voc_dir改成也即我图片在的文件夹的上一级位置。然后按需要改变一下mean。注意‘spilt’后面是‘train’,也是我train.txt的名字

(2)      因为我的数据集的num_output=8,所以我把后面几层的都改成了8,但是为了使用这个caffemodel,所以需要把改成8的layer的name都改一下。记得name为“score”的不要改。

至于val.prototxt的改动也是两种,第二种和上面一样,说一下data层

我改成了

注意‘spilt’后面是‘segvalid’,也是我验证集segvalid.txt的名字

4.      然后可以训练了。

不过得改一下solve.py 中验证集list的位置:

然后执行

Python2 solve.py

就可以啦。

开始训练了:但是第一个loss=545113,吓了一跳


但是验证的时候,准确率啥的还可以:


最后训练10万次后,我的结果如下:

 

测试

本文参考https://www.cnblogs.com/k7k8k91/p/7989630.html,可以参考里面的单张图的分割,

主要用的是deploy.prototxt和infer.py。记得把deploy.prototxt里后面层的名字改成和train.prototxt一致的。然后把

里的caffemodel换成自己的。


p.s.  本人大四,以上都是自己摸索做的,如有不对的地方,还请前辈们指点。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页