获取Faster RCNN最终候选框坐标值

经过之前的训练,小鱼对Faster RCNN网络实现检测功能已经了解了一点,接下来就是利用网络的检测结果实现多目标的跟踪.这个专题就用来记录一些实现跟踪道路上的小知识点.

今天小鱼分享的是:如何利用训练好的网络得到测试图片的候选框坐标?

在运行~/py-faster-rcnn/tools/demo.py这个文件时对测试集的目标进行了候选框的可视化,也就是demo.py中的def vis_detections函数.这里可以参考demo.py代码解析了解该代码的主要三个功能:候选框结果的可视化;检测目标框的获取;参数的获取

小鱼就是从这里得到最终的候选框坐标,具体方法为:
1.分析可视化什么东西
可视化函数为:

def vis_detections(im, class_name, dets, thresh=0.5):
    """Draw detected bounding boxes."""
    inds = np.where(dets[:, -1] >= thresh)[0]
    if len(inds) == 0:
        return

    im = im[:, :, (2, 1, 0)]
    fig, ax = plt.subplots(figsize=(12, 12))
    ax.imshow(im, aspect='equal')
    for i in inds:
        bbox = dets[i, :4]
        score = dets[i, -1]
        ax.add_patch(
            plt.Rectangle((bbox[0], bbox[1]),
                          bbox[2] - bbox[0],
                          bbox[3] - bbox[1], fill=False,
                          edgecolor='red', linewidth=3.5)
            )
        ax.text(bbox[0], bbox[1] - 2,
                '{:s} {:.3f}'.format(class_name, score),
                bbox=dict(facecolor='blue', alpha=0.5),
                fontsize=14, color='white')

    ax.set_title(('{} detections with '
                  'p({} | box) >= {:.1f}').format(class_name, class_name,
                                                  thresh),
                  fontsize=14)

    plt.axis('off')
    plt.tight_layout()
    plt.draw()

从函数中可以得到是可视化了检测的目标框bbox,并在每个目标框上表明检测精度score.
2.找到可视化的东西怎么得到的
找出哪里生成bbox,score,从可视化函数的这两个参数可以追溯到下一个函数中调用了可视化函数,即demo函数:

def demo(net, image_name):
    """Detect object classes in an image using pre-computed object proposals."""

    # Load the demo image
    im_file = os.path.join(cfg.DATA_DIR, 'demo', image_name)
    im = cv2.imread(im_file)

    # Detect all object classes and regress object bounds
    timer = Timer()
    timer.tic()
    **scores, boxes = im_detect(net, im)**
    timer.toc()
    print ('Detection took {:.3f}s for '
           '{:d} object proposals').format(timer.total_time, boxes.shape[0])

    # Visualize detections for each class
    CONF_THRESH = 0.8
    NMS_THRESH = 0.3
    for cls_ind, cls in enumerate(CLASSES[1:]):
        cls_ind += 1 # because we skipped background
        cls_boxes = boxes[:, 4*cls_ind:4*(cls_ind + 1)]
        cls_scores = scores[:, cls_ind]
        dets = np.hstack((cls_boxes,
                          cls_scores[:, np.newaxis])).astype(np.float32)
        keep = nms(dets, NMS_THRESH)
        dets = dets[keep, :]
        vis_detections(im, cls, dets, thresh=CONF_THRESH)

从这个函数中可以看到也有bbox,score,代码加粗部分.这里又追溯到im_detect(net, im)函数,这个函数出现在~/py-faster-rcnn/lib/fast_rcnn/test.py中,我们就转到这个函数,可以看到在im_detect(net, im)函数中有完整的计算bbox,score代码并return scores, pred_boxes.
这里需要注意的是,在im_detect(net, im)函数中,182行加入打印代码:

print pred_boxes.shape
return scores, pred_boxes

即return代码上方直接打印出输出bbox的维度,得到一个300*(4(K+1))的矩阵,k代表类别数.是最后输入给Fast RCNN的300个候选框,不是我们想要的最终可视化的候选框.
3.將这些需要的东西利用起来
找完之后,就开始各取所需.这里小鱼需要最终的候选框,那就是在可视化中的候选框,我就只需要在~/py-faster-rcnn/tools/demo.py中加入print输出指令即可,如在53行左右加入print bbox
最终的结果如下格式:

Demo for data/demo/00109.jpg
Detection took 0.142s for 300 object proposals
[ 1198.58422852  1014.32049561  1291.8581543   1123.05639648]
[ 675.29943848  634.83068848  766.93762207  724.48535156]
[ 1463.50634766   131.7862854   1548.50048828   223.23049927]
[ 1021.40447998   367.55706787  1138.07788086   479.88537598]
[ 1228.62817383   665.61010742  1330.26538086   781.8638916 ]
[ 1069.45117188   457.67938232  1159.40161133   542.62628174]
[ 588.99707031  251.40000916  685.6192627   361.50817871]
[ 1058.63061523   542.11383057  1131.95068359   612.54180908]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

每一行为~/data/demo/00109.jpg图片中一个目标框的坐标,总共多少行就证明该图片上有多少个目标被检测出来.

### 回答1: Faster R-CNN 是目标检测中的一种深度神经网络模型,其主要分为两个部分:区域提议网络 (Region Proposal Network, RPN) 和目标分类与回归网络。 其中,RPN 是用于生成候选区域的网络,其结构类似于全卷积神经网络,可以对输入图像进行卷积运算,然后输出多个候选区域的坐标和概率。具体来说,RPN 的输入是一张原始图像,经过卷积和池化等操作后,输出多个不同大小和比例的候选区域,这些候选区域会被送入后续的分类与回归网络进行目标检测。 而目标分类与回归网络则是用于对候选区域进行分类和回归的网络。其输入是 RPN 生成的候选区域,输出是每个区域所属的目标类别和位置信息。在 Faster R-CNN 中,目标分类和回归是在同一个网络中完成的,这个网络通常是一个全连接神经网络。具体来说,对于每个候选区域,分类网络输出一个向量,表示该区域属于每个目标类别的概率,回归网络输出一个向量,表示该区域的位置信息,包括中心坐标、宽度和高度等。 通过 RPN 和目标分类与回归网络的结合,Faster R-CNN 可以在一次前向传播中完成目标检测任务,同时保证了检测结果的精度和速度。 ### 回答2: Faster R-CNN是一种基于深度学习的目标检测算法,主要由两个部分组成:分类(classification)和回归(regression)。 Faster R-CNN的分类部分主要负责判断图像中的目标类别。该部分通过提取感兴趣区域(region of interest, ROI)来进行分类。首先,Faster R-CNN使用一个卷积神经网络(CNN)网络来提取图像特征。然后,利用候选框生成器(region proposal network, RPN)来生成一系列候选框,在这些候选框上提取ROI特征。最后,ROI特征通过一个全连接层分类网络进行分类。该分类网络通常是一个多层感知机(Multi-Layer Perceptron, MLP)或全连接层。通过训练,该分类部分可以识别出图像中的不同目标类别。 Faster R-CNN的回归部分主要负责生成目标的边界框(bounding box)。与分类部分类似,回归部分也利用提取的ROI特征。通过训练,回归部分能够预测每个ROI的边界框坐标,包括左上角和右下角的坐标值。这些边界框定义了目标在图像上的位置和大小。通过将这些边界框与分类结果结合起来,可以得到最终的目标检测结果。 总之,Faster R-CNN的分类部分主要负责识别图像中的目标类别,而回归部分则生成目标的边界框。这两个部分密切合作,共同完成目标检测的任务。通过这种方式,Faster R-CNN在目标检测领域取得了良好的性能。 ### 回答3: Faster R-CNN是一个流行的目标检测算法,它由两个主要组件组成:分类和回归。 分类部分是Faster R-CNN用于识别目标类别的关键组件。它使用卷积神经网络(CNN)来提取输入图像中的特征,并将这些特征传递给全连接层来进行最终的分类。在分类部分中,Faster R-CNN通过经过训练的分类器来判断每个候选区域(即检测到的边界框)是否包含特定的目标类别,比如人、汽车等。这个分类器通常是一个softmax分类器,它通过计算每个类别的概率分数来确定每个候选区域属于哪个类别。 回归部分是Faster R-CNN用于提供检测目标位置的关键组件。它使用回归器来预测每个候选区域的边界框精确位置。回归部分的输入是与分类部分相同的图像特征,但是它使用了一个独立的全连接层来输出每个候选区域的边界框坐标。这个回归器可以学习如何从候选区域的特征中准确地预测目标的位置和大小。 通过将分类和回归部分结合起来,Faster R-CNN能够同时完成目标的分类和边界框定位任务。分类部分基于候选区域进行目标的类别判断,而回归部分则基于相同的候选区域来提供更准确的位置信息。这种结构使Faster R-CNN在目标检测任务中具有卓越的性能和准确性,因为它能够捕捉到目标的类别和位置信息。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值