目录
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 参考资料
参考文档 文档编号/位置