faster-rcnn训练自己的数据集——备忘

caffeauto caffeauto     2022-08-24     106

关键词:

新手学习,参考了http://www.cnblogs.com/CarryPotMan/p/5390336.html

只是在这篇博客中并没有说明自己训练集文件夹放置的位置以及修改中对应的文件信息。刚刚调通,记下来,以备以后自己少走些弯路。

配置py-faster-rcnn没什么好记的,文档也很多。

先说下数据集,需要准备三个文件夹:Annotations   Images   Imagelist

Images文件夹  :存放所有的 train 和 val 的图片

 

Annotation文件夹  :存放对应图片的xml文件(因为我没找到专门的xml格式标注的行人检测数据集,所以就自己用labelimg手动标注了200张图片)

 

Imagelist文件夹     :存放用于训练的图片名称.txt

==>此三个文件夹均放在 /home/cc/py-faster-rcnn/lib/datasets/xingren 文件夹下 ||  也可根据个人爱好,只需注意要修改读取文件中的路径与之对应。

工程目录介绍

只说接下来会用到的内容

  • lib

用来存放一些python接口文件,如其下的datasets主要负责数据库读取,config负责cnn一些训练的配置选项。

接下来的一系列修改也是在这个目录的datasets下进行的。

$faster_ROOT/lib/datasets 下需要修改的有 pascal_voc.py :图片及对于label的读取,

                     和 factory.py:工厂类,用类生成imdb类并返回数据库供网络训练和测试使用

一.下面补充说明pascal_voc.py的修改 

==>  记住改完后要将该文件改名成  ‘ xingren.py ’ !!!!!!!不然会出现from datasets.xingren import xingren  出错

 

1. __init__()修改

class xingren(imdb):        #以下全是在构建这个 xingren 类
    def __init__(self, image_set, devkit_path=None):  # modified
        imdb.__init__(self, image_set)
        self._image_set = image_set    #图片总文件夹存储在datasets目录下的位置 eg. xingren 
        self._devkit_path =  devkit_path   #根路径  /home/cc/py-faster-rcnn/lib/datasets
        self._data_path = os.path.join(self._devkit_path,image_set)   
          #上句操作等同==>self._data_path='/home/cc/py-faster-rcnn/lib/datasets/xingren' self._classes = ('__background__', # always index 0 'person') #two classes self._class_to_ind = dict(zip(self.classes, xrange(self.num_classes))) # form the dict{'__background__':'0','person':'1'} self._image_ext = '.jpg' #根据自己图片的格式,我用的.png也没问题 self._image_index = self._load_image_set_index('ImageList.txt') #加载样本的list.txt文件,需要注意路径是从 'lib/datasets/'下开始的。

#******(该函数其余部分不做修改)

 

2.image_path_from_index()修改  

def image_path_from_index(self, index): #modified
    """
    Construct an image path from the image's "index" identifier.
    """
    image_path = os.path.join(self._data_path,'Images',index +'.jpg') #index就是从list.txt中读取的图片名
    assert os.path.exists(image_path), \
            'Path does not exist: {}'.format(image_path)
    return image_path

 

3._load_image_set_index()修改            -- 在__init__()中被调用

def _load_image_set_index(self,imagelist): # modified
    """
    Load the indexes listed in this dataset's image set file.
    """
    # Example path to image set file:
    # self._devkit_path + /VOCdevkit2007/VOC2007/ImageSets/Main/val.txt
    image_set_file = os.path.join(self._data_path, 'Imagelist',imagelist)
    assert os.path.exists(image_set_file), \
            'Path does not exist: {}'.format(image_set_file)
    with open(image_set_file) as f:
        image_index = [x.strip() for x in f.readlines()]
    return image_index

 

4._load_pascal_annotation()修改   只是修改了xml文件读取的路径

def _load_pascal_annotation(self, index):    #modified
    """
    Load image and bounding boxes info from XML file in the PASCAL VOC
    format.
    """
    filename = os.path.join(self._data_path, 'Annotations', index + '.xml')
    tree = ET.parse(filename)
    objs = tree.findall('object')

 

5.最后在main函数下也修改相应的路径

from datasets.xingren import xingren
d = xingren('xingren', '/home/cc/py-faster-rcnn/lib/datasets/')
res = d.roidb
from IPython import embed; embed()

 

二.factory.py的修改

# --------------------------------------------------------
# Fast R-CNN
# Copyright (c) 2015 Microsoft
# Licensed under The MIT License [see LICENSE for details]
# Written by Ross Girshick
# --------------------------------------------------------

"""Factory method for easily getting imdbs by name."""

__sets = {}

from datasets.xingren import xingren
import numpy as np

# # Set up voc_<year>_<split> using selective search "fast" mode
# for year in ['2007', '2012']:
#     for split in ['train', 'val', 'trainval', 'test']:
#         name = 'voc_{}_{}'.format(year, split)
#         __sets[name] = (lambda split=split, year=year: pascal_voc(split, year))
#
# # Set up coco_2014_<split>
# for year in ['2014']:
#     for split in ['train', 'val', 'minival', 'valminusminival']:
#         name = 'coco_{}_{}'.format(year, split)
#         __sets[name] = (lambda split=split, year=year: coco(split, year))
#
# # Set up coco_2015_<split>
# for year in ['2015']:
#     for split in ['test', 'test-dev']:
#         name = 'coco_{}_{}'.format(year, split)
#         __sets[name] = (lambda split=split, year=year: coco(split, year))

name = 'xingren'
devkit = '/home/cc/py-faster-rcnn/lib/datasets/'
__sets['xingren'] = (lambda name = name,devkit = devkit: xingren(name,devkit))

def get_imdb(name):
    """Get an imdb (image database) by name."""
    if not __sets.has_key(name):
        raise KeyError('Unknown dataset: {}'.format(name))
    return __sets[name]()

def list_imdbs():
    """List all registered imdbs."""
    return __sets.keys()

大功告成!!!!

还有一些模型训练参数的调整,我后面再接着看。

 

路径总结:

    main函数中的参数传入:d = xingren('xingren', '/home/cc/py-faster-rcnn/lib/datasets')  ==>__init__(self,image_set,devkit_path)

      self._devkit_path = devkit_path                         #根路径 /home/cc/py-faster-rcnn/lib/datasets

      self._data_path = os.path.join(self._devkit_path,image_set)           #路径 /home/cc/py-faster-rcnn/lib/datasets/xingren

      image_path = os.path.join(self._data_path,'Images',index+ '.jpg')         #路径 /home/cc/py-faster-rcnn/lib/datasets/xingren/Images/xxxxx.jpg 

   __init__函数中参数传入:  self._image_index = self._load_image_set_index('Trainval.txt')

      image_set_file = os.path.join(self._data_path, 'Imagelist',imagelist)        #路径 /home/cc/py-faster-rcnn/lib/datasets/xingren/Imagelist/Trainval.txt

      filename = os.path.join(self._data_path, 'Annotations', index + '.xml')       #路径 /home/cc/py-faster-rcnn/lib/datasets/xingren/Annotations/xxxxxx.xml

 

如何在faster-rcnn上训练自己的数据集

参考技术A不要发私信 查看详情

转载faster-rcnn+zf用自己的数据集训练模型(matlab版本)

...以看http://blog.csdn.net/sinat_30071459/article/details/50723212) Faster-RCNN源码下载地址:Matlab版本:https://github.com/ShaoqingRen/faster_rcnnPyt 查看详情

windows下使用自己制作的数据集训练faster-rcnn(tensorflow版)用于目标检测

步骤一下载配置windows下tensorflow版faster-rcnn,参考博客:windows10下运行tensorflow版的faster-Rcnn步骤二制作自己的数据集参考博客:http://blog.csdn.net/u011574296/article/details/78953681步骤三用你的Annotations,Imag 查看详情

深度学习caffe实战笔记(19)windows平台faster-rcnn制作自己的数据集

...过程,这篇博客先介绍如果制作voc2007自己的数据集用于faster-rcnn训练,下一篇博客介绍如何用faster-rcnn训练自己的数据。1、准备图像图像要用.jpg或者jpeg格式的,如果是png或者其它格式,自己转换一下就好,图像名称要用000001.jpg... 查看详情

折腾faster-rcnn(三)--训练篇

...(空格分隔):Linux深度学习前面,我们已经成功跑起来faster-rcnn,并且自己动手训练了PascalVOC2007图像集,但是笔者接下来继续沿着官方文件跑PascalVOC2012,训练到第二阶段的某个点,程序就开始报错退出。查看logs发现,找不到... 查看详情

使用labelimg制作自己的数据集(voc2007格式)用于faster-rcnn训练(代码片段)

https://blog.csdn.net/u011956147/article/details/53239325https://blog.csdn.net/u011574296/article/details/789536812018年01月02日17:13:59 ZealCV 阅读数:10459 标签: faster-r-cnn数据标注 更多个人分类: 深度学习 版权声明:本文为博主... 查看详情

在自定义数据集上训练 Faster-RCNN 模型时加载检查点

】在自定义数据集上训练Faster-RCNN模型时加载检查点【英文标题】:LoadingcheckpointswhiletrainingaFaster-RCNNmodelonacustomdataset【发布时间】:2021-12-1002:16:09【问题描述】:我正在尝试使用Faster-RCNN架构(准确地说是FasterR-CNNResNet50V1640x640,... 查看详情

深度学习和目标检测系列教程11-300:小麦数据集训练faster-rcnn模型(代码片段)

@Author:Runsen上次训练的Faster-RCNN的数据格式是xml和jpg图片提供,在很多Object-Detection中,数据有的是csv格式,数据集来源:https://www.kaggle.com/c/global-wheat-detectionwidth和heigth是图片的长和宽,b 查看详情

pytorch Faster-RCNN 的验证损失

】pytorchFaster-RCNN的验证损失【英文标题】:ValidationlossforpytorchFaster-RCNN【发布时间】:2020-06-0522:10:21【问题描述】:我目前正在使用从pytorch预训练的Faster-RCNN模型(例如在torchvisiontutorial中)的迁移学习对自定义数据集进行对象检... 查看详情

yolov7训练自己的数据集(口罩检测)(代码片段)

YOLOv7训练自己的数据集(口罩检测)前言前提条件实验环境项目结构制作自己的数据集数据集目录结构训练自己的数据集VOC格式数据集转换成YOLO格式数据集修改cfg配置新建一个myyolov7.yaml配置文件myyolov7.yaml内容创建自己... 查看详情

yolov7训练自己的数据集(代码片段)

yolov7训练自己的数据集一.安装yolov7并配置1.安装Anaconda2.创建虚拟环境3.下载yolov7源码4.下载权重5.安装依赖二.运行目标检测三.训练自的数据集1.创建所需文件2.下载labelImg标注工具3.配置训练的相关文件四.正式训练五.使用自己的... 查看详情

pytorch定义并训练自己的数字数据集

...触很多教程都是直接加载datasets已有的MNIST等,如果想要训练自己的数据就可以采用这个方法。基本步骤:获取并读取数据-->定义网络模型和损失函数-->使用优化算法训练模型-->利用验证数据集求取网络识别准确度1、首先... 查看详情

深度学习和目标检测系列教程10-300:通过torch训练第一个faster-rcnn模型(代码片段)

@Author:Runsen上次介绍了Faster-RCNN模型,那么今天就开始训练第一个Faster-RCNN模型。本文将展示如何在水果图像数据集上使用Faster-RCNN模型。代码的灵感来自此处的Pytorch文档教程和Kagglehttps://pytorch.org/tutorials/intermediate/torc... 查看详情

如何在 caffe 中训练/测试我自己的数据集?

】如何在caffe中训练/测试我自己的数据集?【英文标题】:Howtotraining/testingmyowndatasetincaffe?【发布时间】:2016-03-1820:53:55【问题描述】:我从Caffe开始,mnist示例运行良好。我的火车和标签数据为data.mat。(我有300个训练数据,其... 查看详情

如何在 caffe 中训练/测试我自己的数据集?

】如何在caffe中训练/测试我自己的数据集?【英文标题】:Howtotraining/testingmyowndatasetincaffe?【发布时间】:2016-10-1614:36:34【问题描述】:我从Caffe开始,mnist示例运行良好。我的火车和标签数据为data.mat。(我有300个训练数据,其... 查看详情

mmdetection训练自己的coco数据集(代码片段)

训练前的准备训练数据的导入将自己的COCO数据集放入到下载的mmdetection的源码里,(如果没有data文件夹需要新建)data->COCO->你的COCO数据集文件格式如下:mmdetection├──mmdet├──tools├──configs├──data│... 查看详情

yolox训练自己的数据集(超详细)

...些库文件        (3)、安装apex文件二、YOLOX训练自己的数据集1、数据集预处理2、修改代码(1ÿ 查看详情

在自己的数据集上训练 TensorFlow 对象检测

】在自己的数据集上训练TensorFlow对象检测【英文标题】:TrainTensorflowObjectDetectiononowndataset【发布时间】:2017-12-1121:27:26【问题描述】:在花了几天时间尝试完成这项任务后,我想分享一下我如何回答这个问题的经验:如何使用TS... 查看详情