windows+tensorflow+fasterRcnn---3

下面就是用别人的框架训练自己的数据了



(1)  依旧是在源码  https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5的基础之上进行改进


(2)  准备数据集:

需要:在masteràdata 下创建一个自己的存放数据的文件夹,如:VOCdevkit2007在该文件夹下:

a.   创建文件夹Annotations---用于存放使用label image生成的xml 文件

b.   ImageSets---用于存放trian.txt   test.txt trainval.txt val.txt(图片的名称)

c.   JPEGImages—你所有的jpg格式的图片(包括训练测试等,txt文件中可以区分)

补充:对图片处理的 py code

批量修改图片名称,以及XML名称:

import os
import glob
import shutil
# 目录名称,你要自己修改
_dir = "H:/mypic/"
file_name = os.listdir(_dir)
print(file_name)

n=1
for file in file_name:
    pic_name = os.listdir(_dir+file)
    #print(pic_name)
    for pic in pic_name:
        if os.path.isdir(_dir+file+'/'+pic):
            xml_name=os.listdir(_dir+file+"/"+pic)
            for xml in xml_name:
                shutil.copy( _dir+file+'/'+pic+"/"+xml, 'G:/data/VOCdevkit2007/VOC2007/Annotations/')
               # print(pic)


              #修改个别XML名称
              # if xml == '1000010.xml':
                   #print(dir + file + '/' + pic)
                  # os.rename(_dir+file + '/' + pic + '/' + xml, _dir + file + '/' + pic + "/" + "100010.xml")


               # oldname = _dir+file+'/'+pic+"/"+xml
               # newname = _dir+file+'/'+pic+"/"+ str(n).zfill(6) + ".xml"
                #os.rename(oldname, newname)
                #n = n + 1
               # print(oldname, '--->', newname)

    # zfill是一个自动补零的函数 6 就是一共六位 不足的补零 只有字符串才有这个函数 所以转换了
    # newname = _dir+str(xml_name.index(xml)+1).zfill(6)+".xml"

"""
#批量修改图片的名称
n=1
for file in file_name:
    pic_name = os.listdir(_dir+file)
    print(pic_name)
    for pic in pic_name:
        oldname = _dir+file+"/"+pic

        newname = _dir+file+"/" + str(n).zfill(6) + ".jpg"
        os.rename(oldname, newname)
        n = n + 1
        print(oldname, '--->', newname)
    # zfill是一个自动补零的函数 6 就是一共六位 不足的补零 只有字符串才有这个函数 所以转换了
    # newname = _dir+str(xml_name.index(xml)+1).zfill(6)+".xml"
"""



由于我的图片是000001,000002....的顺序,我的用labelImage 进行标注的时候,没有修改图片名称,因此XML中文件的图片的路径名称就需要要修改,所以可用以下代码批量修改XML文件中图片路径名称,注意XML对应图片的名称!!!

import os
import re

_dir = "G:/Annotations/"
xmlList = os.listdir(_dir)
n = 1
for xml in xmlList:
    #f = open(_dir + xml, "r")
    f = open(_dir + xml, "r", encoding='utf-8')
    xmldata = f.read()
    xmldata = re.sub('\(.*?)\', 'G:/data/VOCdevkit2007/VOC2007/JPEGImages/' + str(n).zfill(6) + '.jpg', xmldata)
    f.close()
    f = open(_dir + xml, "w")
    f.write(xmldata)
    f.close()
    n += 1



faster rcnn训练需要图像的bounding box信息作为监督(ground truth),所以你需要将你的所有可能的object使用框标注,并写上坐标,最终是一个XML格式的文件,一个训练图片对应Annotations下的一个同名的XML文件


(3)  *修改…\data\VOCdevkit2007\VOC2007\ImageSets\Main  里面的train  trainval test val 的txt!


(4) Pascal_VOC.py是主要读取数据的接口,修改自己的标注的类别。

self.__classes=('__background__', # always index 0,’people’,’cat’)//改成自己的类别


(5)  一些解释说明

打开faster R-CNNà lib àdatasets 主要的而修改也是在这里面

a.   factory.py学过设计模式的应该知道这是个工厂类,用类生成imdb类并且返回数据库共网络训练和测试使用

b.  imdb.py这里是数据库读写类的基类,分装了许多db的操作,但是具体的一些文件读写需要继承继续读写

c.   pascal_voc.pyRoss在这里用pascal_voc.py这个类来操作



备注: pasca_voc.py中:

 def init(self, image_set, year,devkit_path=None)

/*这个是初始化函数,它对应着的是pascal_voc的数据集访问格式,其实我们将其接口修改的更简单一点*/


def image_path_at(self, i)

/*根据第i个图像样本返回其对应的path,其调用了image_path_from_index(self, index)作为其具体实现*/


def image_path_from_index(self, index)

//实现了 image_path的具体功能


def _load_image_set_index(self)

//加载了样本的list文件


def _get_default_path(self)

//获得数据集地址


def gt_roidb(self)

//读取并返回ground_truth(真实值,设定的一个正确的基准)的db


def selective_search_roidb

//读取并返回ROI的db


def _load_selective_search_roidb(self, gt_roidb)

//加载预选框的文件


def selective_search_IJCV_roidb(self)

//在这里调用读取Ground_truth和ROI db并将db合并


def _load_selective_search_IJCV_roidb(self, gt_roidb)

//这里是专门读取作者在IJCV上用的dataset


def _load_pascal_annotation(self, index)

//这个函数是读取gt的具体实现


def _write_voc_results_file(self, all_boxes)

//voc的检测结果写入到文件


def _do_matlab_eval(self, comp_id, output_dir='output')

//根据matlab的evluation接口来做结果的分析


def evaluate_detections

//其调用了_do_matlab_eval


def competition_mode

//设置competitoin_mode,加了一些噪点

有什么不对的地方,欢迎大家指出!!!!!么么哒~~

参考文献:http://www.cnblogs.com/louyihang-loves-baiyan/p/4903231.html


long way  to go ~~~~

你可能感兴趣的:(TensorFlow,faster_rcnn,winsows)