Faster Rcnn 代码解读之 factory.py

本文介绍了一个用于目标检测的深度学习框架FastR-CNN中的数据集加载机制,包括VOC和COCO数据集的配置与使用,以及如何通过工厂方法获取图像数据库。
# --------------------------------------------------------
# Fast R-CNN
# Copyright (c) 2015 Microsoft
# Licensed under The MIT License [see LICENSE for details]
# Written by Ross Girshick
# --------------------------------------------------------

"""Factory method for easily getting imdbs by name."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

__sets = {}
from datasets.pascal_voc import pascal_voc
from datasets.coco import coco

import numpy as np

'''
本文件作用是把所有可能的dataset都列举一次
然后主函数调用时看看此时的dataset在不在之前列举都情况里
有就返回这个数据集类型的对象,没有就报错。
'''

# Set up voc_<year>_<split> 
for year in ['2007', '2012']:
    for split in ['train', 'val', 'trainval', 'test']:
        name = 'voc_{}_{}'.format(year, split)
        #
        __sets[name] = (lambda split=split, year=year: pascal_voc(split, year))

for year in ['2007', '2012']:
    for split in ['train', 'val', 'trainval', 'test']:
        name = 'voc_{}_{}_diff'.format(year, split)
        __sets[name] = (lambda split=split, year=year: pascal_voc(split, year, use_diff=True))

# Set up coco_2014_<split>
for year in ['2014']:
    for split in ['train', 'val', 'minival', 'valminusminival', 'trainval']:
        name = 'coco_{}_{}'.format(year, split)
        __sets[name] = (lambda split=split, year=year: coco(split, year))

# Set up coco_2015_<split>
for year in ['2015']:
    for split in ['test', 'test-dev']:
        name = 'coco_{}_{}'.format(year, split)
        __sets[name] = (lambda split=split, year=year: coco(split, year))


def get_imdb(name):
    """Get an imdb (image database) by name."""
    # 判断有没有定义此数据集
    # _set为一个dict,存了几个数据集的名称
    if name not in __sets:
        raise KeyError('Unknown dataset: {}'.format(name))
    return __sets[name]()


def list_imdbs():
    """List all registered imdbs."""
    return list(__sets.keys())

 

### 运行 Faster R-CNN 的 `get_map.py` 脚本 为了运行 Faster R-CNN 中的 `get_map.py` 脚本,通常需要准备一些环境配置以及理解该脚本的功能。此脚本主要用于计算模型的平均精度均值(mAP),这是评估目标检测性能的重要指标。 #### 准备工作 确保已经安装了必要的依赖库并下载好了预训练权重文件。如果使用的是基于Keras版本的Faster R-CNN实现,则应参照项目的README文档完成环境搭建[^1]。 #### 修改配置参数 打开 `get_map.py` 文件前,可能需要调整部分超参数来适应自己的数据集或硬件条件。比如设置输入图像尺寸、路径到测试集标注文件等。这些修改依据具体框架而定;对于采用ResNet作为骨干网的情况,还需确认对应的FPN结构已正确定义[^3]。 #### 执行命令 一般情况下,可以通过如下方式执行: ```bash python get_map.py --model_path='logs/ep050-lossxx.xxyy.pth' --map_vis=True ``` 这里假设保存的最佳模型位于 `logs` 文件夹下,并命名为带有损失值后缀的形式。选项 `--map_vis=True` 表明是否可视化每一张图片上的预测框与真实框对比图以便更直观地查看效果[^2]。 请注意实际使用的命令可能会因为不同版本之间API变化有所差异,请查阅对应仓库最新说明文档获取最准确的操作指南。 #### 测试CUDA加速效率 考虑到目标检测任务往往耗时较长,在支持GPU的情况下建议开启CUDA加速以提高运算速度。可以利用类似下面的方法测量一段代码片段内CPU/GPU同步前后的时间差从而估算出具体的提速比例: ```python import torch from utils.utils import time_synchronized # 假设time_synchronized函数放在utils/utils模块里 start_time = time_synchronized() # ... (待测代码段) end_time = time_synchronized() print(f"Inference Time Cost: {end_time - start_time:.4f} seconds.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值