FCN从制作自己的数据集,到训练,测试中间感谢很多朋友的帮助!现在整理出来,希望能帮助到更多的人。以voc_fcn8s为例,详细说明一下整个过程。
制作数据集:
按照voc的数据格式,分为benchmark和VOC2011,benchmark为训练集:VOC2011为测试集,benchmarck在 fcn.berkeleyvision.org/data/sbdd
VOC2011在 fcn.berkeleyvision.org/data/pascal
训练集的原图为.jpg/.png,标签为.mat. 测试集的原图和标签图都是.png/.jpg。这一点,从voc_layer.py中的读取数据的方式可以看出,VOCSegDataLayer()是读取测试集的方法,SBDDSegDataLayer()是读取训练集的方法。为了简单,我们在制作数据集的时候,我们将训练图片和测试图片都准备成图片形式,标签也是索引图。
制作标签:
假如我有两类,背景为0,目标为1,标签图就是单通道的灰度图。其中,背景的灰度值为0,目标的灰度值为1(从0开始,背景为0,连续的灰度值)这样制作完之后,标签图看起来是全黑(8位深),接下来,再将标签图制成索引图,至于什么是索引图,简单来说,就是做了一个map的映射,比如,将我前面设置的灰度值为0的背景,映射成一个自己设置的新的颜色(r,g,b),将灰度值为1的,映射成一个新的颜色(r,g,b)。索引图形式的label是P格式的,有新颜色的,此时的位深就等于制作索引图事对应了几个颜色,比如我的对应了0,1,此时的位深是1,如果对应了0,1,2,3,4,此时的位深是4。下面的这段代码可以帮助你查看图片的信息,如果输出[0,1]说明制作正确。
import PIL
from PIL import Image
import numpy as np
image = PIL.Image.open('.....图片路径')
print(np.unique(image))
将灰度图转成索引图的代码如下:
# -*- coding: utf-8 -*-
__author__ = 'cheese'
from random import randint
from PIL import Image
import os
'''
根据灰度图的值制作索引图
'''
path =