首页 > 其他分享 >AI_NLP以及DETR的理解-目标检测模型

AI_NLP以及DETR的理解-目标检测模型

时间:2024-01-23 15:46:54浏览次数:30  
标签:NLP DETR AI com https np inter box1 box0

目标检测框架

CNN based以及Transformer based。
  01.CNN based通常又可以划分为
      以Faster RCNN和RetinaNet为代表
  	和以YOLO系列为代表 
         阈值筛选(Confidence threshold)和非极大值抑制(NMS)处理两个关键步骤
  
  02.Transformer based
      目标检测:DETR
      DETR:End-to-End Object Detection with Transformers, DETR 是 Facebook 团队于2020年提出的基于Transformer的端到端目标检测
         DETR是第一篇将Transformer应用到目标检测方向的算法。
       DINO 端到端目标检测器DINO
           DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection

大模型-BLIP

 01. CLIP 由OpenAI在2021年1月发布 WIT(Web Image Text 收集了共4个亿的文本-图像对(Contrastive Language-Image Pre-Training,以下简称 CLIP)
   CLIP直接用ViT做出图像的embed,用BERT做出文字的embed,然后两者做双塔的contrastive learning来匹配语

 02. BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
    再利用BLIP进行后续工作的时候,既可以使用其理解的能力(encoder),又可以利用其生成的能力(decoder)
    一个ITC(image-text contrastive),一个ITM(image-text match),一个language modeling,share一下参数
  BLIP简介 BLIP(Bootstrapping Language-Image Pretraining)是salesforce在2022年提出的多模态框架,是理解和生成的统一,引入了跨模态的编码器和解码器,
   Salesforce - 赛富时客户关系管理系统CRM
  BLIP的主要特点是结合了encoder和decoder,形成了统一的理解和生成多模态模型。
 03.GLIP 是Microsoft团队针对多模态预训练范式发表了《Grounded Language-Image Pre-training(GLIP)》  
2.图片生成
   Latent Diffusion-Github上火爆开源的Stable Diffusion便是基于LDMs开发的
   Midjourney : 基于条件生成对抗网络

应用

Grounding DINO可以根据文字描述检测指定目标-开放世界目标检测问题(open-set object detection)
   close-set detector由三个重要部分组成:Backbone用于提取特征,Neck用于特征增强,Head用于bbox预测
   open-set detection方法
      Grounding DINO是一个双encoder单decoder结构,
	   它包含了一个image backbone用于提取image feature、
	            一个text backbone用于提取text feature、
			 一个feature enhancer用于融合image和text feature
			 一个language-guide query selection模块用于query初始化
			一个cross-modality decoder用于bbox预测

图像坐标

 原点往右为X轴的正方向,原点往下为Y轴的正方向

交并比(Interection-over-unio,简称 IOU)来衡量两个边界框之间的重叠程度

Intersection over Union (IoU)
   is used to evaluate the performance of object detection 
   by comparing the ground truth bounding box to the preddicted bounding box and IoU is the topic of this tutorial.

box是规则矩形框,计算IOU也非常简单,有两种方法:
    1. 两个矩形的宽之和减去组合后的矩形的宽就是重叠矩形的宽,同比重叠矩形的高
    2. 右下角的minx减去左上角的maxx就是重叠矩形的宽,同比高
    然后 IOU = 重叠面积 / (两矩形面积和—重叠面积)
不规则的
   python的shapely包可以直接做
   import numpy as np 
   import shapely
   from shapely.geometry import Polygon,MultiPoint #多边形

计算一对一交并比

def iou(box0: np.ndarray, box1: np.ndarray):
    """ 计算一对一交并比 box0, box1: `~np.ndarray` of shape `(4, )` """   
    xy_max = np.minimum(box0[2:], box1[2:])
    xy_min = np.maximum(box0[:2], box1[:2])    
    # 计算交集
    inter = np.clip(xy_max-xy_min, a_min=0, a_max=np.inf)
    inter = inter[0]*inter[1]
    # 计算并集
    area_0 = (box0[2]-box0[0])*(box0[3]-box0[1])
    area_1 = (box1[2]-box1[0])*(box1[3]-box1[1])
    union = area_0 + area_1- inter
    return inter/union
	
def box_iou(boxes0: np.ndarray, boxes1: np.ndarray):
    """ 计算多个边界框和多个边界框的交并比 [xmin, ymin, xmax,ymax]格式
    Parameters``(x1, y1, x2, y2)`` format with ``0 <= x1 < x2`` and ``0 <= y1 < y2``
	    boxes0: `~np.ndarray` of shape `(A, 4)`
        boxes1: `~np.ndarray` of shape `(B, 4)`
    Returns
        iou: `~np.ndarray` of shape `(A, B)`
		# [N,2] -> [N,1,2] -> [N,M,2] # [M,2] -> [1,M,2] -> [N,M,2]
		这两组bbox中两两之间对应的overlap部分的面积,那么我们需要先求解得到对应部分的左上角坐标lt和右下角坐标rb 
    """
    A = boxes0.shape[0]
    B = boxes1.shape[0]
    xy_max = np.minimum(boxes0[:, np.newaxis, 2:].repeat(B, axis=1), np.broadcast_to(boxes1[:, 2:], (A, B, 2)))
    xy_min = np.maximum(boxes0[:, np.newaxis, :2].repeat(B, axis=1), np.broadcast_to(boxes1[:, :2], (A, B, 2)))
	
	# 左上角的点  # [N,2] -> [N,1,2] -> [N,M,2] # [M,2] -> [1,M,2] -> [N,M,2]
	lt = np.maximum( box0[:, :2].unsqueeze(1).expand(N, M, 2), box1[:, :2].unsqueeze(0).expand(N, M, 2), )
	rb = np.minimum( box0[:, 2:].unsqueeze(1).expand(N, M, 2), box1[:, 2:].unsqueeze(0).expand(N, M, 2),)
	wh = rb - lt  # [N,M,2]
	inter = wh[:, :, 0] * wh[:, :, 1]  # [N,M]
	## # [N,]# [N,] -> [N,1] -> [N,M]
	area1 = (box1[:, 2]-box1[:, 0]) * (box1[:, 3]-box1[:, 1])  
	area1 = area1.unsqueeze(1).expand_as(inter)  

    # 计算交集面积
    inter = np.clip(xy_max-xy_min, a_min=0, a_max=np.inf)
    inter = inter[:, :, 0]*inter[:, :, 1]

    # 计算每个矩阵的面积
    area_0 = ((boxes0[:, 2]-boxes0[:, 0])*( boxes0[:, 3] - boxes0[:, 1]))[:, np.newaxis].repeat(B, axis=1)
    area_1 = ((boxes1[:, 2] - boxes1[:, 0])*( boxes1[:, 3] - boxes1[:, 1]))[np.newaxis, :].repeat(A, axis=0)
    return inter/(area_0+area_1-inter)

设计理解

一个灵活好用的配置系统,模块化设计,一套完整的训练测试验证流程
从用户角度去考虑一个项目的构造,以及它需要传达到哪些程度,才能最小化用户的负担	


np.clip()是一个截取函数,用于截取数组中小于或者大于某值的部分,并使得被截取部分等于固定值。
 import numpy as np
 out = np.clip(a, a_min, a_max, out=None)	
 cuda 不是英伟达的护城河,是你能接触到的所谓护城河
    为机床配置工人,为工人配置电脑。机械和信息处理。物质和信息--信息行业的快速发展

参考

如何使用 numpy 和 pytorch 快速计算 IOU https://www.cnblogs.com/zhiyiYo/p/15586440.html
https://pytorch.org/vision/main/generated/torchvision.ops.box_iou.html
https://github.com/facebookresearch/detr/blob/master/util/box_ops.py	
https://github.com/pytorch/vision/blob/main/torchvision/ops/boxes.py		
https://www.cnblogs.com/zhiyiYo/p/15586440.html		
python shapely.geometry.polygon任意两个四边形的IOU计算实例  https://cloud.tencent.com/developer/article/1740131
https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/
https://zhuanlan.zhihu.com/p/424241927
https://github.com/rentainhe
https://github.com/MILVLG

标签:NLP,DETR,AI,com,https,np,inter,box1,box0
From: https://www.cnblogs.com/ytwang/p/17982607

相关文章

  • Table '.\mysql\proc' is marked as crashed and should be repaired 报错
    Table'.\MySQL\proc'ismarkedascrashedandshouldberepaired报错 解决方法:找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:myisamchk-c-r../data/mysql/proc.MYI然后myisamchk工具会帮助你恢复数据表的索引。重新启动mysql,问题解决。......
  • Gen AI大潮来袭!8个Salesforce新岗位,你会选择哪个?
    人工智能席卷全球,企业对如何整合GenAI有着浓厚的兴趣。为启动企业的GenAI转型浪潮,Salesforce宣布与埃森哲和德勤建立合作伙伴关系,并计划推出更多支持项目。目前,Salesforce领域的其他咨询公司正在提高员工技能,以充分利用即将到来的需求。本篇文章整理了8种SalesforceGenAI角色类......
  • 服务器数据恢复—EVA存储raid5硬盘性能不稳定离线的数据恢复案例
    服务器数据恢复环境:某品牌EVA某型号存储,底层是RAID5阵列,划分了若干lun。服务器故障&分析:该存储设备中raid5阵列有两块硬盘掉线,存储中的lun丢失。将故障服务器存储中的所有磁盘编号后取出,硬件工程师检测后发现掉线硬盘不存在物理故障,也没有发现坏道,都可以正常读取数据。掉线硬......
  • 牵手国际企业,OpenAI计划自己制造AI芯片
    据外媒报道称,近日,OpenAI的首席执行官萨姆·奥特曼正在积极洽谈一项规模达数十亿美元的投资项目,计划与多家顶级芯片制造商合作,建设一个覆盖全球的人工智能芯片生产网络。奥特曼曾多次反馈目前的芯片已不能满足OpenAI公司的AI研发需求,这一战略正为高性能的人工智能模型(如ChatGPT和DAL......
  • AI驱动下的算力浪潮,中国稳居全球第二
    AI大模型的发展引发了对算力的进一步需求。中国信通院发布的《中国综合算力指数(2023年)》显示,当前算力规模中,通用算力占比达74%,智能算力规模同比增加60%至25%。大模型对人工智能算力的重要推动作用。如今,算力已深入渗透到科研、工业生产乃至日常生活的各个角落,成为与水电同等重要的......
  • OpenAI CEO奥特曼:未来最重要的资源是算力和能源
    在近期举办的2024世界经济论坛上,人工智能无疑成为了一个焦点议题,特别是向通用人工智能(AGI)发展的过程,是否会加剧气候问题?AI技术的发展不仅需要巨量的计算资源,还伴随着极高的能源消耗。OpenAICEO奥特曼接受采访中表示,为了实现AI技术的飞跃发展,我们需要比以往更多的能源。而未来最重......
  • 牵手国际企业,OpenAI计划自己制造AI芯片
    据外媒报道称,近日,OpenAI的首席执行官萨姆·奥特曼正在积极洽谈一项规模达数十亿美元的投资项目,计划与多家顶级芯片制造商合作,建设一个覆盖全球的人工智能芯片生产网络。 奥特曼曾多次反馈目前的芯片已不能满足OpenAI公司的AI研发需求,这一战略正为高性能的人工智能模型(如ChatGP......
  • mysql分析sql语句基础工具 -- explain
    分析sql语句explainexplain(sql语句)G;分析结果:idsql语句编号如果是连接查询,表之间是平等关系,编号相同;如果有子查询,编号递增。select——type查询类型table查询针对的表 该值可能是实际的表名或者临时表,derived表示form子查询,null表示无须查表possible_key可能用到的索引ke......
  • 0ptimizing tail recursion
    尾递归(TailRecursion)是一种特殊形式的递归,其特点是递归调用是函数的最后一个操作。在尾递归中,递归调用的返回值不需要进行额外的操作,而是直接返回给调用者。这种特殊的结构使得编译器有机会对递归调用进行优化,称为尾递归优化。尾递归函数的特征是,在递归调用中,没有后续的计算步骤......
  • 搭建邮件服务器基于docker镜像的iredmail
    第一步安装docker很多博客都有,不过大多是自动模式如果要离线安装docker,需要下载docker安装包第二步安装iredmail/mariadbW1在线拉取如果是有互联网接入的,当然可以使用dockerpull命令直接拉取镜像,dockerpulliredmail/mariadbW2中间拉取使用一台有互联网接入的虚拟机......