Faster R-CNN训练自己的数据集Windows10+pycharm+tensorflow环境下

本文主要参考https://blog.csdn.net/u010554381/article/details/86233339,
yuanma
我用的源码是:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
说一下我的运行环境,Windows10,pycharm,tensorflow1.13.1,Keras2.2.4,python3.6。

1.先运行demo

  1. 现下载训练好的vgg16.ckpt,放到这个位置data \ imagenet_weights \ vgg16.ckpt。
  2. 配置环境,下载程序运行依赖的python包(cython,python-opencv,easydict等等)。
  3. 修改setup.py文件在第16行加入以下代码:
    Extension(
            'lib.utils.cython_bbox', 
            sources=['E:/python/tensorflow/Faster-RCNN-TensorFlow-Python3.5-master/lib/utils/bbox.c','E:/python/tensorflow/Faster-RCNN-TensorFlow-Python3.5-master/lib/utils/bbox.pyx'],
            include_dirs = [np.get_include(), 'E:/python/tensorflow/Faster-RCNN-TensorFlow-Python3.5-master/lib/utils'],
            extra_compile_args=[])

4.打开Anaconda Prompt,cd 到/Faster-RCNN-TensorFlow-Python3.5-master/data/coco/PythonAPI文件夹,然后运行:
python setup.py build_ext --inplace
python setup.py build_ext install
5.运行demo

2.准备数据集

按照网上的指导,制作VOC2007的标准数据集,包括使用labelimg标注数据,生成训练集和测试集。
下面是生成训练集和测试集的源码:

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 20 17:55:13 2020

@author: Administrator
"""
import os
import random

trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

3.训练自己数据源码修改

  1. 在Faster-RCNN-TensorFlow-Python3.5-master\lib\datasets\pascal_voc.py文件中,将以下代码中的类别替换为自己数据集的类别,‘background’, 这个不要修改,只修改其他的;
  2. Faster-RCNN-TensorFlow-Python3.5-master\lib\config\config.py中修改训练参数,即修改max_iters
  3. 打开Anaconda Prompt,cd 到/Faster-RCNN-TensorFlow-Python3.5-master文件夹,然后输入:
    python train.py
  4. 这个时候理论上就运行成功了。如果遇到问题,查看标题5中的内容。

4.验证模型

  1. 模型训练成功后,将最后保存的模型,.ckpt复制,然后将
    vgg16_faster_rcnn_iter_xxxx.ckpt.data-00000-of-00001的后缀删除,改为vgg16_faster_rcnn_iter_xxxx.ckpt。
  2. 修改CLASSES为自己的类型,
  3. 修改 tfmodel=为自己训练好模型的路径,我的路径为:
tfmodel='./default/voc_2007_trainval/default/vgg16_faster_rcnn_iter_40000.ckpt'

4.将自己想要验证的图片,放到data/demo文件中,然后修改demo.py的 im_names 的内容。
5.打开Anaconda Prompt,cd 到/Faster-RCNN-TensorFlow-Python3.5-master文件夹,然后输入:
python demo.py

5.遇到的问题总结

1.IndexError: list index out of range

删除fast-rcnn-master/data/cache/ 文件夹下的.pkl文件,或者改名备份,重新训练即可。

2.image invalid, skipping

  1. 将config.py中的roi_bg_threshold_low的值从改为0.0,然后训练
  2. 或者修改合适的batch_size,我的batch_size=16

3.total loss=nan

  1. lib/database/pascal_voc.py文件,将-1全部删除,最后改好之后为:
x1 = float(bbox.find('xmin').text)
y1 = float(bbox.find('ymin').text)
x2 = float(bbox.find('xmax').text)
y2 = float(bbox.find('ymax').text)

2.网上说修改学习率也可,我没有进行验证,但是使用步骤1已经不出现了

4.assert (boxes[:, 2] >= boxes[:, 0]).all()

  1. 修改train.py中的get_training_roidb函数,将imdb.append_flipped_images()屏蔽,改完之后为:
    在这里插入图片描述

5.R = [obj for obj in recs[imagename] if obj[‘name’] == classname] KeyError:‘1’

测试和训练前需要将cache中的pkl文件+VOCdevkit2007中annotations_cache的缓存删掉。删掉后可正常运行。

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
首先,要在Windows上使用PyTorch训练自己的数据集,需要安装适用于Windows的PyTorch、CUDA和CUDNN等软件。可以通过PyTorch官方网站下载适用于Windows的PyTorch版本,并根据官方文档的指引进行安装。 接下来,准备自己的数据集数据集应该包括图像和相应的标注信息,例如边界框和类别标签。可以使用标记工具(如LabelImg)来手动标注图像,并生成XML或CSV文件以存储标注信息。确保标注信息的格式与训练模型所需的格式一致。 然后,需要编写自定义的数据集加载器。可以创建一个继承自PyTorch的Dataset类的子类,在该子类中实现__getitem__和__len__等方法。在__getitem__方法中,加载图像和相应的标注信息,并对它们进行预处理(如缩放、裁剪等)。同时,可以使用PyTorch提供的transforms模块进行数据增强(如随机翻转、旋转等)。 在训练之前,还需要定义模型结构。可以使用现有的预训练模型,如ResNet,将其与分类器部分替换为适用于目标检测的模型。在Faster R-CNN中,常用的基础模型是ResNet和VGG等。 接下来,定义损失函数和优化器。在Faster R-CNN中,常用的损失函数是RPN(Region Proposal Network)的分类和回归损失,以及分类器和回归器的损失。可以使用PyTorch提供的损失函数模块(如CrossEntropyLoss和SmoothL1Loss)来定义这些损失函数,并选择合适的优化器(如SGD或Adam)进行参数更新。 最后,进行训练。使用加载器加载训练数据集,并在每个iteration中将数据传递给模型进行前向传播和反向传播,并进行参数更新。可以根据需要设置训练的epoch数、学习率和批量大小等参数。 需要注意的是,在Windows上训练自己的数据集可能会遇到一些环境配置和依赖问题。在遇到问题时,可以查阅相关文档和社区论坛,寻找解决方案。此外,还可以考虑使用Colab等在线平台来训练模型,这些平台已经预先配置好了环境,并且提供了免费的GPU加速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值