ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在 OpenVINO 精度检查器工具中添加 DIoU-NMS 指标,以获取 YOLO v4 的正确 mAP

2021-07-13 17:02:18  阅读:309  来源: 互联网

标签:mAP OpenVINO NMS area self annotations np order accuracy


在这里插入图片描述

目录
1.0 简介 5
2.0 设置环境 6
3.0 添加 Diou-nms 的步骤 7
3.1.安装精度检查器工具 7
3.2.编辑
“/opt/intel/openvino_2021/deployment_tools/open_model_zoo/tools/accuracy_checker/ac curacy_checker/postproces sor/nms.py” 7
4.0 用 DIoU-NMS 检查 yolo-v4-tf 模型的精度 10
4.1.下载和转换yolo-v4-tf 模型 10
4.2.准备数据集和 yml 文件 10
4.2.1.下载数据集 10
4.2.2.复制和编辑“accuracy-check.yml” 10
4.3.运行精度检查器工具,计算 yolo-v4-tf 的统计精度 11
5.0 参考资料 12

修订记录

日期 修订版 说明
2021 年 1 月 0.8 初始版本。

1.0 简介
Yolov4 模型于 2020 年中期推出,它的问世对深度学习目标检测领域产生了深远影响。为取得成功,Yolov4 集成了许多一流的技术,其中包括改进的非极大值抑制 (NMS) 算法, 该算法使用距离交并比(DIoU) 而非交并比 (IoU)。DIoU 总结了边界框回归中的两个几何因素(即重叠区域和中心点距离),从而加快了收敛速度并提升了性能。

在本白皮书中,DIoU-NMS 函数将被添加到OpenVINO™ 精度检查器工具中,以用于计算yolov4 的正确预期精度。尽管 DIoU-NMS 可帮助大幅提升精度,但它也可以与训练后优化工具包 (pot) 一起使用,以生成优化的 INT8 模型。

2.0设置环境

  • 系统环境
    – 设置OpenVINO™ 2021.2

  • Ubuntu 18.04 或Ubuntu 20.04。

3.0 添加 Diou-nms 的步骤
3.1.安装精度检查器工具
按照 openvinotookit_open_model_zoo 指南进行安装。
在这里插入图片描述

3.2.编辑“/opt/intel/openvino_2021/deployment_tools/open_model_zo o/tools/accuracy_checker/accuracy_checker/postproces sor/nms.py”
将以下代码添加到文件中:

22.	description="Use minimum area of two boundi
ng boxes as base area to calculate overlap"
23.	)
24.	})
25.	return parameters
26.
27.	def configure(self):
28.	self.overlap = self.get_value_from_config('overlap'
)
29.	self.include_boundaries = self.get_value_from_confi g('include_boundaries')
30.	self.keep_top_k = self.get_value_from_config('keep_
top_k')
31.	self.use_min_area = self.get_value_from_config('use
_min_area')
32.
33.	def process_image(self, annotations, predictions):
34.	for prediction in predictions:
35.	scores = get_scores(prediction)
36.	keep = self.diou_nms(
37.	prediction.x_mins, prediction.y_mins, predi
ction.x_maxs, prediction.y_maxs, scores,
38.	self.overlap, self.include_boundaries, self
.keep_top_k, self.use_min_area
39.	)
40.	prediction.remove([box for box in range(len(pre
diction.x_mins)) if box not in keep])
41.
42.	return annotations, predictions
43.
44.	@staticmethod
45.	def diou_nms(x1, y1, x2, y2, scores, thresh, include_bo
undaries=True, keep_top_k=None, use_min_area=False):
46.	"""
47.	Pure Python NMS baseline.
48.	"""
49.	b = 1 if include_boundaries else 0
50.
51.	areas = (x2 - x1 + b) * (y2 - y1 + b)
52.	order = scores.argsort()[::-1]
53.
54.	if keep_top_k:
55.	order = order[:keep_top_k]
56.
57.	keep = []
58.
59.	while order.size > 0:
60.	i = order[0]
61.	keep.append(i)
62.
63.	xx1 = np.maximum(x1[i], x1[order[1:]])
64.	yy1 = np.maximum(y1[i], y1[order[1:]])
65.	xx2 = np.minimum(x2[i], x2[order[1:]])


66.	yy2 = np.minimum(y2[i], y2[order[1:]])
67.
68.	w = np.maximum(0.0, xx2 - xx1 + b)
69.	h = np.maximum(0.0, yy2 - yy1 + b)
70.	intersection = w * h
71.
72.	cw = np.maximum(x2[i], x2[order[1:]]) - np.mini
mum(x1[i], x1[order[1:]])
73.	ch  =  np.maximum(y2[i],  y2[order[1:]])  -  np.mini mum(y1[i], y1[order[1:]])
74.	c_area = cw**2+ch**2+1e-16
75.	rh02 = ((x2[order[1:]]+x1[order[1:]])-
(x2[i]+x1[i]))**2/4+((y2[order[1:]]+y1[order[1:]])- (y2[i]+y1[i]))**2/4
76.
77.	if use_min_area:
78.	base_area = np.minimum(areas[i], areas[orde
r[1:]])
79.	else:
80.	base_area  =  (areas[i]  +  areas[order[1:]]  -  intersection)
81.
82.	overlap =
83.	np.divide( intersectio
84.	n, base_area,
85.	out=np.zeros_like(intersection, dtype=float
),
86.	where=base_area != 0
87.	) - pow(rh02/c_area,0.6)
88.	order   =   order[np.where(overlap    <=    thresh)[0]    + 1] # pylint: disable=W0143
89.
90.	return keep

4.0 用 DIoU-NMS 检查 yolo-v4-tf 模型的精度
4.1.下载和转换 yolo-v4-tf 模型
在这里插入图片描述

4.2.准备数据集和 yml 文件

4.2.1.下载数据集

1. wget http://images.cocodataset.org/zips/val2017.zip
2. wget http://images.cocodataset.org/annotations/annotations_tra inval2017.zip
3. unzip -
d annotations_trainval2017/ annotations_trainval2017.zip
4. unzip -d annotations_trainval2017/annotations/ val2017.zip

4.2.2.复制和编辑“accuracy-check.yml”
复制“accuracy-check.yml”

1.sudo mv /opt/intel/openvino_2021/deployment_tools/open_mode l_zoo/models/public/yolo-v4-tf/accuracy-check.yml ~/Documents/

编辑“accuracy-check.yml”
1.标注出第 2-60 行
2.在第 65 行添加以下内容
在这里插入图片描述

3.从以下位置开始编辑第 94 行
-type: nms

一直到

-type: diou-nms

4.3.运行精度检查器工具,计算 yolo-v4-tf 的统计精度
如果上述设置和修改正确,请使用以下命令获取精度结果。

1. accuracy_check -c accuracy-check.yml -m public/yolo-v4- tf/FP32/ -- definitions /opt/intel/openvino_2021/deployment_tools/open_mod el_zoo/tools/accuracy_checker/dataset_definitions.yml - s annotations_trainval2017/annotations/ -td CPU

mAP 结果:

在这里插入图片描述

果证实 DIoU 的 mAP 比IoU 更准确。尽管使用训练后优化工具包 (pot) 将模型转换为INT8 时只有微小的差异,但是这些差异可能会影响转换后的INT8 模型的性能。因此,实现面向OpenVINO 工具™(精度检查器和 pot)的 DIoU-NMS 函数非常重要。

5.0 参考资料

参考文档 文档编号/位置
在这里插入图片描述

标签:mAP,OpenVINO,NMS,area,self,annotations,np,order,accuracy
来源: https://blog.csdn.net/gc5r8w07u/article/details/118703528

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有