文档章节

使用FCN训练自己的数据集

KyJason
 KyJason
发布于 2017/06/28 16:21
字数 1213
阅读 461
收藏 0
点赞 0
评论 0

最近需要用到FCN来分割一些物体,所以一直在苦苦学习中,光是跑FCN就用了挺久的时间,最重要的是在数据集的格式上。现在做一下总结,针对小白。如果有错误希望能及时指出。谢谢!


准备工作

我用的是caffe和fcn,caffe可以从这里获得

git clone https://github.com/BVLC/caffe.git

caffe的安装可以根据我的另一片博客深度学习ssd配置并在VGG模型上训练自己的数据来安装。

fcn使用这个fcn.berkeleyvision.org

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

把fcn这个文件放在caffe目录中就可以了,如图:输入图片说明

现在准备用voc-fcn32s这个来训练。先把预先需要的模型下载了。在voc-fcn32s/solve.py中可以看到: 输入图片说明

所以我下载了一个vgg16的模型,地址:VGG_ILSVRC_16_layers


准备数据集

这个是最重要的,大部分不成功的原因都来自这里。 在voc-fcn32/train.prototxt中:输入图片说明 在val.prototxt中 输入图片说明

可以看到是使用sbd这个数据集进行训练,使用voc的数据集进行测试。在这里我们只需要更换'../data/sbdd/dataset'和'../data/pascal/VOC2011'就可以了。

**注意: **如果不想使用sdb那种存放数据格式的话,我们可以使用自己的数据格式。

打开voc_layers.py文件,可以看到有两个类,一个是处理voc数据集格式的,一个是处理sbd数据集格式的。 对于voc格式来说,目录的大概结构是这样的

VOC2011
|____JPEGImages
|____SegmentationClass
|____ImageSets
        |______Segmentation
  • JPEGImages中存放.jpg格式的彩色图片
  • SegmentationClass中存放label图片。重点注意: label图片一定是要单通道的!而且每个像素的值只能是从0开始到N。N为你定义的类别数+1,这个1是背景类,黑的。
  • Segmentation中存放写有图片的名字的train.txt,这个txt的名字要和上面图片中split参数决定,比如train.prototxt的split参数是train,而val.prototxt中的split参数则是seg11valid,所以就要叫做seg11valid.txt。txt文件中的图片名字不带路径和后缀。比如你的图片名字叫a.jpg,bb.jpg,ccc.jpg,那么里面在txt中就写
a
bb
ccc

这些目录结构可以对应代码中的:


# load indices for images and labels
split_f  = '{}/ImageSets/Segmentation/{}.txt'.format(self.voc_dir,self.split)
self.indices = open(split_f, 'r').read().splitlines()
self.idx = 0

...
...
...

def load_image(self, idx):

        im = Image.open('{}/JPEGImages/{}.jpg'.format(self.voc_dir, idx))
        in_ = np.array(im, dtype=np.float32)
        in_ = in_[:,:,::-1]
        in_ -= self.mean
        in_ = in_.transpose((2,0,1))
        return in_


def load_label(self, idx):

        im = Image.open('{}/SegmentationClass/{}.png'.format(self.voc_dir, idx))
        label = np.array(im, dtype=np.uint8)
        label = label[np.newaxis, ...]
        return label

如果想要把sbd的数据集像voc的一样简单的话可以按照这个代码把SBDDSegDataLayer类中的load_label函数改成

def load_label(self, idx):
        im = Image.open('{}/SegmentationClass/{}.png'.format(self.sbdd_dir, idx))
        label = np.array(im, dtype=np.uint8)
        label = label[np.newaxis, ...]
        return label

在load_image函数中的图片路径也需要改一改,还有加载txt的地方也要改一下。


训练

全部改完后就可以开始训练了。如果爆出一下文件找不到问题,那就自己修改下路径。 如果说surger,score找不到 那么修改solve.py文件,把import sys提前,并加入路径,如下:

import sys
sys.path.append('/your-path-to-caffe/caffe/fcn.berkeleyvision.org')
import caffe
import surgery, score

import numpy as np
import os

然后开心的运行这个文件开始训练:

输入图片说明

loss有点大,先观望一下,如果有错误我会及时更新。


后继 发现loss一直很到,直到结束依旧这样。输入图片说明

网上查了下原因,是说deconvolution layer没有初始化什么的,要加入weight filler 和bias filler,http://www.cnblogs.com/lvlvlvlvlv/p/6353637.html。 fcn中有提示说如果输出或者参数是0的话,可以加个surgery.transplant()

Why are all the outputs/gradients/parameters zero?: This is almost universally due to not initializing the weights as needed. 

To reproduce our FCN training, or train your own FCNs, it is crucial to transplant the weights from the corresponding ILSVRC net such as VGG16. The included surgery.transplant() method can help with this.

然后这个帖子 中发现使用规则

base_net = caffe.Net('vgg16.prototxt', 'vgg16.caffemodel', caffe.TEST)
surgery.transplant(solver.net, base_net)
del base_net

具体实现可以参考这个帖子,对于处理voc-fcn写的很详细。参照这个改完后200次迭代loss就下降了一半。

参考

ubuntu下caffe的FCN8模型训练

caffe GPU版本使用fcn分割自己的图像

caffe下fcn数据集制作的简化

图像分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)

FCN网络训练 终极版

FCN模型训练中遇到的困难

FCN学习:Semantic Segmentation

FCN 论文笔记

FCN-for-semantic-image-segmentation 训练过程的一些坑记录

caffe的FCN的loss居高不下和执行训练命令的脚本有关是怎么回事?

caffe下用FCN做图像分割,如何制作训练集?

用 caffe做图像分割实验时,loss值很诡异

© 著作权归作者所有

共有 人打赏支持
KyJason
粉丝 8
博文 61
码字总数 38889
作品 0
杭州
程序员
Jetson-inference

这是一个在NVIDIA Jetson TX1/TX2上部署基于TensorRT的深度学习推理和深度视觉感知的指导教程。 部署深度学习 欢迎使用我们针对NVIDIA DIGITS 和 Jetson TX1/TX2的推理和深度视觉实时运行库的...

CSDNhuaong
2017/12/20
0
0
利用FCN-8s网络训练自己数据集(NYUD为例)

FCN 官方Github 地址:shelhamer/fcn.berkeleyvision.org 我修改后的Gitbub 地址: yxliwhu/NYUD-FCN8s Papers: Fully Convolutional Models for Semantic Segmentation Evan Shelhamer, Jo......

李亚鑫
2017/08/31
0
0
全卷机神经网络图像分割(U-net)-keras实现

最近在研究全卷积神经网络在图像分割方面的应用,因为自己是做医学图像处理方面的工作,所以就把一个基于FCN(全卷积神经网络)的神经网络用 keras 实现了,并且用了一个医学图像的数据集进行...

u012931582
2017/04/17
0
0
业界 | 腾讯AI Lab提出Face R-FCN与Face CNN,刷新人脸检测与识别两大测评记录

  机器之心报道   参与:吴欣      据机器之心消息,腾讯 AI Lab 在大型人脸检测平台 WIDER FACE 与人脸识别平台 MegaFace 的多项评测指标中荣膺榜首,刷新行业纪录。此外,腾讯 AI...

机器之心
2017/12/20
0
0
腾讯AI Lab两大算法刷新人脸识别与检测纪录,秉承「基础研究+落地应用」之路

  AI 科技评论按:12 月 18 日,腾讯 AI Lab 宣布,其研发的人脸算法 Face R-FCN 和 Face CNN 分别在人脸检测平台 WIDER FACE 与人脸识别平台 MegaFace 的多项测评中斩获冠军。获悉这一消息...

AI科技评论
2017/12/20
0
0
Semantic segmentation系列其一:FCN

介绍 本来无意写FCN的,而是想耐心将R-CNN系列的文章梳理完全。只是在研究已分别在目标识别和实例分割领域成为state-of-art模型的R-FCN与Mask-RCNN网络时,发现它们都借鉴了这篇FCN的idea。于...

manofmountain
07/01
0
0
R-FCN论文翻译——中文版

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! R-FCN: Object Detection via Region-based Fully Convolutional Net...

SnailTyan
01/29
0
0
何恺明团队推出Mask^X R-CNN,将实例分割扩展到3000类

翻译 | AI科技大本营(ID:rgznai100) 参与 | shawn,刘畅 今年10月,何恺明的论文“Mask R-CNN”摘下ICCV 2017的最佳论文奖(Best Paper Award),如今,何恺明团队在Mask R-CNN的基础上更...

dqcfkyqdxym3f8rb0
2017/12/02
0
0
R-FCN每秒30帧实时检测3000类物体,马里兰大学Larry Davis组最新目标检测工作

【导读】美国马里兰大学、复旦大学和Gobasco人工智能实验室联合提出R-FCN-3000实时3000类目标检测框架,对R-FCN框架中的物体检测和分类进行解耦。本文对R-FCN体系结构进行修改,其中位置敏感...

zchang81
2017/12/12
0
0
Github代码实践:Pytorch实现的语义分割器

雷锋网按:本文为雷锋字幕组编译的Github项目,原标题A Pytorch Implementation of Detectron,作者为 roytseng-tw。 翻译 | 杨婉迪 陈明霏 整理 | 凡江 使用Detectron预训练权重输出 e2emas...

雷锋字幕组
05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
10分钟前
3
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
29分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部