mmdet.structures.DetDataSample 数据结构解析

这篇具有很好参考价值的文章主要介绍了mmdet.structures.DetDataSample 数据结构解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方文档  https://mmdetection.readthedocs.io/zh-cn/latest/api.html#mmdet-structures

  • ``gt_instances``(InstanceData): Ground truth of instance annotations. 标注的数据

  • <InstanceData(
    
        META INFORMATION
    
        DATA FIELDS
        bboxes: tensor([], size=(0, 4))
        labels: tensor([], dtype=torch.int64)
        masks: BitmapMasks(num_masks=0, height=3456, width=4608)
    ) at 0x7fc26252dbb0>
  • ``pred_instances``(InstanceData): Instances of detection predictions. 预测的数据

  • <InstanceData(
    
        META INFORMATION
    
        DATA FIELDS
        labels: tensor([0])
        bboxes: tensor([[ 687.5951, 1478.1307, 2670.1741, 2215.1914]])
        scores: tensor([0.9946])
        masks: tensor([[[False, False, False,  ..., False, False, False],
                     [False, False, False,  ..., False, False, False],
                     [False, False, False,  ..., False, False, False],
                     ...,
                     [False, False, False,  ..., False, False, False],
                     [False, False, False,  ..., False, False, False],
                     [False, False, False,  ..., False, False, False]]])
    ) at 0x7fc25f2c3d00>
  • ``ignored_instances``(InstanceData): Instances to be ignored during training/testing. 训练或测试中忽略的数据

  • <InstanceData(
    
        META INFORMATION
    
        DATA FIELDS
        bboxes: tensor([], size=(0, 4))
        labels: tensor([], dtype=torch.int64)
        masks: BitmapMasks(num_masks=0, height=3456, width=4608)
    ) at 0x7fc25f2cb610>
  • ``gt_panoptic_seg``(PixelData): Ground truth of panoptic segmentation. 全景分割的标注数据,

  • ``pred_panoptic_seg``(PixelData): Prediction of panoptic segmentation. 全景分割的预测 

  • ``gt_sem_seg``(PixelData): Ground truth of semantic segmentation. 语义分割的标注数据

  • ``pred_sem_seg``(PixelData): Prediction of semantic segmentation. 语义分割预测数据

我这里面主要使用的是 pred_instances

from mmengine.structures import InstanceData, PixelData

问题: 获取mask后, 如果做计算?

根据mask将图片扣取出来

如下程序获取mask, 当然 epoch_24.pth 是预先训练好的

from mmdet.apis import init_detector,inference_detector
import mmcv
import matplotlib.pyplot as plt

from mmdet.registry import VISUALIZERS


config_file_retrain = 'configs/radish/mask_rcnn_r50_fpn_2x_coco_radish.py'
checkpoint_file_retrain = 'work_dirs/mask_rcnn_r50_fpn_2x_coco_radish/epoch_24.pth'

model = init_detector(config_file_retrain,checkpoint_file_retrain,device='cpu')

# image_path = './data/radish/20231121145620_1-1.jpg'
# image_path = './data/radish/20231220/20231202115005_1-1.jpg'
# image_path = './data/radish/20231220/20231129161723_1-1.jpg'
# image_path = './data/radish/test2012/2012120076_20201212094819.png'
image_path = './data/radish/test2012/2012120261_20201212151200.png'
image_path = './data/radish/test2012/2012140043_20201214085421.png'
image_path = './data/radish/test2012/2012120158_20201212111739.png'
image_path = './data/radish/test2012/2012120305_20201212154238.png'
image_path = './data/radish/20231220/20231129161409_1-1.jpg'
image_path = './data/radish/test2012/2012120179_20201212133724.png'


img = mmcv.imread( image_path, channel_order='rgb')
plt.imshow(img)

result_retrain = inference_detector(model,img)

# init the visualizer(execute this block only once)
visualizer = VISUALIZERS.build(model.cfg.visualizer)
# the dataset_meta is loaded from the checkpoint and
# then pass to the model in init_detector
# visualizer.dataset_meta = model0.dataset_meta
visualizer.dataset_meta = model.dataset_meta   # set the visualizer metadata when you changed your dataset


# print(result_retrain)

# show the results
visualizer.add_datasample(
    'result',
    img,
    data_sample=result_retrain,
    draw_gt=False,
    wait_time=0,
)
visualizer.show()

处理mask

import cv2
import numpy as np
masks = result_retrain.pred_instances.masks.detach().cpu().numpy()
# print(masks[0])
height = masks[0].shape[0]
width = masks[0].shape[1]
# print(height)
# print(width)
# print(result_retrain.pred_instances.masks[0].cpu().numpy())

from mmdet.structures.mask import encode_mask_results, mask2bbox
encode_masks = encode_mask_results(result_retrain.pred_instances.masks)
# print(encode_masks)

bboxes = mask2bbox(result_retrain.pred_instances.masks.cpu()).numpy().tolist()
#  mask的 x, y, w, h
bboxes = bboxes[0]
print(bboxes)


image_path = './data/radish/test2012/2012120179_20201212133724.png'
#img=cv2.imread(image_path, cv2.COLOR_BGR2GRAY)

img = mmcv.imread( image_path, channel_order='rgb')

# bboxes 画框
# mask_BGR = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
color = (0, 0, 255) # Red color in BGR;红色:rgb(255,0,0)
thickness = 2 # Line thickness of 1 px 
# start_point, end_point = (bboxes[0], bboxes[1]), (bboxes[0]+bboxes[2], bboxes[1]+bboxes[3])

x0, y0 = int(bboxes[0]), int(bboxes[1])
x1 = int(bboxes[2]-1)
y1 = int(bboxes[3]-1)
print(f'x0:{x0}, y0:{y0}, x1:{x1}, y1:{y1}')
start_point, end_point = (x0, y0), (x1, y1)

print(start_point)
print(end_point)
mask_bboxs = cv2.rectangle(img, start_point, end_point, color, thickness)
plt.imshow(img)

#剪裁
patch_bboxes = np.array(bboxes)
patch = mmcv.imcrop(img, patch_bboxes)
plt.imshow(patch)

mask = masks[0]


# 将其它区域颜色变成0
# change color of background and balloon
masked_b = img[:, :, 0] * mask
masked_g = img[:, :, 1] * mask
masked_r = img[:, :, 2] * mask
masked = np.concatenate([masked_b[:, :, None], masked_g[:, :, None], masked_r[:, :, None]], axis=2)

un_mask = 1 - mask
frame_b = img[:, :, 0] * un_mask
frame_g = img[:, :, 1] * un_mask
frame_r = img[:, :, 2] * un_mask
img = np.concatenate([frame_b[:, :, None], frame_g[:, :, None], frame_r[:, :, None]], axis=2).astype(np.uint8)

# background gray color with 3 channels
img = mmcv.bgr2gray(img, keepdim=True)
img = np.concatenate([img, img, img], axis=2)
# img += masked
plt.imshow(masked)

# 旋转



# show the results
# visualizer.add_datasample(
#     'result',
#     img,
#     data_sample=result_retrain,
#     draw_gt=False,
#     wait_time=0,
# )
# visualizer.show()

打印出来处理结果

mmdet.structures.DetDataSample 数据结构解析,AI,深度学习,机器学习,人工智能

然后针对隔离出来的图片进行后续处理 文章来源地址https://www.toymoban.com/news/detail-807838.html

到了这里,关于mmdet.structures.DetDataSample 数据结构解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】吃透单链表!!!(详细解析~)

    上篇文章介绍了顺序表,这篇文章开始着重讲解链表了。 链表有很多种:单、双链表,循环、非循环链表还有带头、不带头的链表。 本篇的主要内容是单链表(无头,单向,非循环) 。 链表对比顺序表有哪些不同之处,接下来会带大家一起了解~ 1.头部和中间的插入删除效

    2024年02月12日
    浏览(40)
  • 王道数据结构精选习题及解析

    暴力法的时间复杂度为O(n²) 不要忽略有序性 思路:因为是有序的顺序表,所以重复的元素一定是连在一起的。那我们就使用两个指针,一个指针指向当前不重复有序表的最后一个元素,另一个会从头到尾遍历整个有序表,称为工作指针。 我们让工作指针往后移,如果与当

    2024年02月10日
    浏览(48)
  • 【数据结构】 顺序表详解!(源码+解析)

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 数据结构解析 🌄 莫道桑榆晚,为霞尚满天! ​ 什么是数据结构?我们为什么要学数据结构?数据结构中的顺序表长什么样子?它是怎么运用? ​ 本期我们将对这些一一讲解,彻底明白数据结构的重要性,以及顺序表是一种什么的数据

    2024年02月06日
    浏览(46)
  • 【数据结构】顺序表:与时俱进的结构解析与创新应用

      欢迎来到白刘的领域     Miracle_86.-CSDN博客           系列专栏     数据结构与算法 先赞后看,已成习惯    创作不易,多多支持! 目录 一、数据结构的概念 二、顺序表(Sequence List) 2.1 线性表的概念以及结构 2.2 顺序表分类 2.2.1 顺序表和数组的区别 2.2.2 顺序表的分类

    2024年04月23日
    浏览(29)
  • Redis数据结构:Hash类型全面解析

    Redis,作为一个开源的、内存中的数据结构存储系统,以其出色的性能和灵活的数据类型,广泛应用于缓存、消息队列、发布订阅系统等多种场景。在 Redis 的五种基本数据类型中,Hash 类型是一种非常重要的数据类型。它可以存储键值对的集合,且能够用小于1毫秒的时间复杂

    2024年02月10日
    浏览(38)
  • 【数据结构】哈希经典应用:位图——[深度解析](8)

    前言 大家好吖,欢迎来到 YY 滴 数据结构 系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《

    2024年02月03日
    浏览(41)
  • 数据结构与算法--图(概念+练习题+解析)

    有向图 在有向图中有以下几点结论: 1.所有顶点的度数之和等于边数的二倍。 2.所有顶点的入度之和等于出度之和。 3.n个顶点的有向完全图有n(n-1)条边。 4.n个顶点的强连通图至少有n条边。 无向图 在无向图中有以下几点结论: 1.所有顶点的度数之和等于边数的二倍。 2.n个顶

    2024年02月04日
    浏览(44)
  • 【数据结构】如何设计循环队列?图文解析(LeetCode)

    LeetCode链接:622. 设计循环队列 - 力扣(LeetCode) 目录 做题思路 只开辟 k 个空间 多开一个空间 代码实现 1. 循环队列的结构 2. 开辟空间 3. 判断空 4. 判断满 5. 队尾插入数据 6. 队头删除数据 7. 获取队头元素 8. 获取队尾元素 9. 销毁队列 全部代码 设计循环队列,使用数组或链表

    2024年02月10日
    浏览(44)
  • 【数据结构】从头到尾全解析双向链表

    在之前我们已经讲过 单链表 了,单链表查找上一个结点的时间复杂度为O(n),尾插时也要遍历一次链表也是O(n),因为我们每次都要从头开始遍历找,为了克服这单向性的缺点,我们就有了双向链表. 如果要提高链表的查找,尾插等效率,那双向链表(双链表)无疑是首选。

    2024年02月08日
    浏览(47)
  • Redis数据结构:高频面试题及解析

    Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能

    2024年02月08日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包