FCN-Caffe 训练自己的数据集记录(1)

FCN虽然老,但是还很坚挺,效率也还行,适合学习参考。
借鉴了很多此CSDN博客,https://blog.csdn.net/weixin_42795611/article/details/84073879
上了年纪,防止遗忘

设备概述

测试平台i7 6820hq,16g+K1200 4G,训练平台W2133,64g+P4000 8G

Caffe安装

conda create -n mycaffe python=3.7.9
souce activate mycaffe
conda install caffe-gpu

一步到位,注意FCN是跑在Python2上的,如果conda环境是3,后面需要修改一点点源码。其他的几个常用的库,Scipy,numpy,opencv,PIL,应该都会一起安装,没有一起安装就慢慢改。

跑通流程

1、下载测试数据集

下载benchmark和VOC2012数据集,网盘等方式下载。
benchmark数据集是用来存放训练的数据,VOC2012数据集用来存放测试数据。

2、下载必要网络文件

主体结构 https://github.com/shelhamer/fcn.berkeleyvision.org
VGG16的预训练模型(https://pan.baidu.com/s/1qYJeFfQ)
VGG_ILSVRC_16_layers_deploy.prototxt(https://pan.baidu.com/s/1lz-eNBM_zSzOzsEq14TznQ)

3、移动文件到指定位置

1、进入data目录,新建sbdd文件夹,将benchmark解压到sbdd中,进入dataset文件夹,cls是用来存放索引图(标签),img用来存放训练数据(原训练图像),train.txt用来存放训练数据的名称,val.txt用来存放验证集的名称,VOCdevkit数据集直接解压后放入sbdd文件夹即可。
2、VGG16的预训练模型、VGG_ILSVRC_16_layers_deploy.prototxt移动到源码根目录ilsvrc-nets文件夹下
3、复制根目录下所有py文件到voc-fcn32s中。首次训练先选择fcn32s开始。

4、进入VOC2012,进入JPEGImages文件夹,里面存放测试用的原图,然后进入SegmentationClass,里面存放测试用的索引图,最后进入ImageSets/Segmentation,新建seg11valid.txt的文件,它和train.txt的性质一样,存放测试用的图片名。到此,数据集就准备完成了。

4、在fcn32s中新建snapshot文件夹,防止权限问题无法创建报错。

4、修改相关文件

1、修改fcn32s里的voc_layer.py,使其支持非mat类型输入

def load_label(self, idx):
        """
        Load label image as 1 x height x width integer array of label indices.
        The leading singleton dimension is required by the loss.
        """
        im = Image.open('{}/cls/{}.png'.format(self.sbdd_dir, idx))
        label = np.array(im, dtype=np.uint8)
        label = label[np.newaxis, ...]
        return label

2、修改solve.py 求解器设置

import caffe
import surgery, score

import numpy as np
import os
import sys
sys.path.append('C:/caffe/caffe-master/python')

try:
   import setproctitle
   setproctitle.setproctitle(os.path.basename(os.getcwd()))
except:
   pass

#weights = '../ilsvrc-nets/vgg16-fcn.caffemodel'
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_device(int(sys.argv[1]))               
caffe.set_mode_gpu()
caffe.set_device(0)

#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
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')

3、solver.prototxt 网络参数设置

train_net: "train.prototxt"
   test_net: "val.prototxt"
   test_iter: 2    #因为我的图片少,所以这里测试图片参数就写少一点,如果图片多的话可以使用默认参数
   # 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 #batch_size的扩增倍数,必须是整数,1还不行,就换显卡吧
   max_iter: 100000
   weight_decay: 0.0005
   snapshot: 4000
   snapshot_prefix: "snapshot1/train"
   test_initialization: false

4、train.prototxt 训练网络数据源设置,这个和5都跟着实际路径来

param_str: "{\'sbdd_dir\': \'D:/caffe/caffe-master/fcn-master/data/sbdd/benchmark/benchmark_RELEASE/dataset\', \'seed\': 1337, \'split\': \'train\', \'mean\': (104.00699, 116.66877, 122.67892)}"

5、val.prototxt 验证网络数据源设置

param_str: "{\'voc_dir\': \'D:/caffe/caffe-master/fcn-master/data/pascal/VOCdevkit/VOC2012\', \'seed\': 1337, \'split\': \'seg11valid\', \'mean\': (104.00699, 116.66877, 122.67892)}"

5、可以训练了

执行solver.py即可,如果网络结构报错,可以尝试重新下载试试看。

训练自己的数据

mogrify -format jpg *.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容