faster rcnn 训练与测试

本文介绍了一个使用Faster R-CNN进行目标检测训练的具体案例,详细展示了从配置环境到完成训练及测试的全过程。通过示例代码解释了如何设置训练参数、选择模型及数据集等关键步骤。

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

 faster rcnn 训练

./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc


#!/bin/bash
# Usage:
# ./experiments/scripts/faster_rcnn_alt_opt.sh GPU NET DATASET [options args to {train,test}_net.py]
# DATASET is only pascal_voc for now
#
# Example:
# ./experiments/scripts/faster_rcnn_alt_opt.sh 0 VGG_CNN_M_1024 pascal_voc \
#   --set EXP_DIR foobar RNG_SEED 42 TRAIN.SCALES "[400, 500, 600, 700]"

set -x
set -e

export PYTHONUNBUFFERED="True"

GPU_ID=$1
NET=$2
NET_lc=${NET,,}
DATASET=$3

array=( $@ )
len=${#array[@]}
EXTRA_ARGS=${array[@]:3:$len}
EXTRA_ARGS_SLUG=${EXTRA_ARGS// /_}

case $DATASET in
  pascal_voc)
    TRAIN_IMDB="voc_2007_trainval"
    TEST_IMDB="voc_2007_test"
    PT_DIR="pascal_voc"
    ITERS=40000
    ;;
  coco)
    echo "Not implemented: use experiments/scripts/faster_rcnn_end2end.sh for coco"
    exit
    ;;
  *)
    echo "No dataset given"
    exit
    ;;
esac

LOG="experiments/logs/faster_rcnn_alt_opt_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`"
exec &> >(tee -a "$LOG")
echo Logging output to "$LOG"

time ./tools/train_faster_rcnn_alt_opt.py --gpu ${GPU_ID} \
  --net_name ${NET} \
  --weights data/imagenet_models/${NET}.v2.caffemodel \
  --imdb ${TRAIN_IMDB} \
  --cfg experiments/cfgs/faster_rcnn_alt_opt.yml \
  ${EXTRA_ARGS}

set +x
NET_FINAL=`grep "Final model:" ${LOG} | awk '{print $3}'`
set -x

time ./tools/test_net.py --gpu ${GPU_ID} \
  --def models/${PT_DIR}/${NET}/faster_rcnn_alt_opt/faster_rcnn_test.pt \
  --net ${NET_FINAL} \
  --imdb ${TEST_IMDB} \
  --cfg experiments/cfgs/faster_rcnn_alt_opt.yml \
  ${EXTRA_ARGS}








Reading annotation for 4801/4952
Reading annotation for 4901/4952
Saving cached annotations to /home//py-faster-rcnn/data/VOCdevkit2007/annotations_cache/annots.pkl
AP for aeroplane = 0.6104
AP for bicycle = 0.7060
AP for bird = 0.5401
AP for boat = 0.4113
AP for bottle = 0.3118
AP for bus = 0.6708
AP for car = 0.7407
AP for cat = 0.7074
AP for chair = 0.3632
AP for cow = 0.6420
AP for diningtable = 0.6072
AP for dog = 0.6806
AP for horse = 0.7654
AP for motorbike = 0.6794
AP for person = 0.6553
AP for pottedplant = 0.3238
AP for sheep = 0.5597
AP for sofa = 0.5185
AP for train = 0.6880
AP for tvmonitor = 0.6110
Mean AP = 0.5896
~~~~~~~~
Results:
0.610
0.706
0.540
0.411
0.312
0.671
0.741
0.707
0.363
0.642
0.607
0.681
0.765
0.679
0.655
0.324
0.560
0.518
0.688
0.611
0.590
~~~~~~~~

--------------------------------------------------------------
Results computed with the **unofficial** Python eval code.
Results should be very close to the official MATLAB eval code.
Recompute with `./tools/reval.py --matlab ...` for your paper.
-- Thanks, The Management
--------------------------------------------------------------

real	2m44.858s
user	2m41.012s
sys	0m18.440s
:~/py-faster-rcnn$ 



测试

./tools/demo.py --net zf 






### Faster R-CNN 训练完成后进行测试的方法 #### 加载预训练模型并准备环境 为了在完成Faster R-CNN训练后进行测试,首先需要加载已经保存好的模型权重文件。通常情况下,这个文件会存储在一个特定目录下,例如`work_dirs/faster_rcnn_r50_fpn_1x_coco/latest.pth`[^3]。 ```python import torch from torchvision.models.detection import fasterrcnn_resnet50_fpn from torchvision.transforms.functional import to_tensor # 初始化Fast R-CNN模型,并加载本地路径下的预训练权重 model = fasterrcnn_resnet50_fpn(pretrained=False) checkpoint = torch.load('path/to/work_dirs/faster_rcnn_r50_fpn_1x_coco/latest.pth') model.load_state_dict(checkpoint['state_dict']) model.eval() ``` #### 准备待测图像数据 对于输入到模型中的图片,应该将其转换成适合PyTorch处理的形式——即张量(tensor),这可以通过调用`to_tensor()`函数轻松实现: ```python image_path = 'your_image.jpg' input_image = Image.open(image_path).convert("RGB") tensor_image = to_tensor(input_image) images = [tensor_image.to(device)] # device可以是'cuda'或'cpu',取决于硬件支持情况 ``` #### 执行推理过程 一旦准备好上述两项准备工作之后就可以执行实际的预测操作了。此时只需简单地将图像列表传递给已加载完毕的模型即可获得检测结果: ```python with torch.no_grad(): predictions = model(images) for prediction in predictions: boxes = prediction["boxes"].cpu().numpy() # 边界框坐标 labels = prediction["labels"].cpu().numpy() # 类别标签索引 scores = prediction["scores"].cpu().numpy() # 置信度得分 ``` #### 可视化结果显示 最后一步是对得到的结果做可视化呈现以便直观查看效果。这里提供了一个简单的例子说明如何画出边界框以及对应的类别名称: ```python def plot_results(pil_img, boxes, scores, labels): plt.figure(figsize=(16,10)) np_img = np.array(pil_img) plt.imshow(np_img) ax = plt.gca() colors = COLORS * (len(boxes) // len(COLORS) + 1) for i, box in enumerate(boxes): color = colors[i] draw_box(ax=ax, box=box.tolist(), label=f'{COCO_INSTANCE_CATEGORY_NAMES[labels[i]]} {scores[i]:.2f}', color=color) plt.show() plot_results(input_image, boxes, scores, labels) ``` 以上就是利用Python脚本对自定义数据集上训练过的Faster R-CNN模型进行测试的具体方法[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值