当前位置: 首页 > news >正文

专做负面的网站安徽企业网站建设

专做负面的网站,安徽企业网站建设,网站建设价钱差异,家私家具网上商城参考 coco eval 解析 COCO目标检测比赛中的模型评价指标介绍! coco 的评估函数对应的是 pycocotools 中的 cocoeval.py 文件。 从整体上来看,整个 COCOeval 类的框架如图: 基础的用法为 # The usage for CocoEval is as follows: cocoGt…

参考

coco eval 解析
COCO目标检测比赛中的模型评价指标介绍!

coco 的评估函数对应的是 pycocotools 中的 cocoeval.py 文件。
从整体上来看,整个 COCOeval 类的框架如图:
在这里插入图片描述

基础的用法为

# The usage for CocoEval is as follows:
cocoGt=..., cocoDt=...       # load dataset and results
E = CocoEval(cocoGt,cocoDt); # initialize CocoEval object
E.params.recThrs = ...;      # set parameters as desired
E.evaluate();                # run per image evaluation
E.accumulate();              # accumulate per image results
E.summarize();               # display summary metrics of results

cocoGt, cocoDt 应该是什么格式?如果是COCO 格式,注意需要增加 score 值。(how?)

__init__ 初始化函数

参数解释如下:
在这里插入图片描述
注意几个字母的含义
N: 用于评估的img_id 的个数
K: 用于评估的cat_id 的个数
T: iouThrs 的个数
R: recThrs 的个数
A: 对象面积分段后的数量
M: maxDets 每张图片检测的最大检测框数量

_prepare

根据传入的初始化参数做一些前置化的处理

    def _prepare(self):'''Prepare ._gts and ._dts for evaluation based on params:return: None'''def _toMask(anns, coco):# modify ann['segmentation'] by referencefor ann in anns:rle = coco.annToRLE(ann)ann['segmentation'] = rlep = self.paramsif p.useCats:gts=self.cocoGt.loadAnns(self.cocoGt.getAnnIds(imgIds=p.imgIds, catIds=p.catIds))dts=self.cocoDt.loadAnns(self.cocoDt.getAnnIds(imgIds=p.imgIds, catIds=p.catIds))else:gts=self.cocoGt.loadAnns(self.cocoGt.getAnnIds(imgIds=p.imgIds))dts=self.cocoDt.loadAnns(self.cocoDt.getAnnIds(imgIds=p.imgIds))# convert ground truth to mask if iouType == 'segm'if p.iouType == 'segm':_toMask(gts, self.cocoGt)_toMask(dts, self.cocoDt)# set ignore flagfor gt in gts:gt['ignore'] = gt['ignore'] if 'ignore' in gt else 0gt['ignore'] = 'iscrowd' in gt and gt['iscrowd']if p.iouType == 'keypoints':gt['ignore'] = (gt['num_keypoints'] == 0) or gt['ignore']self._gts = defaultdict(list)       # gt for evaluationself._dts = defaultdict(list)       # dt for evaluationfor gt in gts:self._gts[gt['image_id'], gt['category_id']].append(gt)for dt in dts:self._dts[dt['image_id'], dt['category_id']].append(dt)self.evalImgs = defaultdict(list)   # per-image per-category evaluation resultsself.eval     = {}                  # accumulated evaluation results

computeIoU(self, imgId, catId):

根据image_id和cat_id计算这张图片里 cat_id 的所有GT、DT的iou矩阵,主要用于bbox和segmentation;
这里就是涉及到单张图片的单个类别的计算。

computeOks(self, imgId, catId):

根据image_id和cat_id计算这张图片里所有GT、DT的Oks矩阵,也就是Sec 1.2.里OKS的计算源码出处。这里OKS矩阵的维度是

OKS 矩阵是什么?

evaluateImg

对单张图片的单个类别做统计。
按照这个的话,我还是没有把预测结果转换为 coco json.

maxDets 每张图片的最大检测数
useCats 指定类别评估

cocoGt, cocoDt 都是 COCO API 数据

过程会计算每张图的结果吗?会的,每张图每个类别分别计算,最后汇总的。
在这里插入图片描述
evaluateImg来计算每一张图片、每一个类别在不同条件下的检测结果;

precision(T,R,K,A,M) recall(T,K,A,M)。
TKAM 分别是代表什么?什么意思?

cocoEval.evaluate() 只是每幅图的det和gt做了匹配,并将结果存在了self.evalImgs中。计算tp等指标需要cocoEval.accumulate()。

针对上述accumulate获得的precision、recall矩阵,在不同的维度上进行统计,然后再呈现结果。
函数内部会根据传入的具体的IoU阈值,面积阈值,最大检测数的值返回上述precision和recall中对应维的检测结果,我们就也可以自定义形式返回我们想要的各种参数下的AP与AR啦。

coco api 的 loadRes 怎么理解?
COCO API-COCO模块在det中的应用

结合 mmdet 中的 cocometric

mmdet/evaluation/metrics/coco_metric.py

result2json 将结果格式化为coco格式。

# convert predictions to coco format and dump to json file
result_files = self.results2json(preds, outfile_prefix)

/home/my_mmdet/demo/inference_demo.ipynb 已经给出了不同场景下的推理

  • 一张图片
  • 一个文件夹
    确认一下这两种情况是否经过了完整的 预处理?

确认 mmdet 预测的结果格式?
然后保留一份 json 作为 cocoeval 实验的example.

mmdet 中的 cocometric, 更像是一个过程评估器。
需要不断通过process的方式处理gt和pred?

先 process, 再 compute_metric?

模型在处理的过程中,会生成带有 metainfo,img_id 的预测结果。但是在自己调用 detinferencer 的时候却不会生成?为何?

  • 如何解决?让自己更容易简易调用数据结果?
  • dumpresult 为pkl是怎么实现的?

gt 也是在process 这个函数中的 data_batch 中加入的,额,不是,是在 datasamples 中返回的。

def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:"""Process one batch of data samples and predictions. The processedresults should be stored in ``self.results``, which will be used tocompute the metrics when all batches have been processed.Args:data_batch (dict): A batch of data from the dataloader.data_samples (Sequence[dict]): A batch of data samples thatcontain annotations and predictions."""for data_sample in data_samples:result = dict()pred = data_sample['pred_instances']result['img_id'] = data_sample['img_id']result['bboxes'] = pred['bboxes'].cpu().numpy()result['scores'] = pred['scores'].cpu().numpy()result['labels'] = pred['labels'].cpu().numpy()# encode mask to RLEif 'masks' in pred:result['masks'] = encode_mask_results(pred['masks'].detach().cpu().numpy()) if isinstance(pred['masks'], torch.Tensor) else pred['masks']# some detectors use different scores for bbox and maskif 'mask_scores' in pred:result['mask_scores'] = pred['mask_scores'].cpu().numpy()# parse gtgt = dict()gt['width'] = data_sample['ori_shape'][1]gt['height'] = data_sample['ori_shape'][0]gt['img_id'] = data_sample['img_id']if self._coco_api is None:# TODO: Need to refactor to support LoadAnnotationsassert 'instances' in data_sample, \'ground truth is required for evaluation when ' \'`ann_file` is not provided'gt['anns'] = data_sample['instances']# add converted result to the results listself.results.append((gt, result))

coco 接口

这两个接口是否可以帮助不通过json构造coco?

loadRes

将结果转换为 loadNumpyAnnotations 输入格式、

list:
ann 一定要求包括以下几个 key, score 以及别的key看你心情加?
- image_id
- segmentation
- bbox

- score??? 有score 吗?

loadNumpyAnnotations

def loadNumpyAnnotations(self, data):"""Convert result data from a numpy array [Nx7] where each row contains {imageID,x1,y1,w,h,score,class}:param  data (numpy.ndarray):return: annotations (python nested list)"""print('Converting ndarray to lists...')assert(type(data) == np.ndarray)print(data.shape)assert(data.shape[1] == 7)N = data.shape[0]ann = []for i in range(N):if i % 1000000 == 0:print('{}/{}'.format(i,N))ann += [{'image_id'  : int(data[i, 0]),'bbox'  : [ data[i, 1], data[i, 2], data[i, 3], data[i, 4] ],'score' : data[i, 5],'category_id': int(data[i, 6]),}]return ann

self.datasets

datasets 是个什么?

mask 这块是一个比较细节的地方

mmdet 返回的mask, 和我们输入的格式不同,一种是 polygon,还有一种?rle?
import pycocotools._mask as _mask

然后这个 mask 的解析, coco metrics 里已经给了一个案例了。
做了一个 annotation 出来而已。
下一步是写出来,然后是继续到最后,detect完整个逻辑(3小时?)

mAP 的计算中

其实有一个比较诡异的问题,边界case 是如何处理的?比如gt为0?dt为0?

计算每张图片的 mAP

# 计算每张图像的 mAPper_image_mAPs = []for img_id in coco_api.getImgIds():coco_eval.params.imgIds = [img_id]coco_eval.evaluate()coco_eval.accumulate()coco_eval.summarize()# 获取每张图像的 mAP 值per_image_mAPs.append(coco_eval.stats[1])# 打印每张图像的 mAP 值for i, mAP in enumerate(per_image_mAPs):print(f"mAP for image {i + 1}: {mAP}")

问题

  • iouType to ‘segm’, ‘bbox’ or ‘keypoints’ 有什么区别?
  • maxDets - [1 10 100] M=3 thresholds on max detections per image 这个需要根据实际情况调整吗?
http://www.qdjiajiao.com/news/7391.html

相关文章:

  • 哪个网站可以卖自己做的模型页优化软件
  • 今日重点新闻seo标题优化
  • 建设部网站 造价工程师如何做seo搜索优化
  • 做网站必须托管服务器吗广东百度seo
  • 广州品牌型网站建设靠谱的免费建站
  • 贸易公司如何做英文网站免费影视软件靠什么赚钱
  • b2c网站价格百度seo灰色词排名代发
  • 怎样做网站才不能被攻破百度投诉中心24人工客服
  • 网站建设都需要哪些书百度录入网站
  • 哪个网站做体检预约的营销战略有哪些内容
  • 网站的发展趋势百度点击器下载
  • vs2017可以做网站吗百度平台订单查询
  • 手机网站WordPress主题营销网站建设培训学校
  • 李沧做网站公司微商推广哪家好
  • 网站 css雅思培训班价格一般多少
  • 没有营业执照怎么样做百度企业网站信息流广告公司一级代理
  • 搜狗网站收录提交入口高端企业建站公司
  • 企业网站建设哪家便宜重庆seo网站运营
  • 政府的网站应该怎么做前端开发
  • .netcore网站开发十种营销方式
  • 对网站开发实训的建议百度竞价推广屏蔽软件
  • 答题网站怎么做怎样制作属于自己的网站
  • 电子商务网站建设的步骤进入百度app
  • mac 做网站百度关键词推广网站
  • 重庆做网站开发的集中江东seo做关键词优化
  • 嘉峪关市建设路小学新闻网站怎么做手工
  • 如何用java做网站界面海外网站
  • 个人网站可以如果做淘宝客搜索引擎大全
  • 东莞网站优化有哪些公司网站怎么注册
  • dede网站源码西安关键字优化哪家好