faster rcnn 训练自己的数据(python)

本文针对Faster R-CNN在不同numpy版本下出现的TypeError等问题提供了解决方案,包括对代码中涉及numpy操作的部分进行适配性修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置文件修改 参考

http://blog.youkuaiyun.com/princepaul3/article/details/52313582


遇到的问题 参考

http://m.blog.youkuaiyun.com/hongbin_xu/article/details/77278329


遇到的问题:

nump遇到的问题:

typeError: 'numpy.float64' object cannot be interpreted as an index 

这里是因为numpy版本不兼容导致的问题,最好的解决办法是卸载你的numpy,安装numpy1.11.0。如果你和笔者一样不是服务器的网管,没有权限的话,就只能自己想办法解决了。 
修改如下几个地方的code:

1) /home/xxx/py-faster-rcnn/lib/roi_data_layer/minibatch.py

将第26行:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)

2) /home/xxx/py-faster-rcnn/lib/datasets/ds_utils.py

将第12行:hashes = np.round(boxes * scale).dot(v)
改为:hashes = np.round(boxes * scale).dot(v).astype(np.int)

3) /home/xxx/py-faster-rcnn/lib/fast_rcnn/test.py

将第129行: hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v)
改为: hashes = np.round(blobs['rois'] * cfg.DEDUP_BOXES).dot(v).astype(np.int)

4) /home/xxx/py-faster-rcnn/lib/rpn/proposal_target_layer.py

将第60行:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image)
改为:fg_rois_per_image = np.round(cfg.TRAIN.FG_FRACTION * rois_per_image).astype(np.int)

Problem3

TypeError: slice indices must be integers or None or have an __index__ method

这里还是因为numpy版本的原因,最好的解决办法还是换numpy版本(见problem2),但同样也有其他的解决办法。 
修改 /home/lzx/py-faster-rcnn/lib/rpn/proposal_target_layer.py,转到123行:

for ind in inds:
        cls = clss[ind]
        start = 4 * cls
        end = start + 4
        bbox_targets[ind, start:end] = bbox_target_data[ind, 1:]
        bbox_inside_weights[ind, start:end] = cfg.TRAIN.BBOX_INSIDE_WEIGHTS
    return bbox_targets, bbox_inside_weights

这里的ind,start,end都是 numpy.int 类型,这种类型的数据不能作为索引,所以必须对其进行强制类型转换,转化结果如下:

for ind in inds:
        ind = int(ind)
        cls = clss[ind]
        start = int(4 * cos)
        end = int(start + 4)
        bbox_targets[ind, start:end] = bbox_target_data[ind, 1:]
        bbox_inside_weights[ind, start:end] = cfg.TRAIN.BBOX_INSIDE_WEIGHTS
    return bbox_targets, bbox_inside_weights

以上内容是笔者在训练自己的datasets时候出现的一些问题,大部分还是因为Faster RCNN 发布的时候使用的一些库现在都升级了,所以需要对代码中一些细节进行修改!


错误:

File "/home/txl/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 111, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError

参考

http://blog.youkuaiyun.com/xzzppp/article/details/52036794


而faster rcnn会对Xmin,Ymin,Xmax,Ymax进行减一操作

如果Xmin为0,减一后变为65535

问题解决
1、修改lib/datasets/imdb.py,append_flipped_images()函数
数据整理,在一行代码为 boxes[:, 2] = widths[i] - oldx1 - 1下加入代码:
for b in range(len(boxes)):
if boxes[b][2]< boxes[b][0]:
boxes[b][0] = 0
2、修改lib/datasets/pascal_voc.py,_load_pascal_annotation(,)函数
将对Xmin,Ymin,Xmax,Ymax减一去掉,变为:

3、(可选,如果1和2可以解决问题,就没必要用3)修改lib/fast_rcnn/config.py,不使图片实现翻转,如下改为:
# Use horizontally-flipped images during training?
__C.TRAIN.USE_FLIPPED = False




### 使用自定义数据训练Faster R-CNN模型 #### 准备环境和资源 为了使用自定义数据训练Faster R-CNN模型,需先准备必要的软件包以及配置开发环境。这通常涉及安装Python库和其他依赖项,并设置好GPU支持以便加速计算过程。 #### 获取预训练模型 下载预先训练好的Faster R-CNN模型作为起点可以显著减少训练时间和提高最终性能。对于此目的,可以从官方源或其他可信渠道获取适用于特定框架版本的权重文件[^1]。 ```bash cd faster-rcnn.pytorch-pytorch-1.0 && mkdir data cd data && mkdir pretrained_model VOCdevkit2007 ``` 上述命令创建了`faster-rcnn.pytorch-pytorch-1.0/data/`目录结构中的两个子文件夹——一个是用来保存预训练模型(`pretrained_model`);另一个则是放置Pascal VOC格式的数据(`VOCdevkit2007`)[^2]。 #### 构建自定义数据集 构建适合于Faster R-CNN输入格式的数据集至关重要。一般情况下,这意味着要将图片连同对应的标注信息一起整理成标准形式。常见的做法是遵循Pascal VOC的标准,即每张图对应一个XML文件描述其中的对象类别及其边界框位置。 #### 修改配置参数 调整超参数以适应新的任务需求也是必不可少的一环。这些改动可能涉及到但不限于:学习率、批量大小(batch size)、迭代次数(iterations),还有最重要的是指定新数据集的位置路径等细节设定。 #### 开始训练流程 一旦完成了以上准备工作,则可以通过运行脚本来启动实际的训练进程。在此期间,建议定期监控损失函数的变化趋势以及其他评估指标的表现情况,从而及时发现潜在问题并作出相应优化措施。 ```python import torch from model.faster_rcnn import FasterRCNN from utils.config import cfg, cfg_from_file cfg_from_file('path_to_your_config.yaml') model = FasterRCNN() if use_gpu: model.cuda() for epoch in range(num_epochs): train(model) validate(model) save_checkpoint({ 'epoch': num_epochs, 'state_dict': model.state_dict(), }, filename='checkpoint.pth.tar') ``` 这段伪代码展示了如何加载配置文件、初始化网络架构实例化对象、判断是否启用CUDA加速功能、循环执行训练与验证操作直至达到预定轮次数量最后保存下当前状态到磁盘中去[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值