范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

如何快速入门深度学习目标检测?

  学习目标 了解目标检测的任务 知道目标检测的常用数据集 知道目标检测算法的评价指标 掌握非极大值NMS算法的应用 了解常用的目标检测算法分类 1. 目标检测
  目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标,并确定它们的类别和位置。
  目标检测中能检测出来的物体取决于当前任务(数据集)需要检测的物体有哪些。假设我们的目标检测模型定位是检测动物(牛、羊、猪、狗、猫五种结果),那么模型对任何一张图片输出结果不会输出鸭子、书籍等其它类型结果。
  目标检测的位置信息一般由两种格式(以图片左上角为原点(0,0)):
  1、极坐标表示:(xmin, ymin, xmax, ymax) xmin,ymin:x,y坐标的最小值 xmin,ymin:x,y坐标的最大值
  2、中心点坐标:(x_center, y_center, w, h) x_center, y_center:目标检测框的中心点坐标 w,h:目标检测框的宽、高
  假设在下面的图像中进行检测,:
  那目标检测结果的中心点表示形式如下所示:
  2.常用的开源数据集
  经典的目标检测数据集有两种, PASCAL VOC数据集  和  MS COCO数据集 。 2.1PASCAL VOC数据集
  PASCAL VOC是目标检测领域的经典数据集。PASCAL VOC包含约10,000张带有边界框的图片用于训练和验证。PASCAL VOC数据集是目标检测问题的一个基准数据集,很多模型都是在此数据集上得到的,常用的是VOC2007和VOC2012两个版本数据,共20个类别,分别是:
  也就是:
  1.人: 人
  2.动物: 鸟,猫,牛,狗,马,羊
  3.交通工具: 飞机,自行车,船,公共汽车,汽车,摩托车,火车
  4.室内: 瓶子,椅子,餐桌,盆栽,沙发,电视/显示器
  下载地址 :https://pjreddie.com/projects/pascal-voc-dataset-mirror/
  整个数据的目录结构如下所示:
  其中: JPEGImages存放图片文件 Annotations下存放的是xml文件,描述了图片信息,如下图所示,需要关注的就是节点下的数据,尤其是bndbox下的数据.xmin,ymin构成了boundingbox的左上角,xmax,ymax构成了boundingbox的右下角,也就是图像中的目标位置信息
  ImageSets包含以下4个文件夹: Action下存放的是人的动作(例如running、jumping等等) Layout下存放的是具有人体部位的数据(人的head、hand、feet等等) Segmentation下存放的是可用于分割的数据。 Main下存放的是图像物体识别的数据,总共分为20类,这是进行目标检测的重点。该文件夹中的数据对负样本文件进行了描述。
  2.2MS COCO数据集
  MS COCO的全称是Microsoft Common Objects in Context,微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。
  COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以场景理解为目标,主要从复杂的日常场景中截取,图像中的目标通过精确地分割进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止目标检测的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。
  图像示例:
  coco数据集的标签文件标记了每个segmentation+bounding box的精确坐标,其精度均为小数点后两位一个目标的标签示意如下:
  {"segmentation":[[392.87, 275.77, 402.24, 284.2, 382.54, 342.36, 375.99, 356.43, 372.23, 357.37, 372.23, 397.7, 383.48, 419.27,407.87, 439.91, 427.57, 389.25, 447.26, 346.11, 447.26, 328.29, 468.84, 290.77,472.59, 266.38], [429.44,465.23, 453.83, 473.67, 636.73, 474.61, 636.73, 392.07, 571.07, 364.88, 546.69,363.0]], "area": 28458.996150000003, "iscrowd": 0,"image_id": 503837,  "bbox": [372.23, 266.38, 264.5,208.23] , "category_id": 4, "id": 151109}, 3.常用的评价指标3.1 IOU
  在目标检测算法中,IoU(intersection over union,交并比)是目标检测算法中用来评价2个矩形框之间相似度的指标:
  IoU = 两个矩形框相交的面积 / 两个矩形框相并的面积 ,
  如下图所示:
  通过一个例子看下在目标检测中的应用:
  其中上图蓝色框框为检测结果,红色框框为真实标注。
  那我们就可以通过预测结果与真实结果之间的交并比来衡量两者之间的相似度。一般情况下对于检测框的判定都会存在一个阈值,也就是IoU的阈值,一般可以设置当IoU的值大于0.5的时候,则可认为检测到目标物体。
  实现方法: import numpy as np # 定义方法计算IOU def Iou(box1, box2, wh=False):     # 判断bbox的表示形式     if wh == False:         # 使用极坐标形式表示:直接获取两个bbox的坐标         xmin1, ymin1, xmax1, ymax1 = box1         xmin2, ymin2, xmax2, ymax2 = box2     else:         # 使用中心点形式表示: 获取两个两个bbox的极坐标表示形式         # 第一个框左上角坐标         xmin1, ymin1 = int(box1[0]-box1[2]/2.0), int(box1[1]-box1[3]/2.0)         # 第一个框右下角坐标         xmax1, ymax1 = int(box1[0]+box1[2]/2.0), int(box1[1]+box1[3]/2.0)         # 第二个框左上角坐标         xmin2, ymin2 = int(box2[0]-box2[2]/2.0), int(box2[1]-box2[3]/2.0)         # 第二个框右下角坐标         xmax2, ymax2 = int(box2[0]+box2[2]/2.0), int(box2[1]+box2[3]/2.0)     # 获取矩形框交集对应的左上角和右下角的坐标(intersection)     xx1 = np.max([xmin1, xmin2])     yy1 = np.max([ymin1, ymin2])     xx2 = np.min([xmax1, xmax2])     yy2 = np.min([ymax1, ymax2])     # 计算两个矩形框面积     area1 = (xmax1-xmin1) * (ymax1-ymin1)      area2 = (xmax2-xmin2) * (ymax2-ymin2)     #计算交集面积     inter_area = (np.max([0, xx2-xx1])) * (np.max([0, yy2-yy1]))     #计算交并比     iou = inter_area / (area1+area2-inter_area+1e-6)     return iou
  假设我们检测结果如下所示,并展示在图像上: import matplotlib.pyplot as plt import matplotlib.patches as patches # 真实框与预测框 True_bbox, predict_bbox = [100, 35, 398, 400], [40, 150, 355, 398] # bbox是bounding box的缩写 img = plt.imread("dog.jpeg") fig = plt.imshow(img) # 将边界框(左上x, 左上y, 右下x, 右下y)格式转换成matplotlib格式:((左上x, 左上y), 宽, 高) # 真实框绘制 fig.axes.add_patch(plt.Rectangle(     xy=(True_bbox[0], True_bbox[1]), width=True_bbox[2]-True_bbox[0], height=True_bbox[3]-True_bbox[1],     fill=False, edgecolor="blue", linewidth=2)) # 预测框绘制 fig.axes.add_patch(plt.Rectangle(     xy=(predict_bbox[0], predict_bbox[1]), width=predict_bbox[2]-predict_bbox[0], height=predict_bbox[3]-predict_bbox[1],     fill=False, edgecolor="red", linewidth=2))
  计算IoU: Iou(True_bbox,predict_bbox)
  结果为: 0.51144359077629243.2 mAP(Mean Average Precision)
  目标检测问题中的每个图片都可能包含一些不同类别的物体,需要评估模型的物体分类和定位性能。因此,用于图像分类问题的标准指标precision不能直接应用于此。 在目标检测中,mAP是主要的衡量指标。
  mAP是多个分类任务的AP的平均值,而AP(average precision)是PR曲线下的面积,所以在介绍mAP之前我们要先得到PR曲线。
  TP、FP、FN、TN
  查准率、查全率 查准率(Precision): TP/(TP + FP) 查全率(Recall): TP/(TP + FN)
  二者绘制的曲线称为 P-R 曲线
  先定义两个公式,一个是 Precision,一个是 Recall,与上面的公式相同,扩展开来,用另外一种形式进行展示,其中 all detctions 代表所有预测框的数量, all ground truths 代表所有 GT 的数量。
  AP 是计算某一类 P-R 曲线下的面积,mAP 则是计算所有类别 P-R 曲线下面积的平均值。
  假设我们有 7 张图片(Images1-Image7),这些图片有 15 个目标(绿色的框,GT 的数量,上文提及的 all ground truths)以及 24 个预测边框(红色的框,A-Y 编号表示,并且有一个置信度值):
  根据上图以及说明,我们可以列出以下表格,其中 Images 代表图片的编号,Detections 代表预测边框的编号,Confidences 代表预测边框的置信度,TP or FP 代表预测的边框是标记为 TP 还是 FP(认为预测边框与 GT 的 IOU 值大于等于 0.3 就标记为 TP;若一个 GT 有多个预测边框,则认为 IOU 最大且大于等于 0.3 的预测框标记为 TP,其他的标记为 FP,即一个 GT 只能有一个预测框标记为 TP),这里的 0.3 是随机取的一个值。
  通过上表,我们可以绘制出 P-R 曲线(因为 AP 就是 P-R 曲线下面的面积),但是在此之前我们需要计算出 P-R 曲线上各个点的坐标,根据置信度从大到小排序所有的预测框,然后就可以计算 Precision 和 Recall 的值,见下表。(需要记住一个叫累加的概念,就是下图的 ACC TP 和 ACC FP)
  标号为 1 的 Precision 和 Recall 的计算方式:Precision=TP/(TP+FP)=1/(1+0)=1,Recall=TP/(TP+FN)=TP/(all ground truths)=1/15=0.0666 (all ground truths 上面有定义过了) 标号 2:Precision=TP/(TP+FP)=1/(1+1)=0.5,Recall=TP/(TP+FN)=TP/(all ground truths)=1/15=0.0666 标号 3:Precision=TP/(TP+FP)=2/(2+1)=0.6666,Recall=TP/(TP+FN)=TP/(all ground truths)=2/15=0.1333 其他的依次类推
  然后就可以绘制出 P-R 曲线
  得到 P-R 曲线就可以计算 AP(P-R 曲线下的面积),要计算 P-R 下方的面积,有两种方法: 在VOC2010以前,只需要选取当Recall >= 0, 0.1, 0.2, ..., 1共11个点时的Precision最大值,然后AP就是这11个Precision的平均值,取 11 个点 [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] 的插值所得
  得到一个类别的 AP 结果如下:
  要计算 mAP,就把所有类别的 AP 计算出来,然后求取平均即可。 在VOC2010及以后,需要针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,如下图所示:
  然后计算PR曲线下面积作为AP值:
  计算方法如下所示:
  4.NMS(非极大值抑制)
  非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。 NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪、数据挖掘、3D重建、目标识别以及纹理分析等 。
  在目标检测中,NMS的目的就是要去除冗余的检测框,保留最好的一个,如下图所示:
  NMS的原理是对于预测框的列表B及其对应的置信度S,选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的IoU大于阈值Nt的框从B中移除.重复这个过程,直到B为空。
  使用流程如下图所示: 首先是检测出一系列的检测框 将检测框按照类别进行分类 对同一类别的检测框应用NMS获取最终的检测结果
  通过一个例子看些NMS的使用方法,假设定位车辆,算法就找出了一系列的矩形框,我们需要判别哪些矩形框是没用的,需要使用NMS的方法来实现。
  假设现在检测窗口有:A、B、C、D、E 5个候选框,接下来进行迭代计算: 第一轮:因为B是得分最高的,与B的IoU 0.5删除。A,CDE中现在与B计算IoU,DE结果 0.5,剔除DE,B作为一个预测结果,有个检测框留下B,放入集合 第二轮:A的得分最高,与A计算IoU,C的结果 0.5,剔除C,A作为一个结果
  最终结果为在这个5个中检测出了两个目标为A和B。
  单类别的NMS的实现方法如下所示: import numpy as np def nms(bboxes, confidence_score, threshold):     """非极大抑制过程     :param bboxes: 同类别候选框坐标     :param confidence: 同类别候选框分数     :param threshold: iou阈值     :return:     """     # 1、传入无候选框返回空     if len(bboxes) == 0:         return [], []     # 强转数组     bboxes = np.array(bboxes)     score = np.array(confidence_score)      # 取出n个的极坐标点     x1 = bboxes[:, 0]     y1 = bboxes[:, 1]     x2 = bboxes[:, 2]     y2 = bboxes[:, 3]      # 2、对候选框进行NMS筛选     # 返回的框坐标和分数     picked_boxes = []     picked_score = []     # 对置信度进行排序, 获取排序后的下标序号, argsort默认从小到大排序     order = np.argsort(score)     areas = (x2 - x1) * (y2 - y1)     while order.size > 0:         # 将当前置信度最大的框加入返回值列表中         index = order[-1]         #保留该类剩余box中得分最高的一个         picked_boxes.append(bboxes[index])         picked_score.append(confidence_score[index])          # 获取当前置信度最大的候选框与其他任意候选框的相交面积         x11 = np.maximum(x1[index], x1[order[:-1]])         y11 = np.maximum(y1[index], y1[order[:-1]])         x22 = np.minimum(x2[index], x2[order[:-1]])         y22 = np.minimum(y2[index], y2[order[:-1]])         # 计算相交的面积,不重叠时面积为0         w = np.maximum(0.0, x22 - x11)         h = np.maximum(0.0, y22 - y11)         intersection = w * h          # 利用相交的面积和两个框自身的面积计算框的交并比         ratio = intersection / (areas[index] + areas[order[:-1]] - intersection)         # 保留IoU小于阈值的box         keep_boxes_indics = np.where(ratio < threshold)         # 保留剩余的框         order = order[keep_boxes_indics]     # 返回NMS后的框及分类结果        return picked_boxes, picked_score
  假设有检测结果如下: bounding = [(187, 82, 337, 317), (150, 67, 305, 282), (246, 121, 368, 304)] confidence_score = [0.9, 0.65, 0.8] threshold = 0.3 picked_boxes, picked_score = nms(bounding, confidence_score, threshold) print("阈值threshold为:", threshold) print("NMS后得到的bbox是:", picked_boxes) print("NMS后得到的bbox的confidences是:", picked_score)
  返回结果: 阈值threshold为: 0.3 NMS后得到的bbox是: [array([187,  82, 337, 317])] NMS后得到的bbox的confidences是: [0.9]5.目标检测方法分类
  目标检测算法主要分为two-stage(两阶段)和one-stage(单阶段)两类: two-stage的算法
  先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类。如下图所示,主要通过一个卷积神经网络来完成目标检测过程,其提取的是CNN卷积特征,进行候选区域的筛选和目标检测两部分。网络的准确度高、速度相对较慢。
  two-stages算法的代表是RCNN系列:R-CNN到Faster R-CNN网络 One-stage的算法
  直接通过主干网络给出目标的类别和位置信息,没有使用候选区域的筛选网路,这种算法速度快,但是精度相对Two-stage目标检测网络降低了很多。
  one-stage算法的代表是: YOLO系列:YOLOv1、YOLOv2、YOLOv3、 SSD等。

60岁张宏民退休后首复出!身形发福脸部圆润,一头黑发双眼有神近日,著名央视主持人张宏民在某社交平台上注册了账号,自从张宏民2014年从新闻联播退休后,如今他时隔7年又重现回到了大众的视野里。在他分享的视频里,他两眼炯炯有神,满头黑发梳得整齐上市半年股价跌超73,滴滴发布上市后首份财报,三季度净亏306亿12月30日早间,滴滴出行发布2021年第二季度第三季度未经审计的中期精简财报,这是滴滴自上市后发布的首份财报。财报显示,按照美国通用会计准则(GAAP)计算,滴滴第三季度总营收为4G还没退服全球5G网速已开始缩水下滑达39你们怎么看用上5G了吗?感觉网速如何?日前Ookla发布了2021年三季度Speedtest调查报告,显示所统计全球5G网络平均下载速度为166。13Mbps,相较于去年同期的206。22M速览小米再发自研芯片,雷军将投入1000亿元死磕硬科技出品搜狐科技作者张雅婷12月28日,小米发布首款自研的充电芯片澎湃P1,在新机12Pro首发搭载。与此同时,小米创始人董事长兼CEO雷军表示,小米研发投入计划升级,未来五年研发投入不造车的华为发布新车AITO!搭载鸿蒙系统,海报PPT设计完美出圈前两天,华为的冬季旗舰新品发布会,大家看了吗?折叠手机华为P50Pocket已经够夺目了。没想到,之前一直宣称不造车的华为,现场推出了首款几乎由华为全面操刀的鸿蒙汽车AITO问界M2022年基本实现村村通快递,抓住机遇开个快宝驿站咋样?过去几年,农村电商高速发展,但是在村级快递配送上还存在很多难点。农村多是留守儿童和老人,外出打工的亲友给家人购物后,老人只能骑着摩托或开着拖拉机前往距离自己十几公里的快递点去取件此三星韩宗熙上任第一条军令,组建团队抢中国市场百能云芯韩国三星电子为了提振低迷的中国大陆市场业务,日前传出在公司内部成立中国业务革新小组,此团队专为中国大陆市场服务,该部门直属于近期成为三星电子中手机消费电子业务主管的韩宗熙,可视为其道指六连涨创收盘新高,热门中概股多数下跌中新经纬12月30日电美东时间周三,美股三大指数涨跌不一,道指连涨六日与标普500指数均创收盘新高。截图来源Wind截至收盘,道指涨90。42点,涨幅为0。25,报36488。63年终奖税收优惠延续两年,中高收入者获利更大据央视新闻消息,12月29日,李克强总理主持召开国务院常务会议,决定延续实施部分个人所得税优惠政策,缓解中低收入群体压力。会议决定,将全年一次性奖金不并入当月工资薪金所得实施按月单证监会集中发9条监管决定中金因保荐联想未勤勉尽责被谈话澎湃新闻记者田忠方葛佳因在保荐过程中未勤勉尽责,中金公司(601995。SH,03908。HK)万联证券及6位从业人员被证监会采取监管谈话措施。国金证券(600109)和10位从业华为手机竟然可以同时登陆3个微信!原来方法这么简单,真的爱了微信是我们在生活和工作当中最常使用的通讯工具,相信很多人都同时拥有2个微信号,一个是工作所需要的一个则是生活所需要的。但是你们知道吗?华为手机可以同时开启3个微信,接下来让我们看看
微软强制将用户数据传到外国处理今天上班电脑一开机,windows11就提示你的数据将在你所在国家或地区之外进行处理没有跳过按钮,只能选择下一步,否则不能使用。微软通过系统升级的方式强制将用户数据传到国外,这样有macOS版Outlook应用更新引入多账号功能IT之家4月14日消息,微软官方博客发布更新,宣布适用于macOS平台的电子邮件应用Outlook新增多账号功能。这意味着用户可设置不同的账号,来区分工作和生活。微软在博文中还表示明星们私底下都在用什么手机?这些国产手机的出现并不意外作为明星的时尚秀场,各种社交媒体机场街拍除了秀时尚穿搭之外,手机可能是出镜率最高的配饰之一。或许很多人跟我一样好奇,她们到底用的都是什么手机?私下都习惯用什么手机吗?这里来一期当红想要换新手机,这些坑要小心避过!现在每个月都会有很多新机发布,不过其中有新颖的机型却很少,大多数的配置相差不大,就像是套娃机一样,虽然看起来很厉害的样子,但实际上完美的机型并不多,我们在选购手机时,要注意避开一些不黑不吹,华为没落后,苹果已经碾压国产手机了前段时间,Counterpoint发布了一份数据,显示的是2022年中国市场销量最好的10款手机。我们发现苹果的iPhone不仅占据了中国2022年购买量榜单的前三名,还贡献了全年马来西亚入出境受阻?!紧急提醒!随着中马两国各领域交流日益密切,中国公民赴马来西亚旅游商贸留学等逐渐增多,近期驻马来西亚使馆接到多起涉我公民入出境受阻电信诈骗和财物盗窃等方面求助。驻马来西亚使馆提醒中国公民密切关越来越多的孩子得白血病,儿童专家坦言背后2个原因不要小看一个月连续签了三次病危通知书!磊磊(化名)的妈妈心如刀绞,突如其来的白血病,成了这个家庭的噩梦。这天,正在认真听课的磊磊突感肚子疼,老师赶忙联系他妈妈。妈妈本以为磊磊是着凉或吃坏了穿山社区开展潮聚三月三和谐在八桂邻里欢歌话油茶民俗文化活动4月13日下午,穿山社区新时代文明实践站团支部计生协妇联联合辖区共建共联单位桂林市税务局桂林市穿山小学桂林市穿山中学桂林市旅游职业中等专业学校及双报到单位桂林市七星区住建局开展了潮盂县藏山翠谷红色文化旅游项目规划设计方案评审会圆满召开黄河新闻网阳泉讯(记者刘帅文)4月14日,盂县藏山翠谷红色文化旅游项目规划设计方案评审会圆满召开。市县有关部门和相关企业负责人参加此次评审会。评审会上,项目规划设计单位中地设计集团23年换机思路果粉花粉建议冲新品,安卓党可关注一加定制新机2023年如果想换手机的话,其实是一个很不错的节点,因为今年前四个月,我们就看到了众多的高性价比安卓新品。另外,苹果iPhone14系列来了一波史无前例的大降价,华为也终于进入了正被誉为江南第一风水村的郭洞古村,美丽安静还是中国历史文化名村你知道吗?以前武义县郭洞古村为了保护龙山上植被,防止乱砍乱伐,竟然写进了族规上山砍伐一棵大树者,断其一臂砍伐一棵小树者,断其一指折一树枝者,拔其一指甲。头条创作挑战赛发现古村落的文