py-faster-rcnn用自己的数据训练模型(CPU版本)

本文介绍了如何在CPU环境下利用py-faster-rcnn训练自定义数据集,包括数据集制作、文件结构、Python脚本修改等步骤,详细解析了从图片命名、XML文件生成到训练模型的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统环境

ubuntu14.04

python2.7

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

说明:基于cpu环境的py-faster-rcnn具体配置过程可以看我的另一篇文章点击打开链接

下面我将从制作做数据集开始讲解利用py-faster-rcnn训练自己的数据模型的过程。

制作数据集

在制作自己的数据集之前,我们先下载VOC2007数据集。

百度云地址:http://pan.baidu.com/s/1gfdSFRX
解压,然后,将该数据集放在py-faster-rcnn-master\data目录下。(后面你将用你的训练数据集替换VOC2007数据集。(替换Annotations,ImageSets和JPEGImages)
(用你的Annotations,ImagesSets和JPEGImages替换py-faster-rcnn\data\VOCdevkit2007\VOC2007中对应文件夹)

文件结构如下所示:

Annotations中是所有的xml文件
JPEGImages中是所有的训练图片
Main中是4个txt文件,其中test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集

(一)图片命名

我们需要将自己的数据集做成VOC2007格式用于训练,那么我们应该首先将图片重新命名为“000001.jpg”这种格式,这是VOC2007标准格式。我们首先将训练图片全部放入同一个文件夹下,如我刚开始做测试时将图片放在了下面路径下:/home/wlw/VS_code_projects/cat_dog_picture。下面利用python将这些图片进行批量重命名。

#_*_coding:utf-8
import os

pic_path="/home/wlw/VS_code_projects/cat_dog_picture"

def rename():
    piclist=os.listdir(pic_path)
    total_num=len(piclist)
   
    i=1
    for pic in piclist:
        if pic.endswith(".jpg"):
            old_path=os.path.join(os.path.abspath(pic_path),pic)#os.path.abspath获得绝对路径
            new_path=os.path.join(os.path.abspath(pic_path),'000'+format(str(i),'0>3')+'.jpg')

            os.renames(old_path,new_path)
            print u"把原图片命名格式:"+old_path+u"转换为新图片命名格式:"+new_path
            #print "把原图片路径:%s,转换为新图片路径:%s" %(old_path,new_path)
            i=i+1
    
    print "总共"+str(total_num)+"张图片被重命名为:" "000001.jpg~"+'000'+format(str(i-1),'0>3')+".jpg形式"


rename()

效果如下:

(二)画目标包围框并自动生成XML文件

这里我利用了labelimg工具点击打开链接,可以利用它自定义绘制目标包围框,并自动生成xml文件


利用python将XML文件生成ImageSets\Main里的四个txt文件

txt文件里的内容为:

即图片名(无后缀),test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集。这里我设定,trainval大概是整个数据集的80%,test也大概是整个数据集的20%;train大概是trainval的80%,val大概是trainval的20%。python 代码如下:

#_*_coding:utf-8
import os
import random
#import numpy as np
#from sklearn.model_selection import train_test_split

xmlfilepath="/home/wlw/VS_code_projects/pic_xml"
txtsavepath="/home/wlw/VS_code_projects/pic_txt"
trainval_percent=0.8 #traincal占整个数据集的80%,剩下的就是test所占的百分比
train_percent=0.8 #train占trainval的百分比,剩下的就是val所占百分比

def xml_to_txt():
    xmllist=os.listdir(xmlfilepath)#xml文件列表
    xml_num=len(xmllist)#xml文件数量
    num_list=range(xml_num)#将xml文件分别用数字表示
    
    # trainval=xmllist[:int(num_
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值