FCN网络的训练——以燃气表数字识别为例

http://blog.csdn.net/hduxiejun/article/details/54234766

FCN网络的训练——以燃气表数字识别为例

目录

用 [TOC]来生成目录:

(0)写在前面

知乎上面曾有个文章讲用全卷积神经网络(Fully Convolutional Networks for Semantic Segmentation)的方法识别燃气表数字识别的项目,训练阶段, 标定燃气表数字中心一块区域的像素点为该类数字的正样本,, 不同数字的中心区域的像素被标定为不同的类别, 十种数字加上背景一共十一类, 不同颜色表示不同类别的标注, 其他的都是背景类。最后对每个像素计算softmax loss。

测试阶段通过全卷积网络得到输入燃气表图像每一个像素的分类结果, 接着进行非极大值抑制, 形态学变换等后续操作, 可直接得到上图的识别结果”000470”, 整个系统十分高效。原作者开源了基于Caffe的实现,代码链接 GitHub - SHUCV/digit: digital meter numbers detection.

但git下来之后发现有些问题,比如训练后的loss在训练1000次之后基本不下降,最后loss还是很大,识别准确率差,最后识别的数字位置和原数字位置对不上等问题。因此对原网络进行好了修改,修改后的网络已上传Git。 
修改后的github链接: 
https://github.com/CrazyVertigo/digits2.0

下面讲一下训练步骤:

(1)训练

1. 下载预训练模型:下载预训练模型:fcn-32s-pascalcontext.caffemodel,然后解压至CAFFE_ROOT下的models/fcn-32s-pascalcontext.caffemodel; 
下载地址: 
2. 下载训练数据:下载训练数据:然后解压至CAFFE_ROOT下的data/; 
下载地址: 
3. 转换数据格式:执行 python examples/fdigit/convert.py; 
注:要根据自己的CAFFE_ROOT目录修改代码中的CAFFE_ROOT路径

CAFFE_ROOT = ‘/home/hdu/caffe/’

 
4. 开始训练:执行python solve.py 
默认在GPU上运行,loss在迭代训练期间很快下降。

(2) 测试

1. 下载模型参数文件: fcn-32s-pascalcontext.caffemodel ,然后放置到CAFFE_ROOT下的models/fcn-32s-pascalcontext.caffemodel; 
下载地址: 
2. 测试样本图片:matlab examples/fdigit/test_fcn11_full.m 需要成功安装Matlab and matcaffe

(3)数据说明

1.输入原图 

2.对应ground truth: 
上图对应的标注如下所示:

可以看出对不同的数值用不同的颜色进行标注,加上背景一共有11总颜色。

(4)主要修改如下:

1.prototxt修改:

layer {
  type: "Crop"
  name: "score"
  top: "score"
  bottom: "upscore_new"
  bottom: "data"
  crop_param{
    axis:2
    offset:19
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.matlab的test_fcn11_full.m文件: 
主要修复了原始版本中分割结果显示重叠的问题,详见github中test_fcn11_full.m文件。

(5)结果展示

1.输入test图片

原始版本

5.1 识别结果

识别的结果如下图所示:

5.2 loss曲线如下所示: 

可以看到整个网络在10000次以后基本属于震荡阶段。

可以看到识别的结果整体偏右下方移动,可能是原先网络的crop层的参数有问题。

新的版本

5.3 识别结果 
在识别多张图片的时候,显示重叠的Bug也得到修复,如下图所示。 

5.4 修改之后的loss曲线

可以看到loss曲线图相比之前1.5左右降低很多,稳定在0.4左右,识别准确率也有所增加。

网络结构可视化如图

网络结构可视化如图 



知乎地址: 
https://zhuanlan.zhihu.com/p/21930884?refer=intelligentunit 
原github链接: 
https://github.com/SHUCV/digit

我的github链接如下所示: 
https://github.com/CrazyVertigo/digits2.0

时间: 2024-07-30 21:37:19

FCN网络的训练——以燃气表数字识别为例的相关文章

FCN网络的训练——以SIFT-Flow 数据集为例

参考文章: http://blog.csdn.net/u013059662/article/details/52770198 caffe的安装配置,以及fcn的使用在我前边的文章当中都已经提及到了,这边不会再细讲.在下边的内容当中,我们来看看如何使用别人提供的数据集来训练自己的模型!在这篇文章之后,我计划还要再写如何fine-tune和制作自己的数据集,以及用自己的数据集fine-tune. (一)数据准备(以SIFT-Flow 数据集为例) 下载数据集:  http://pan.baidu.c

南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup

南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup 题目描述 文件下载地址 很明显,文件之间进行亦或就可得到flag,不再多说,直接上脚本 1 #coding:utf-8 2 file_a = open('密文.txt', 'rb') 3 file_b = open('明文.txt', 'rb') 4 ? 5 str_a = ''.join(file_a.readlines()) 6 str_b = ''.join(file_b.readlines()) 7 ? 8 ans =

如何查看IC卡燃气表读数及余额?

现在新建的楼房都是使用IC卡燃气表,拿到房子入住时也没有见到IC卡燃气表的使用说明书,很多人可能为此而苦恼,这里就讲一下如何查看IC卡燃气表读数及余额. 产品外观 可选功能 产品优势 主要技术参数 查看IC卡燃气表读数及余额,准备IC卡及手电筒,通常燃气表都是安装在灶台下面,比较暗 搬动燃气表下面电池盖右上侧,打开电池盖 将燃气卡正面向上插入燃气表,会听到一声提示音: 上面显示的是用了多少立方米的煤气,下面显示的余额 IC卡的正确充值方法: 使用IC卡充值时,应先确认燃气表的电压是否正常,电压不

如何查看IC卡燃气表读数和剩余量?

如今新建的楼房都是使用IC卡燃气表,拿到房子入住时也没有见到IC卡燃气表的使用说明书.非常多人可能为此而苦恼.这里就讲一下怎样查看IC卡燃气表读数及剩余金额. 产品外观 可选功能 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVzdGNzX2Ru/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /> 产品优势 主要技术參数 查看IC卡燃气表

pytorch 手写数字识别项目 增量式训练

dataset.py ''' 准备数据集 ''' import torch from torch.utils.data import DataLoader from torchvision.datasets import MNIST from torchvision.transforms import ToTensor,Compose,Normalize import torchvision import config def mnist_dataset(train): func = torch

自强队视觉组训练项目-3 | 20180107-印刷体数字识别

DEADLINE: 21st Jan, 2018 (Duration: 2 weeks) 项目需求 数字识别是机器视觉的一个经典话题,其中较为基础的是印刷体数字识别,这期项目要求实现印刷体数字识别,即给一张包含印刷体数字的图片,你的任务是将其中的数字以字符形式输出. 项目描述 项目需求描述了基本要求,具体难度可以自己调节,比如可以给一张只含一个数字的图片,然后通过计算灰度总值区分不同印刷体数字的特征.这是一种极其简单的思路,实现起来也许还是要花点功夫.当然你可以围绕"印刷体数字识别"这

Tensorflow实践 mnist手写数字识别

minst数据集                                         tensorflow的文档中就自带了mnist手写数字识别的例子,是一个很经典也比较简单的入门tensorflow的例子,非常值得自己动手亲自实践一下.由于我用的不是tensorflow中自带的mnist数据集,而是从kaggle的网站下载下来的,数据集有些不太一样,所以直接按照tensorflow官方文档上的参数训练的话还是踩了一些坑,特此记录. 首先从kaggle网站下载mnist数据集,一份是

使用Caffe进行手写数字识别执行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别,这里详细介绍下其执行流程并精简了实现代码,使用Caffe对MNIST数据集进行train的文章可以参考  http://blog.csdn.net/fengbingchun/article/details/68065338 : 1.   先注册所有层,执行layer_factory.hpp中类LayerRegis

BP神经网络(手写数字识别)

1实验环境 实验环境:CPU [email protected],内存8G,windows10 64位操作系统 实现语言:python 实验数据:Mnist数据集 程序使用的数据库是mnist手写数字数据库,数据库有两个版本,一个是别人做好的.mat格式,训练数据有60000条,每条是一个784维的向量,是一张28*28图片按从上到下从左到右向量化后的结果,60000条数据是随机的.测试数据有10000条.另一个版本是图片版的,按0~9把训练集和测试集分为10个文件夹.这里选取.mat格式的数据