digits —segmentation demo

xiaoxiao2021-02-28  108

digits 自带一个分割项目,这里记录一下过程

项目的目的是为了将空心的三角形变成实心的,也就是一个边缘检测的过程,但是又稍微不一样。这里是将内部和外部区分的一个过程。

数据库的建立: 分割的数据样本的要求是一个特征数据库、一个标签数据库,二者的图像尺寸一致,输入图像可以是任何形式的,而输出图像一般都是二值化的。这里建立的数据库是由脚本自动生成的。 由于是在windows下运行,会有很多不便,所有会与官方文档有所出入。 首先在C:\caffe-master\DIGITS-master\examples\binary-segmentation下执行脚本:

python C:\caffe-master\DIGITS-master\examples\binary-segmentation\create_images.py out

完成后会出现一个文件夹命名为out里面有输入输出两个文件夹每个文件夹里面有10000个32*32的图像文件。根目录下还有一个测试用的grid.png文件,用于最后的测试

开启digits的datasets选择image下的processing选项。 点击create就好了。

建立模型 在home界面选择model新建一个process的模型将Data Transformations下的Subtract Mean设置为pixel,将training epochs设置为200。 将learning rate设置成1e-7

再将这里的代码复制过去放到 Custom network下的代码框

由于本机使用的windows下的caffe是旧版本,不支持L1Loss 层这个类型,所以换成EuclideanLoss ,并将学习率调整到0.1

name: "SRCNN" layer { name: "data" type: "Data" top: "data" include { phase: TRAIN } data_param { batch_size: 4 backend: LMDB } } layer { name: "label" type: "Data" top: "label" include { phase: TRAIN } data_param { batch_size: 4 backend: LMDB } } layer { name: "data" type: "Data" top: "data" include { phase: TEST } data_param { batch_size: 4 backend: LMDB } } layer { name: "label" type: "Data" top: "label" include { phase: TEST } data_param { batch_size: 4 backend: LMDB } } layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1.0 } param { lr_mult: 0.10000000149 } convolution_param { num_output: 32 pad: 1 kernel_size: 3 stride: 1 weight_filler { type: "gaussian" std: 0.0010000000475 } bias_filler { type: "constant" value: 0.0 } } } layer { name: "relu1" type: "ReLU" bottom: "conv1" top: "conv1" } layer { name: "conv2" type: "Convolution" bottom: "conv1" top: "conv2" param { lr_mult: 1.0 } param { lr_mult: 0.10000000149 } convolution_param { num_output: 1024 pad: 0 kernel_size: 16 stride: 16 weight_filler { type: "gaussian" std: 0.0010000000475 } bias_filler { type: "constant" value: 0.0 } } } layer { name: "relu2" type: "ReLU" bottom: "conv2" top: "conv2" } layer { name: "upsample" type: "Deconvolution" bottom: "conv2" top: "upsample" param { lr_mult: 1.0 } convolution_param { num_output: 1 pad: 0 kernel_size: 16 stride: 16 bias_filler { type: "constant" value: 128.0 } } } layer { name: "lossL1" type: "EuclideanLoss " bottom: "upsample" bottom: "label" top: "lossL1" loss_weight: 0.1 exclude { stage: "deploy" } }

create就可以运行了。 这里还没跑完,不过结果已经非常不错了。 最后结果大概是这样:

转载请注明原文地址: https://www.6miu.com/read-21229.html

最新回复(0)