跑通Pytorch1.0版本的Faster-RCNN,并训练自己的数据集(一)

我的环境: Ubuntu 18.04 + cuda 10.1 + pytorch=1.0.0 + torchvision=0.2.1 + python=3.6.2

 

代码参考的是github上大神的开源代码https://github.com/jwyang/faster-rcnn.pytorch

 

Step一、下载安装

1、首先代码下载,自己down或者git命令clone都可,需要注意的是repo的master分支是pytroch=0.4版本的,所以需要切换到pytorch-1.0分支

git命令

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

在faster-rcnn.pytorch文件夹目录下终端运行

git checkout pytorch-1.0
#打开terminal cd 到faster-rcnn.pytorch文件,同时在内创建一个data文件夹
cd faster-rcnn.pytorch && mkdir data
#并在data文件夹下创建一个pretrained_model,用来存放之后的预训练模型
cd data && mkdir pretrained_model
#安装依赖的pyhon包,这一步若是报错说没有权限访问安装就在开头加上 sudo
#注意scipy版本,不需要太高,我的scipy=1.2.1
pip install -r requirements.txt

接着回退到根目录下运行

cd ..
cd lib
python setup.py build develop

2、然后是预训练模型的下载

作者给出了两种特征提取网络的Pretrained Models,下载链接:

下载完成后把他们放到data/pretrained_model目录下。

3、数据集的准备

这边使用的是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

最终在VOCdevkit目录下有VOC2007/Annotations等文件夹,数据集格式如图所示

VOCdevkit
└── VOC2007
    ├── Annotations
    ├── ImageSets
    │   └── Main
    │       ├── test.txt
    │       ├── train.txt
    │       ├── trainval.txt
    │       └── val.txt
    └── JPEGImages
#VOC数据集的文件夹tree结构:其中Annotations内放xml标注文件,JPEGImages内放图片,
#ImageSets/Main/内的四个txt文件分别是测试集、训练集、训练验证集、验证集。

cd 先前创建的data文件夹,创建软连接 ln -s $VOCdevkit \home\VOCdevkit2007

删除软连接方式:在软连接所在路径下 rm -rf VOCdevkit2007
 

Step二、训练

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 res101 --epochs 20 --bs 1 --nw 4 --lr 1e-2 --lr_decay_step 8 --use_tfb --mGPUs --cuda

参数的意义:

    CUDA_VISIBLE_DEVICES:使用哪一个GPU
    –dataset pascal_voc:用pascal数据集

 test_net.py --dataset pascal_voc --net vgg16 --checksession 1 --checkepoch 6 --checkpoint 416 --cuda


    –net res101:用res101作为特征提取网络,可选vgg16
    –epochs 20:20个epoch,每个epoch都过一遍全部的训练图。
    –bs 1:batch_size=1
    –nw 4:num_works=4,4线程进行读取,我的显卡显存是11G,如果显存小的话就设为1
    –lr 1e-2: 初始学习率是0.01;可选参数
    –lr_decay_step 8: 每几个epoch学习率衰减一次(默认衰减一次0.1,通过decay_gamma可调);可选参数
    –use_tfb: 使用tensorboardX实现记录和可视化,不用就不写;可选参数
    –mGPUs: 多GPU训练,不用就不写该命令;可选参数
    –cuda:使用cuda;

 

Step三、测试

 

测试训练完成模型的效果

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

e.g.  SESSION=1, EPOCH=6, CHECKPOINT=416

python test_net.py --dataset pascal_voc --net vgg16 --checksession 1 --checkepoch 6 --checkpoint 416 --cuda

批量测试图片

run demo.py

python demo.py --dataset pascal_voc --net res101  --cfg cfgs/res101.yml --load_dir models --checksession 1 --checkepoch 28 --checkpoint 2813 --image_dir images --cuda

参数的意义:

    –dataset pascal_voc:用pascal数据集
    –net res101:用res101作为特征提取网络,可选vgg16
    –cfg cfgs/res101.yml:加载res101的配置
    –load_dir models --checksession 1 --checkepoch 28 --checkpoint 2813:这四个参数共同决定读取models/文件夹中训练好的faster_rcnn_1_28_2813.pth权重文件
    –image_dir path/to/your/image:需要批量检测的图像文件路径
    –bs 1:batch_size=1
    –cuda:使用cuda
    测试好的图片输出在与image相同的文件夹内,其命名为原图名字+_det。
 

下一篇介绍如何训练测试自己的数据集

Faster R-CNN(区域卷积神经网络)是一种流行的目标检测算法,它结合了Region Proposal Network (RPN) 和 Fast R-CNN 的优点。如果你想在PyTorch上使用Faster R-CNN训练自己的数据集,你需要遵循以下步骤: 1. 数据准备:首先,你需要准备标注好的训练图像和相应的边界框(BBox)。PASCAL VOC、COCO等都是常见的目标检测数据集,如果你有自己的数据,需要将其转换成标准格式,如XML或YOLO的txt文件。 2. 准备库:安装必要的库,包括PyTorch、Detectron2(基于Faster R-CNN的库)、torchvision,以及用于数据处理的工具如`xml.etree.ElementTree`(如果需要解析XML)。 3. 加载预训练模型:下载并加载预训练Faster R-CNN模型,比如COCO模型,作为起点,这将为你的网络提供基础结构。 4. 定义自定义数据模块:创建一个新的数据模块,继承自Detectron2的`DatasetMapper`,并针对你的数据集调整输入大小、颜色空间转换等参数。 5. 训练配置:编写一个训练配置文件,指定优化器、学习率策略、迭代次数、批大小等参数,并指明你的模型路径。 6. 实现训练循环:使用Detectron2的`DefaultTrainer`类,设置数据模块、模型、配置和其他训练选项,然后运行训练循环。 ```python from detectron2.engine import DefaultTrainer # 创建训练器实例 trainer = DefaultTrainer( model="COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x", data_loader_train=..., data_loader_val=..., cfg=cfg, # 自定义训练配置 ) # 开始训练 trainer.train() ```
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值