mmdetection源码解读(九)

如何展示mmdet的检测结果:

mmdetection/tools/bbox_show.py

import numpy as np
import mmcv
import cv2
import json
from pycocotools.coco import COCO
from mmcv import color_val
from mmdet.apis import show_result
from argparse import ArgumentParser
import os

class_names = ['category_1', 'category_2', 'category_3']

def det_bbox_show(args=None):
    """ 这个是用来展示检测结果的 """
    with open(args.json_file, 'r') as f:
        jsondata = json.load(f)
        results = {}
        for result in jsondata:
            result['bbox'][2] = result['bbox'][0] + result['bbox'][2]
            result['bbox'][3] = result['bbox'][1] + result['bbox'][3]
            result['bbox'].append(result['score'])
            if result['image_id'] in results.keys():
                results[result['image_id']][result['category_id']-1] = np.concatenate((results[result['image_id']][result['category_id']-1], np.array(result['bbox'], dtype=np.float32).reshape(-1,5)))
            else:
                results[result['image_id']] = []
                for i in range(len(class_names)):
                    if result['category_id']-1 == i:
                        results[result['image_id']].append(np.array(result['bbox'], dtype=np.float32).reshape(-1,5))
                    else:
                       results[result['image_id']].append(np.zeros(shape=(0,5),dtype=np.float32))
    for k, v in results.items():
        show_result(args.img_prex + '/' + k + '.jpg', v, class_names, score_thr=0.7, show=False, out_file=args.outfile + '/{}.jpg'.format(k))


def gt_bbox_show(args):
    """这个是用来展示Ground Truth bbox的"""
    coco = COCO(args.json_file)
    img2ann = coco.imgToAnns
    imgids = coco.getImgIds()
    for imgid in imgids:
        filename = args.img_prex + '/{}.jpg'.format(imgid)
        img = mmcv.imread(filename)
        bbox_color = color_val('red')
        text_color = color_val('red')
        anns = img2ann[imgid]
        for ann in anns:
            bbox_int = np.array(ann['bbox']).astype(np.int32)
            left_top = (bbox_int[0], bbox_int[1])
            right_bottom = (bbox_int[0] + bbox_int[2], bbox_int[1] + bbox_int[3])
            label = ann['category_id'] - 1
            cv2.rectangle(img, left_top, right_bottom, bbox_color, thickness=1)
            label_text = class_names[label]
            cv2.putText(img, label_text, (bbox_int[0], bbox_int[1] - 2), cv2.FONT_HERSHEY_COMPLEX, 0.5, text_color)
        mmcv.imwrite(img, args.outfile + '/{}.jpg'.format(imgid))

def main():
    parser = ArgumentParser(description='COCO bbox show Tool')
    parser.add_argument(
        '--gt-bbox-show',
        action='store_true',
        help='show gt bbox'
    )
    parser.add_argument(
        '--json_file',
        type=str,
        help='json file(results or ann file)'
    )
    parser.add_argument(
        '--img_prex',
        type=str,
        help='img dataset prex'
    )
    parser.add_argument(
        '--outfile',
        type=str,
        help='outfile'
    )
    args = parser.parse_args()
    if not os.path.exists(args.outfile):
        os.makedirs(args.outfile)
    if args.gt_bbox_show:
        gt_bbox_show(args)
    else:
        det_bbox_show(args)

if __name__ == '__main__':
    import time
    tim = time.time()
    main()
    print("total time = {}".format(time.time() - tim))

这段程序前提是图片名称和图片id要保持一致,像coco这种图片名前面补好多0的就不能用了,需要debug一下。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mmdetection是一个基于PyTorch开发的目标检测框架,它提供了一系列模型和工具,用于实现目标检测任务。该框架的源码解读可以从其网络结构设计入手。 在mmdetection中,网络结构的设计是通过继承SingleStageDetector和TwoStageDetector来实现的。SingleStageDetector继承了backbone、neck和head,而TwoStageDetector继承了backbone、neck、rpn_head和roi_head。这种继承关系的设计使得模型的构建更加灵活和可扩展。 另外,mmdetection框架还将网络结构的设计细分为detectors、backbones、necks、dense_heads、roi_heads和seg_heads等组件。这些组件都有自己的base定义接口,并扩展了不同经典论文的结构,可以直接使用。这样的设计使得用户可以根据具体任务的需求选择合适的组件进行组合,从而实现更加精确和高效的目标检测。 总之,mmdetection框架的源码解读主要涉及网络结构的设计和组件的使用。通过深入理解这些内容,我们可以更好地理解和使用mmdetection框架来进行目标检测任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [mmdetection源码解析](https://blog.csdn.net/Cxiazaiyu/article/details/123995333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值