Autodl服务器中Faster-rcnn(jwyang)训练自己数据集(二)
创始人
2025-01-11 18:33:56
0

前言

上一章中完成了faster-rcnn(jwyang版本)的复现,本节将在此基础进一步训练自己的数据集~

项目地址:https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0
复现环境:autodl服务器+python3.6+cuda11.3+Ubuntu20.04+Pytorch1.10.0

往期回顾

Autodl服务器中Faster-rcnn(jwyang)复现(一)

目录

  • 一、数据准备
  • 二、修改源代码
  • 三、开始训练
  • 四、开始测试
  • 五、开始推理

一、数据准备

第一步:查看VOC数据集得文件夹tree结构

VOCdevkit2007 └── VOC2007     ├── Annotations     ├── ImageSets     │   └── Main     │       ├── test.txt     │       ├── train.txt     │       ├── trainval.txt     │       └── val.txt     └── JPEGImages 

其中Annotations内放xml标注文件,JPEGImages内放图片,ImageSets/Main/内的四个txt文件分别是测试集、训练集、训练验证集、验证集。自己数据集依然采用VOC2007数据集的类。

第二步:制作自己数据集

(1)把原来的图片删掉,位置是:

/root/faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages 

将自己数据集的图片上传至JPEGImages

(2)更改xml文件中属性值

用这个代码可以任意改变xml里的属性值,比如你想把xml文件中类别名称改变,或把图片名称、路径等值改变,参考以下代码

#这里只修改folder部分 import os import os.path import xml.dom.minidom   path = "/home/zhangxin/faster-rcnn.pytorch/data/VOCdevkit/VOC2007/Annotations/" files = os.listdir(path)  #得到文件夹下所有文件名称  for xmlFile in files: #遍历文件夹     if not os.path.isdir(xmlFile): #判断是否是文件夹,不是文件夹才打开         print(xmlFile)       #将获取的xml文件名送入到dom解析     dom = xml.dom.minidom.parse(os.path.join(path, xmlFile)) #输入xml文件具体路径     root = dom.documentElement     #获取标签以及的值     name = root.getElementsByTagName('name')     folder = root.getElementsByTagName('folder')      #对每个xml文件的多个同样的属性值进行修改。此处将每一个属性修改为VOC2007     for i in range(len(folder)):           print(folder[i].firstChild.data)         folder[i].firstChild.data = 'VOC2007'         print(folder[i].firstChild.data)     #将属性存储至xml文件中     with open(os.path.join(path, xmlFile),'w') as fh:         dom.writexml(fh)         print('已写入') 

这里修改folder部分,与VOC一样
在这里插入图片描述

完成后同样把原来的xml删掉,位置是:

/root/faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations 

将自己数据集的图片上传至Annotations

(3)自己制作trainval.txt,里面存储自己的待训练图片名称,记住不要带.jpg后缀,代码如下:

# !/usr/bin/python # -*- coding: utf-8 -*- import os import random      trainval_percent = 0.8  #trainval占比例多少 train_percent = 0.7  #test数据集占比例多少 xmlfilepath = '/root/faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations/'   txtsavepath = '/root/faster-rcnn/data/VOCdevkit2007/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('/root/faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main/trainval.txt', 'w')   ftest = open('/root/faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main/test.txt', 'w')   ftrain = open('/root/faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main/train.txt', 'w')   fval = open('/root/faster-rcnn/data/VOCdevkit2007/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()   

生成结果:

在这里插入图片描述

二、修改源代码

第一步:在lib\datasets\pascal_voc.py中更改self._classes中的类别,添加自己的类

在这里插入图片描述

三、开始训练

训练之前一定要激活自己创建的my-env虚拟环境

conda activate my-env 

参考:Autodl服务器中Faster-rcnn(jwyang)复现

CUDA_VISIBLE_DEVICES=0 python trainval_net.py \                    --dataset pascal_voc --net vgg16 \                    --bs 4 --nw 0 \                    --lr 0.002 \                    --cuda 
  • 报错1
    在这里插入图片描述
    原因:在训练原数据集VOC时,图像数量是5964张(进行了数据增强),这时会保存训练信息至缓存中,文件路径为:/home/mw/faster-rcnn/data/cache/voc_2007_trainval_gt_roidb.pkl
    解决:在重新训练新数据集的时候,会读取这个缓存配置,以加快训练,那么此时就入坑了,我的新集合只有994张,所以训练时读的缓存里,需要读的图像还是原来那5964张,那势必会找不到这5964张图像,所以要做的就是,把这个缓存文件voc_2007_trainval_gt_roidb.pkl删除

  • 报错2
    在这里插入图片描述
    解决过程:https://blog.csdn.net/xzzppp/article/details/52036794

跑通如下:

在这里插入图片描述

四、开始测试

python test_net.py --dataset pascal_voc --net vgg16 --checksession 1 --checkepoch 3 --checkpoint 2384  --cuda 

在这里插入图片描述

解决:与上述相似,把这个缓存文件/home/mw/faster-rcnn/data/cache/voc_2007_test_gt_roidb.pkl删除

效果如下:

在这里插入图片描述
在VOC上12个class的mAP为83.4%

五、开始推理

第一步:修改demo.py中pascal_classes类别

在这里插入图片描述

第二步:把几张测试图片放到images中

在这里插入图片描述

第三步:运行demo.py

python demo.py --net vgg16  --checksession 1  --checkepoch 3 --checkpoint 2384 --cuda --load_dir models 

推理结果如下:

在这里插入图片描述

好了,到这一步关于faster-rcnn训练自己的数据集就结束了,完结撒花~

相关内容

热门资讯

专业讨论!德扑之星真破解套路(... 专业讨论!德扑之星真破解套路(辅助挂)软件透明挂(有挂了解)-哔哩哔哩;人气非常高,ai更新快且高清...
每日必看!智星德州菠萝外挂检测... 每日必看!智星德州菠萝外挂检测(辅助挂)软件透明挂(有挂教学)-哔哩哔哩1、玩家可以在智星德州菠萝外...
透视透明挂!轰趴十三水有后台(... 轰趴十三水有后台赢率提升策略‌;透视透明挂!轰趴十三水有后台(辅助挂)软件透明挂(有挂详情)-哔哩哔...
发现玩家!德扑ai助手软件(辅... 发现玩家!德扑ai助手软件(辅助挂)透视辅助(有挂教学)-哔哩哔哩;玩家在德扑ai助手软件中需先进行...
一分钟了解!x-poker辅助... 一分钟了解!x-poker辅助软件(辅助挂)辅助透视(有挂攻略)-哔哩哔哩1、每一步都需要思考,不同...
一分钟揭秘!德州最新辅助器(辅... 一分钟揭秘!德州最新辅助器(辅助挂)透视辅助(有挂攻略)-哔哩哔哩;德州最新辅助器最新版本免费下载安...
玩家攻略推荐!德州辅助(辅助挂... 玩家攻略推荐!德州辅助(辅助挂)辅助透视(有挂了解)-哔哩哔哩是由北京得德州辅助黑科技有限公司精心研...
揭秘真相!pokernow德州... 《揭秘真相!pokernow德州(辅助挂)辅助透视(有挂介绍)-哔哩哔哩》 pokernow德州软件...
五分钟了解!德州之星辅助器(辅... 五分钟了解!德州之星辅助器(辅助挂)辅助透视(有挂透明)-哔哩哔哩1、很好的工具软件,可以解锁游戏的...
推荐一款!pokermaste... 1、推荐一款!pokermaster有外挂(辅助挂)透视辅助(有挂教学)-哔哩哔哩;详细教程。2、p...