图像分割 | FCN数据集制作的全流程(图像标注)
来源:互联网 发布:c语言中的enum 编辑:程序博客网 时间:2024/05/16 14:16
一 全卷积神经网络
文章所有代码已上传至github,觉得好用就给个star吧,谢谢
https://github.com/315386775/FCN_train
深度学习图像分割(FCN)训练自己的模型大致可以以下三步:
1.为自己的数据制作label;
2.将自己的数据分为train,val和test集;
3.仿照voc_lyaers.py编写自己的输入数据层。
其中主要是如何制作自己的数据label困扰着大家。
补充:由于图像大小的限制,这里给几个图像Resize的脚本:
(1)单张图片的resize
# coding = utf-8 import Image def convert(width,height): im = Image.open("C:\\xxx\\test.jpg") out = im.resize((width, height),Image.ANTIALIAS) out.save("C:\\xxx\\test.jpg")if __name__ == '__main__': convert(256,256)
(2)resize整个文件夹里的图片
# coding = utf-8import Imageimport osdef convert(dir,width,height): file_list = os.listdir(dir) print(file_list) for filename in file_list: path = '' path = dir+filename im = Image.open(path) out = im.resize((256,256),Image.ANTIALIAS) print "%s has been resized!"%filename out.save(path)if __name__ == '__main__': dir = raw_input('please input the operate dir:') convert(dir,256,256)
(3)按比例resize
# coding = utf-8 import Image def convert(width,height): im = Image.open("C:\\workspace\\PythonLearn1\\test_1.jpg") (x, y)= im.size x_s = width y_s = y * x_s / x out = im.resize((x_s, y_s), Image.ANTIALIAS) out.save("C:\\workspace\\PythonLearn1\\test_1_out.jpg")if __name__ == '__main__': convert(256,256)
二 图像标签制作
第一步:使用github开源软件进行标注
地址:https://github.com/wkentaro/labelme
第二步:为标注出来的label.png进行着色
首先需要对照VOC分割的颜色进行着色,一定要保证颜色的准确性。Matlab代码:
function cmap = labelcolormap(N)if nargin==0 N=256endcmap = zeros(N,3);for i=1:N id = i-1; r=0;g=0;b=0; for j=0:7 r = bitor(r, bitshift(bitget(id,1),7 - j)); g = bitor(g, bitshift(bitget(id,2),7 - j)); b = bitor(b, bitshift(bitget(id,3),7 - j)); id = bitshift(id,-3); end cmap(i,1)=r; cmap(i,2)=g; cmap(i,3)=b;endcmap = cmap / 255;
对应的颜色类别:
类别名称 R G B background 0 0 0 背景 aeroplane 128 0 0 飞机 bicycle 0 128 0 bird 128 128 0 boat 0 0 128 bottle 128 0 128 瓶子 bus 0 128 128 大巴 car 128 128 128 cat 64 0 0 猫 chair 192 0 0 cow 64 128 0 diningtable 192 128 0 餐桌 dog 64 0 128 horse 192 0 128 motorbike 64 128 128 person 192 128 128 pottedplant 0 64 0 盆栽 sheep 128 64 0 sofa 0 192 0 train 128 192 0 tvmonitor 0 64 128 显示器
然后使用python 的skimage库进行颜色填充,具体函数是skimage.color.label2rgb(),这部分代码以及颜色调整我已经完成了,由于代码太长就不贴出来了,有需要的可以私信我。
#!usr/bin/python# -*- coding:utf-8 -*-import PIL.Imageimport numpy as npfrom skimage import io,data,colorimport matplotlib.pyplot as pltimg = PIL.Image.open('xxx.png')img = np.array(img)dst = color.label2rgb(img, bg_label=0, bg_color=(0, 0, 0))io.imsave('xxx.png', dst)
其中skimage.color.label2rgb()的路径在:x:\Anaconda2\Lib\site-packages\skimage\color,修改如下两处,注意使用COLORS1。
DEFAULT_COLORS1 = ('maroon', 'lime', 'olive', 'navy', 'purple', 'teal', 'gray', 'fcncat', 'fcnchair', 'fcncow', 'fcndining', 'fcndog', 'fcnhorse', 'fcnmotor', 'fcnperson', 'fcnpotte', 'fcnsheep', 'fcnsofa', 'fcntrain', 'fcntv')
第三步:最关键的一步
需要注意的是,label文件要是gray格式,不然会出错:scores层输出与label的数据尺寸不一致,通道问题导致的,看下面的输出是否与VOC输出一致。
In [23]: img = PIL.Image.open('F:/DL/000001_json/test/dstfcn.png')In [24]: np.unique(img)Out[24]: array([0, 1, 2], dtype=uint8)
其中涉及到如何把24位png图转换为8位png图,直接上代码:
dirs=dir('F:/xxx/*.png');for n=1:numel(dirs) strname=strcat('F:/xxx/',dirs(n).name); img=imread(strname); [x,map]=rgb2ind(img,256); newname=strcat('F:/xxx/',dirs(n).name); imwrite(x,map,newname,'png');end
三 FCN模型训练
推荐博客:http://www.cnblogs.com/xuanxufeng/p/6243342.html
四 测试图片结果上色
from PIL import Imageimport numpy as npfrom datasets import CONFIG# The arr is a predicted resultarr = np.load('arr.npy')print 'The shape of the image is:', arr.shapeprint 'The classes in the image are:', np.unique(arr)# Define the palettepalette = []for i in range(256): palette.extend((i, i, i))# define the color of the 21 classes(PASACAL VOC)palette[:3*21] = CONFIG['voc12']['palette'].flatten()assert len(palette) == 768im = Image.fromarray(arr)im.show()im.putpalette(palette)im.show()im.save('out.png')
我的博客即将同步至腾讯云+社区,邀请大家一同入驻。
- 图像分割 | FCN数据集制作的全流程(图像标注)
- 图像分割 | FCN数据集制作的全流程(图像标注)
- 图像分割 | FCN数据集制作的全流程(图像标注)
- 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
- 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
- 全卷积网络(FCN)与图像分割
- 全卷积网络(FCN)与图像分割
- 全卷积网络(FCN)与图像分割
- 全卷积网络(FCN)与图像分割
- FCN图像语义分割
- 图像分割与FCN
- 图像分割之FCN
- 图像分割与FCN
- 图像语义分割(1)- FCN
- FCN制作自己的数据集、训练和测试全流程
- FCN制作自己的数据集、训练和测试全流程
- caffe下用FCN做图像分割,如何制作训练集?
- FCN语义分割——直接加载图像数据
- 详解java类的生命周期
- 【基于url权限管理 shiro(二)】--权限管理解决方案
- gradle/maven/ant/之间关系的理解
- Web.xml中jsp-config元素简述
- Java对字符串进行的操作
- 图像分割 | FCN数据集制作的全流程(图像标注)
- Windows7系统如何禁用驱动程序签名强制
- 解析 “路漫漫其修远兮,吾将上下而求索”
- 2017年上半年重大黑客事件盘点
- POJ3281:Dining(最大流)
- JDK1.8 连接Access数据库
- MyBatis中if标签注意问题
- [练习]:LCA练习2
- Wireshark基本介绍和学习TCP三次握手