使用Faster R-CNN训练自己的数据_NWPU_VHR-10数据集

本文转自:初沏的茶 http://blog.csdn.net/chuqidecha/article/details/58148611 

1. 主要步骤

  1. VOC2007格式数据集制作
  2. 训练集均值文件计算
  3. 网络选择
  4. faster r-cnn源码修改
  5. 运行 

2. VOC2007格式数据集制作

1. 修改VOCinit.m

(1) 数据集名称

第12行VOC2007改为自己的文件夹名称

VOCopts.dataset='your folder name'
  • 1

(2) 修改图片格式 
第37行中的jpg换成自己的图片格式

VOCopts.imgpath=[VOCopts.datadir VOCopts.dataset '/JPEGImages/%s.jpg'];
  • 1

(3) 修改标签名称 
第81行之后的类别名称换成自己数据集的类别名称

VOCopts.classes={...
            'cls1'
            'cls2'
            ...
            'clsn'
            };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3. 文件目录

按照下图添加文件夹,其中的NWPU_VHR-10改为自己的数据集名称。 
这里写图片描述

3. xml格式的annotation文件

4. 数据集划分

在/NWPU_VHR-10/ImageSets/Main文件夹下创建test.txt、train.txt、trainval.txt、val.txt四个文件,分别保存测试集、训练集、训练集-验证集合验证集。每个文件名占一行,不包含后缀名。


2. 计算图片数据的均值

windows下计算图片数据均值使用的工具和命令与Linux下的相同。可参照@denny402的博客–计算图片数据的均值。工具生成的格式是binaryproto格式的文件,MATLAB中使用的是mat格式文件,使用caffe.io.read_mean进行格式转换。

image_mean = caffe.io.read_mean('path to mean file');
save('path to save','image_mean');
  • 1
  • 2
  • 3

4. 网络选择与参数修改

对于ZF网络,训练Fast R-CNN需要至少3G现存,根据自己的硬件配置,选择合适的网络,然后对网络参数进行修改。

1. models\ fast_rcnn_prototxts\ZF\ train_val.prototxt

input: "bbox_targets"  
input_dim: 1  # to be changed on-the-fly to match num ROIs  
input_dim: 84 # 根据类别数改,该值为(类别数+1)*4  
input_dim: 1  
input_dim: 1  
  • 1
  • 2
  • 3
  • 4
  • 5
input: "bbox_loss_weights"  
input_dim: 1  # to be changed on-the-fly to match num ROIs  
input_dim: 84 # 根据类别数改,该值为(类别数+1)*4   
input_dim: 1  
input_dim: 1 
  • 1
  • 2
  • 3
  • 4
  • 5
layer {  
    bottom: "fc7"  
    top: "cls_score"  
    name: "cls_score"  
    param {  
        lr_mult: 1.0  
    }  
    param {  
        lr_mult: 2.0  
    }  
    type: "InnerProduct"  
    inner_product_param {  
        num_output: 21 #根据类别数改该值为类别数+1   
        weight_filler {
            type: "gaussian"
            std: 0.01
        }
        bias_filler {
            type: "constant"
            value: 0
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
layer {
    bottom: "fc7"
    top: "bbox_pred"
    name: "bbox_pred"
    type: "InnerProduct"
    param {
        lr_mult: 1.0
    }
    param {
        lr_mult: 2.0
    }
    inner_product_param {
        num_output: 84 # 根据类别数改,该值为(类别数+1)*4   
        weight_filler {
            type: "gaussian"
            std: 0.001
        }
        bias_filler {
            type: "constant"
            value: 0
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

2. models\ fast_rcnn_prototxts\ZF\ test.prototxt

layer {
    bottom: "fc7"
    top: "cls_score"
    name: "cls_score"
    param {
        lr_mult: 1.0
    }
    param {
        lr_mult: 2.0
    }
    type: "InnerProduct"
    inner_product_param {
        num_output: 21 #根据类别数改该值为类别数+1   
        weight_filler {
            type: "gaussian"
            std: 0.01
        }
        bias_filler {
            type: "constant"
            value: 0
        }
    }
}

layer {
    bottom: "fc7"
    top: "bbox_pred"
    name: "bbox_pred"
    type: "InnerProduct"
    param {
        lr_mult: 1.0
    }
    param {
        lr_mult: 2.0
    }
    inner_product_param {
        num_output: 84 # 根据类别数改,该值为(类别数+1)*4  
        weight_filler {
            type: "gaussian"
            std: 0.001
        }
        bias_filler {
            type: "constant"
            value: 0
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

3. 其他文件

models\ fast_rcnn_prototxts\ZF6\ train_val.prototxt与models\ fast_rcnn_prototxts\ZF\ train_val.prototxt修改的地方相同。 
models\ fast_rcnn_prototxts\ZF6\ test.prototxt与 models\ fast_rcnn_prototxts\ZF\ test.prototxt修改的地方相同


5. faster r-cnn源码修改

1. function\fast_rcnn\fast_rcnn_train.m

ip.addParamValue('val_iters',       500,            @isscalar);  
  • 1

val_iters的默认值设置为验证样本数的1/5左右,最大不能超过验证样本数。

2. function\rpn\proposal_train.m

与fast_rcnn_train.m相同,修改val_iters值。

3. imdb\imdb_eval_voc.m

%注释73行
%do_eval = (str2num(year) <= 2007) | ~strcmp(test_set,'test');  
%添加下面语句
do_eval = 1;  
  • 1
  • 2
  • 3
  • 4

如果不修改,测试时精度全为0。

4. experiments+Model\ZF_for_Faster_RCNN_VOC2007.m

在该文件中修改faster-rcnn各阶段训练时的参数


5. 运行

运行experiments/script_faster_rcnn_VOC2007_ZF.m。运行结束后根据提示修改detection_test.prototxt

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,要在Windows上使用PyTorch训练自己的数据集,需要安装适用于Windows的PyTorch、CUDA和CUDNN等软件。可以通过PyTorch官方网站下载适用于Windows的PyTorch版本,并根据官方文档的指引进行安装。 接下来,准备自己的数据集。数据集应该包括图像和相应的标注信息,例如边界框和类别标签。可以使用标记工具(如LabelImg)来手动标注图像,并生成XML或CSV文件以存储标注信息。确保标注信息的格式与训练模型所需的格式一致。 然后,需要编写自定义的数据集加载器。可以创建一个继承自PyTorch的Dataset类的子类,在该子类中实现__getitem__和__len__等方法。在__getitem__方法中,加载图像和相应的标注信息,并对它们进行预处理(如缩放、裁剪等)。同时,可以使用PyTorch提供的transforms模块进行数据增强(如随机翻转、旋转等)。 在训练之前,还需要定义模型结构。可以使用现有的预训练模型,如ResNet,将其与分类器部分替换为适用于目标检测的模型。在Faster R-CNN中,常用的基础模型是ResNet和VGG等。 接下来,定义损失函数和优化器。在Faster R-CNN中,常用的损失函数是RPN(Region Proposal Network)的分类和回归损失,以及分类器和回归器的损失。可以使用PyTorch提供的损失函数模块(如CrossEntropyLoss和SmoothL1Loss)来定义这些损失函数,并选择合适的优化器(如SGD或Adam)进行参数更新。 最后,进行训练使用加载器加载训练数据集,并在每个iteration中将数据传递给模型进行前向传播和反向传播,并进行参数更新。可以根据需要设置训练的epoch数、学习率和批量大小等参数。 需要注意的是,在Windows上训练自己的数据集可能会遇到一些环境配置和依赖问题。在遇到问题时,可以查阅相关文档和社区论坛,寻找解决方案。此外,还可以考虑使用Colab等在线平台来训练模型,这些平台已经预先配置好了环境,并且提供了免费的GPU加速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值