faster-rcnn.pytorch-1.0的jwyang当前最火版本代码复现与讲解

一、faster-rcnn.pytorch-1.0

1、下载代码与权重文件

选择的是当前最火的框架,直接从jwyang大神的github上下载即可,注意要选择pytorch1.0版本进行下载。
数据集准备:Pascal_VOC数据集
下载训练、验证测试数据集training, validation, test data 和 VOCdevkit

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

将三个文件解压到同一个文件夹内VOCdevkit

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

VOC数据集的文件夹tree结构:其中Annotations内放xml标注文件,JPEGImages内放图片,ImageSets/Main/内的四个txt文件分别是测试集、训练集、训练验证集、验证集。
最终在VOCdevkit目录下有VOC2007/Annotations等文件夹,数据集格式如图所示

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

特征提取训练权重准备:作者给出了两种特征提取网络的Pretrained Models,下载完成后把他们放到data/pretrained_model目录下(见作者github)

cp /data/faster-rcnn.pytorch.zip ~/
unzip faster-rcnn.pytorch.zip

将下载的压缩包拷贝到云服务器上后进行解压。

2、先安装所有环境

要进入到faster-rcnn.pytorch目录下,后执行命令

pip install -r requirements.txt

3、相关库函数版本以及安装

sudo pip uninstall torch
sudo pip install torch==1.0.0

sudo pip uninstall torchvision
sudo pip install torchvision==0.2.1

sudo pip uninstall scipy
sudo pip install scipy==1.0.0

可以跑通的版本号

cython==0.29.21
cffi==1.11.5
opencv-python==4.3.0.36
scipy==1.0.0
msgpack==1.0.0
easydict==1.9
matplotlib==3.3.0
pyyaml==5.3.1
tensorboardX==2.1

4、创建软连接

cd faster-rcnn.pytorch/data 
# 进入到我们创建的data文件夹
ln -s /home/mist/faster-rcnn.pytorch/data/VOCdevkit VOCdevkit2007
# ln -s VOCdevkit的绝对路径 VOCdevkit2007
# ln是链接(link)命令,ln -s 表示创建软连接。具体用法是:ln -s 源文件 目标文件。

5、编译CUDA依赖环境

cd lib
sudo python setup.py build develop

6、改bug

运行出现一个错误

ImportError: cannot import name '_mask'

解决——安装CoCO API

cd data
git clone https://github.com/pdollar/coco.git 
cd coco/PythonAPI
make
cd ../../..

7、训练

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

可用的示例

CUDA_VISIBLE_DEVICES=0 python trainval_net.py \
                   --dataset pascal_voc --net vgg16 \
                   --epochs 1 --bs 1 --nw 4 \
                   --lr  1e-3 --lr_decay_step 5 \
                   --cuda

参数选择图
在这里插入图片描述
从断点开始继续训练方法:
例如我训练好的模型名为faster_rcnn_1_9_9547.pth,它就对应了 checksession 为1 ,checkepoch为 9,checkpoint为 9547
例如我要继续训练这个模型到20次epoch,就可以写

CUDA_VISIBLE_DEVICES=0 python trainval_net.py --dataset pascal_voc --net res101 --bs 1 --nw 4  --cuda --r true --checksession 1 --checkepoch 8 --checkpoint 9547 --epochs 20

训练过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、测试

python test_net.py --dataset pascal_voc --net vgg16 \
                   --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
                   --cuda
python test_net.py --dataset pascal_voc --net vgg16 \
                   --checksession 1 --checkepoch 1 --checkpoint 10021 \
                   --cuda

测试过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、demo

  • 在跑demo文件过程中,也需要把类别修改成适应你的新数据集的形式。
//个例实验
python demo.py --net vgg16  --checksession 1  --checkepoch 10 --checkpoint 359 --cuda --load_dir models

二、生成数据集

1、修改xml文件参数

import os
import os.path
import xml.dom.minidom


# path="../xml/"
path_xml = '/home/Annotations/'
path_img='/home/JPEGImage/'
files = os.listdir(path_xml)  # 得到文件夹下所有文件名称
modify_folder = "Annotations"
modify_database = "labproject"

for xmlFile in files:  # 遍历文件夹
    if not os.path.isdir(xmlFile):  # 判断是否是文件夹,不是文件夹才打开
        print(xmlFile)
        xmlFile

    filepath = os.path.join(path_xml, xmlFile)
    # 最核心的部分,路径拼接,输入的是具体路径
    dom = xml.dom.minidom.parse(os.path.join(path_xml, xmlFile))
    root = dom.documentElement

    # 修改path
    oldpath = root.getElementsByTagName('path_xm')
    # print(oldpath[0].firstChild.data)

    newpath = path_img + xmlFile[0:6] + ".jpg"
    oldpath[0].firstChild.data = newpath

    # 修改folder
    oldfolder = root.getElementsByTagName('folder')
    oldfolder[0].firstChild.
### Fast R-CNN 代码实现教程 #### 实现框架概述 Fast R-CNN 是一种用于对象检测的方法,它通过引入多任务损失函数来提高速度和准确性[^2]。该算法允许端到端的训练,并能有效地处理不同尺度的目标。 #### 安装依赖库 为了运行 Fast R-CNN 的 Python 版本,通常需要安装一些必要的软件包: ```bash pip install numpy opencv-python matplotlib cython scipy ``` 对于更复杂的模型架构,则可能还需要 PyTorchTensorFlow 这样的深度学习框架支持。 #### 数据集准备 大多数开源项目会提供预处理过的数据集链接,比如 Pascal VOC 或 COCO 等标准测试集合。如果要使用自己的图片文件夹作为输入源的话,应该按照特定格式整理好图像路径以及对应的标注信息。 #### 训练过程概览 在开始之前先加载配置参数并初始化网络结构。接着定义损失函数优化器,在每次迭代过程中计算预测框位置偏差及类别概率分布之间的差异值,后反向传播调整权重直至收敛为止。 #### 示例代码片段 下面给出一段简单的伪代码表示如何构建一个基本版的 Fast R-CNN 模型: ```python import torch.nn as nn from torchvision import models class FastRCNN(nn.Module): def __init__(self, num_classes=20): super().__init__() self.backbone = models.vgg16(pretrained=True).features # ROI Pooling Layer... def forward(self,x,bboxes): features=self.backbone(x) rois_output=[] for bbox in bboxes: roi_feature=roi_pool(features,[bbox]) rois_output.append(roi_feature.view(-1)) return torch.stack(rois_output), ... ``` 这段代码展示了怎样利用 VGG16 提取特征图谱,并针对每一个候选区域执行感兴趣区域池化操作 (ROI Pooling),从而获得固定大小的特征向量供后续分类回归任务所用。 #### 可参考的具体GitHub仓库 - [pytorch-faster-rcnn](https://github.com/jwyang/faster-rcnn.pytorch):此仓库提供了完整的 Faster R-CNN 和 Fast R-CNN 的实现方式。 - [fasterrcnn-pytorch-tutorial](https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection):这是一个详细的PyTorch版本的对象检测教程,涵盖了从基础概念到实际应用的内容。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值