Faster Rcnn 一个目标被识别成多个label (重复框问题)

在使用faster-rcnn检测目标时,出现这种问题很正常,对于作者的数据集来说,主要是识别一些物体,所以出现下面这种图的结果很正常。

å¾å°çç»æè¿æ¯å¾å¥½çï¼æ¯ç«æ¨¡åæ¯äººå®¶å·²ç»è®­ç»å¥½çï¼æ们åªæ¯æ¿æ¥è·ä¸ä¸ãå¯è½ä½ çç»æä¸å¼ ç§çåªæ¾ç¤ºä¸ä¸ªæ¡ï¼å¦ææ³ä¸ä¸ªå¾çéæ¾ç¤ºå¤ä¸ªæ¡ä¿®æ¹ä¸ä¸demo.py代ç å³å¯

但是当我们进行检测,有可能检测的是一个物体的状态,由于模型的拟合的不够好,一个物体的状态有可能会被检测成两种不同的状态,这样就需要我们对两种状态取一个最大值,然后保存。例如下图

该label标注的是normal,但在识别的时候出现了normal和tilt。只能说明模型的拟合程度不够好,并不是哪里出错了

解决方法其实很简单:

将所有的 box都保存起来,然后作nms,nms之后再进行可视化操作(就是画框框,上图相当于nms后把normal去掉了)

 

下面是我demo.py的代码。

在此之前,已经在原作者的基础上进行修改了,主要修改的方面有:使一张图中出现多个label 、 根据xml画出gt 、还有一个是计数方便数据统计

#!/usr/bin/env python
# ._*_.coding:utf-8
# --------------------------------------------------------
# Tensorflow Faster R-CNN
# Licensed under The MIT License [see LICENSE for details]
# Written by Xinlei Chen, based on code from Ross Girshick
# --------------------------------------------------------

"""
Demo script showing detections in sample images.

See README.md for installation instructions before running.
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import xml.dom.minidom as xmldom
import _init_paths
from model.config import cfg
from model.test import im_detect
from model.nms_wrapper import nms
from utils.timer import Timer
import tensorflow as tf
import matplotlib

matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import os, cv2
import argparse

from nets.vgg16 import vgg16
from nets.resnet_v1 import resnetv1

CLASSES = ('__background__',
           'tilt', 'miss', 'normal')

NETS = {'vgg16': ('vgg16_faster_rcnn_iter_70000.ckpt',), 'res101': ('res101_faster_rcnn_iter_100000.ckpt',)}
DATASETS = {'pascal_voc': ('voc_2007_trainval',), 'pascal_voc_0712': ('voc_2007_trainval+voc_2012_trainval',)}


# 计算IOU交并比
def compute_IOU(rec1, rec2):
    """
    计算两个矩形框的交并比。
    :param rec1: (x0,y0,x1,y1)      (x0,y0)代表矩形左上的顶点,(x1,y1)代表矩形右下的顶点。下同。
    :param rec2: (x0,y0,x1,y1)
    :return: 交并比IOU.
    """
    left_column_max = max(rec1[0], rec2[0])
    right_column_min = min(rec1[2], rec2[2])
    up_row_max = max(rec1[1], rec2[1])
    down_row_min = min(rec1[3], rec2[3])
    # 两矩形无相交区域的情况
    if left_column_max >= right_column_min or down_row_min <&#
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值