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

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

目录
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 指南进行安装。
在 OpenVINO 精度检查器工具中添加 DIoU-NMS 指标,以获取 YOLO v4 的正确 mAP

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 模型
在 OpenVINO 精度检查器工具中添加 DIoU-NMS 指标,以获取 YOLO v4 的正确 mAP

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 行添加以下内容
在 OpenVINO 精度检查器工具中添加 DIoU-NMS 指标,以获取 YOLO v4 的正确 mAP

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 结果:

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

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

5.0 参考资料

参考文档 文档编号/位置
在 OpenVINO 精度检查器工具中添加 DIoU-NMS 指标,以获取 YOLO v4 的正确 mAP

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

上一篇:在Jetson nano中利用TensorRT进行推理加速yolov5-6.0


下一篇:tensorRT(一)| tensorRT如何进行推理加速?(建议收藏)