faster-Rcnn.pytorch 训练pascal_VOC数据集

  • Post author:
  • Post category:其他




faster-Rcnn.pytorch 训练pascal_VOC数据集



参考文章:



使用的代码:

https://github.com/jwyang/faster-rcnn.pytorch



主要参考的博客有:

非常感谢以下博客的作者

https://blog.csdn.net/cube_suger/article/details/112648721?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162916910816780271523748%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162916910816780271523748&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2

all

sobaiduend~default-4-112648721.first_rank_v2_pc_rank_v29&utm_term=win10%20faster%20rcnn%20pytorch&spm=1018.2226.3001.4187

https://blog.csdn.net/sinat_35862942/article/details/106909911?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

https://blog.csdn.net/qq_39542170/article/details/119800534

https://blog.csdn.net/wty98wzq/article/details/112133618

https://blog.csdn.net/weixin_42782150/article/details/109820615?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162934313916780264044972%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162934313916780264044972&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2

all

sobaiduend~default-1-109820615.first_rank_v2_pc_rank_v29&utm_term=https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0&spm=1018.2226.3001.4187

https://blog.csdn.net/qq_36852276/article/details/100154097



模型训练



1. 代码下载+环境配置



win10



1. conda python3.6
conda create -n pytorch python=3.6
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
pip install -r requirements.txt



2. cuda 10.1以及相应的cudann安装

https://developer.nvidia.com/cuda-10.1-download-archive-update2?target_os=Windows&target_arch=x86_64&target_version=7&target_type=exelocal

https://developer.nvidia.com/rdp/cudnn-archive

cuda安装:


(CUDA、CUDNN在windows下的安装及配置_花花少年的博客-CSDN博客_cudnn

如果需要卸载的话:

https://blog.csdn.net/m0_37605642/article/details/99100924



知识内容


cuda,cudann是什么

https://www.jianshu.com/p/622f47f94784

CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的

运算平台

。 CUDA是一种由NVIDIA推出的

通用并行计算架构



该架构使GPU能够解决复杂的计算问题

cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。(nn——neural network)



ERROR1

我们使用的是pytorch1.4,cuda10.1与其兼容,而RTX30系列不支持cuda10.1,所以RTX30系列无法完成该项目,当然你可以使用非pytorch10.4版本,但是否可以实现未知


检查pytorch是否与cuda适配

import torch
print(torch.__version__)
print(torch.cuda.is_available())# ture 


3.配置visual studio

这个项目

setup.py

文件需要vs

并且由于需要与cuda配合,而cuda10.1 不接受2022版

需下载visual studio2019

如果之前安装过vs(非2019版本)卸载

​ windows 中 在visual studio install 中卸载,之后在官网上下载2019版本

​ 勾选C++的桌面开发即可



4. 下载已有Pascal_VOC数据集

http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar

http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar

http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

之后使用tar命令,将这三个文件和并解压到一个文件夹中,(由于我之前安装过wsl 可以使用linux命令,应该也有其他的方法进行合并解压)

tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

可以设置软连接,也可以直接放在data文件夹中



5. 下载与预练数据集放到相应位置

https://github.com/jwyang/faster-rcnn.pytorch内有vgg16网络的和resNet的



6. setup
python setup.py build develop

此时常见的error都在[win10和win7系统配置faster rcnn(pytorch)_来颗方糖的博客-CSDN博客_faster rcnn windows](https://blog.csdn.net/cube_suger/article/details/112648721?ops_request_misc=%7B%22request%5Fid%22%3A%22162916910816780271523748%22%2C%22scm%22%3A%2220140713.130102334…%22%7D&request_id=162916910816780271523748&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2

all

sobaiduend~default-4-112648721.first_rank_v2_pc_rank_v29&utm_term=win10 faster rcnn pytorch&spm=1018.2226.3001.4187)有汇总,如果完全按照我之前的教程做的,应该只会出现error3的情况



2. train,test,demo

train:
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \
                   --dataset pascal_voc --net vgg16 \
                   --bs $BATCH_SIZE --nw $WORKER_NUMBER \
                   --lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
                   --cuda
python test_net.py --dataset pascal_voc --net vgg16 \
                   --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
                   --cuda
python demo.py --net vgg16 \
               --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
               --cuda --load_dir path/to/model/directoy


ERROR2

这个可能是项目自带的一个bug,但我看到许多博客上都没写这个问题

训练test_net.py 时

FileNotFoundError: [Errno 2] No such file or directory: '000001.xml'

文件路径问题

[

Errno 2] No such file or directory: ‘000001.xml’ · Issue #654 · jwyang/faster-rcnn.pytorch (github.com)



loolzaaa

大佬解决了这个问题

python 的

{:s}



{}

不一样吗,这个我没查到这个知识点,知道的大佬可以告诉我



2. Pascal_VOC 文件制作

xml中有三种方法解析:sax,dom,ElementTree

随便使用一种就🆗



ElementTree 相关知识点

import xml.ElementTree as ET
tree=ET.parse(file) #对文件进行解析内存中形成树数据格式
annotation=tree.getroot()#获得根节点,即annotation节点
objects=annotation.findall('object')#annotation 的所有objects子节点
path=annotation.find('path')#annotation 的第一个path节点
path.text='new_path'#对内存中path的内容进行更改
tree.write(file,encoding='utf-8') #树数据格式写到file文件中



os 相关知识点

#pfile 指 path\file
import os
files=os.listdir('path') #将path中的文件(包括目录文件的名字以列表形式保存)
os.path.isfile(pfile)
os.path.isdir(pfile)
'a.jpg'.endwith('jpg')#判断点号后面的字符是不是jpg
'a.jpg'.split('.') #以. 为分隔符,输出n个字符串(列表形式)
os.path.split('pfile') #分解为[path,file]
os.path.splitdrive('pfile')# 分解出盘符
os.path.splitext('file')#分解出后缀
os.rename('old_pfile','new_pfile')

基本会以上几个函数,就可以操作Pascal_VOC 数据了

这是我自己写的python 文件,如果能帮到你的话,记得在github里面点个大大的star和fork,这真的会让我很开心!!!!!用爱发电真的不容易!!!!


Pascal_VOC-: Pascal_VOC 文件处理 (github.com)

之后把自己数据集变成Pascal_VOC数据集格式,替换调data中的文件夹

JPGImages
Annotations
ImageSets

数据集划分:

# VOC数据集制作——ImageSets\Main里的四个txt文件
import os
import random

trainval_percent = 0.8
train_percent = 0.75
xmlfilepath = 'F:/data/VOC2007/Annotations'
txtsavepath = 'F:/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(txtsavepath + '/trainval.txt', 'w')
ftest = open(txtsavepath + '/test.txt', 'w')
ftrain = open(txtsavepath + '/train.txt', 'w')
fval = open(txtsavepath + '/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()





版权声明:本文为m0_61702267原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。