##对YOLOv3算法的原理理解(一):k-means得到了什么?
YOLO利用k-means算法对anchors进行聚类后,最终选择了5种不同尺寸的anchors(而非Faster-RCNN中的九个)作为bounding box输入。思路如下:
- 提供训练集,训练集中包括N张图片。每张图片包含C个标记框(我理解为ground-truth bounding box),这些标记框的(x, y, w, h)信息都在该图片的注释信息里。
- 读取训练集中每张图片的标记框信息,即读取C个(x, y, w, h)。由于k-means学习是为了选出适合的anchors形状,所以主要使用 w 和 h 。
- 所以k-means需要分类的数据一共NC个,每个数据都是(w, h)的形式。利用k-means算法,将这NC个标注框,按形状进行分类,YOLO的作者经过权衡,选择将其分为5类。即选择k=5。
- 最后返回的值,是这五个类型的centroid所代表的 w 和 h (取的是平均值,所以未必会是训练集中的某种 w 和 h),并在网络中对每个ROI使用这五种形状的anchors。
k-means具体的实现代码可参考:
https://blog.csdn.net/DaVinciL/article/details/100519521
https://blog.csdn.net/hrsstudy/article/details/71173305