Faster RCNN训练自己的数据集【傻瓜式教程】

马肤
这是懒羊羊

一、下载源码

本文采用的源码是:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3

二、配置环境

由于本文是小白教程,光写几个环境怕有人配置不好或者配置版本搞乱。Faster RCNN配置环境比较复杂。我在这直接贴图我的环境版本图:

Faster RCNN训练自己的数据集【傻瓜式教程】,在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,没有,进入,安装,第1张

先安装tensorflow-gpu,然后依次安装cython、opencv-python、easydict、Pillow、matplotlib、scipy,版本的话看我的版本装就行。

三、安装C++编译环境

根据官网给的安装程序会报错:安装visual studio C++ build tools时遇到安装包缺失或损坏的问题。在这直接下载离线包安装,目前很多博主或者资源都要收费,这里免费共享给大家百度网盘链接:

链接:https://pan.baidu.com/s/1ClJQQ_Tfh9OSME489bNBng

提取码:5czp

下载后解压,右键管理员身份运行,如图:

Faster RCNN训练自己的数据集【傻瓜式教程】,在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,没有,进入,安装,第2张

四、编译环境

首先进入模型文件夹data\coco\PythonAPI下,在这个环境下进入到自己配置的环境中,依次运行以下命令:

python setup.py build_ext --inplace

这里会出现报错:error: command ‘C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe’ failed with exit status 1158

解决方案:在全局搜索工具中搜索rc.exe,没有工具的自行去下。如图

Faster RCNN训练自己的数据集【傻瓜式教程】,在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,没有,进入,安装,第3张

然后一定要退出窗口重新进入到自己配置的环境中,不退出继续执行还是会报这个错。然后重新运行以下命令:

python setup.py build_ext --inplace

接着运行

python setup.py build_ext install

然后进入到模型文件夹./lib/utils下,运行以下命令:

python setup.py build_ext --inplace

做完这一步,环境就算大功告成了。

五、制作自己的数据集

在data文件夹下新建VOC2007文件夹,VOC2007文件夹结构如图:

Faster RCNN训练自己的数据集【傻瓜式教程】,在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,没有,进入,安装,第4张

接下来划分数据集,会在ImageSets/Main下生成4个txt文件,具体看代码:

import os
import random
trainval_percent = 0.2
train_percent = 0.8
xmlfilepath = 'data/VOC2007/Annotations'
txtsavepath = 'data/VOC2007/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('data/VOC2007/ImageSets/Main/trainval.txt', 'w')
ftest = open('data/VOC2007/ImageSets/Main/test.txt', 'w')
ftrain = open('data/VOC2007/ImageSets/Main/train.txt', 'w')
fval = open('data/VOC2007/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()

这样数据集就算做好了。

六、开始训练

进入自己配置好的环境:

python train.py

运行开始训练。

七、解决报错

1.AttributeError:module tensorflow no attribute app

解决方案:将import tensorflow as tf 改为import tensorflow.compat.v1 as tf

2.AttributeError: ‘version_info’ object has no attribute ‘version’

解决方案:

Faster RCNN训练自己的数据集【傻瓜式教程】,在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,没有,进入,安装,第5张

找到箭头所指文件,打开将:

class version_info(NamedTuple):
    major: int
    minor: int
    micro: int
    releaselevel: str
    serial: int
    @property
    def __version__(self):
        return "{}.{}.{}".format(self.major, self.minor, self.micro) + (
            "{}{}{}".format(
                "r" if self.releaselevel[0] == "c" else "",
                self.releaselevel[0],
                self.serial,
            ),
            "",
        )[self.releaselevel == "final"]
    def __str__(self):
        return "{} {} / {}".format(__name__, self.__version__, __version_time__)
    def __repr__(self):
        return "{}.{}({})".format(
            __name__,
            type(self).__name__,
            ", ".join("{}={!r}".format(*nv) for nv in zip(self._fields, self)),
        )

替换为:

class version_info():
    def __init__(self, major: int, minor: int, micro: int, releaselevel: str, serial: int):
        self.major = major
        self.minor = minor
        self.micro = micro
        self.releaselevel = releaselevel
        self.serial = serial
    @property
    def __version__(self):
        return "{}.{}.{}".format(self.major, self.minor, self.micro) + (
            "{}{}{}".format(
                "r" if self.releaselevel[0] == "c" else "",
                self.releaselevel[0],
                self.serial,
            ),
            "",
        )[self.releaselevel == "final"]
    def __str__(self):
        return "{} {} / {}".format(__name__, self.__version__, __version_time__)
    def __repr__(self):
        return "{}.{}({})".format(
            __name__,
            type(self).__name__,
            ", ".join("{}={!r}".format(*nv) for nv in zip(self._fields, self)),
        )

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码