小目标检测工具:Anchors分析以及每个类别的散点图

1. 意义:

1. Anchors目前存在问题:在小目标检测中,锚框的设计方法主要是基于K-means等聚类算法对边界框进行聚类,获取目标大小作为网络的先验信息。这种设计方法可以反映数据中大多数对象的大小,但大多数数据集存在长尾分布的情况,即一些对象样本远远超出其他样本。得到的锚框主要反映样本较多的对象的大小,因此样本较多的类别检测性能较好,其他类别检测性能较差。

2. 思考:根据以上存在的问题,对无人机数据集中的目标大小和锚框大小进行统计分析是非常有必要的。如第三部分所示,横轴表示宽度,纵轴表示高度,以像素数为单位。使用k-means算法对数据集进行聚类,得到9个锚框。

3. 计划:改进kmeans聚类算法,得到更加有利于检测小目标的的锚框。

2. 散点图分析:

1. 所有点的散点图分布代码


# 开发时间 : 2023/7/11 19:18
import os
import numpy as np
import matplotlib.pyplot as plt

# 画出所有点(宽高)的散点图
def figure():
    path_annotations = './VisDrone/VisDrone2019-DET-val/annotations/'
    dataname_anno = os.listdir(path_annotations) # [所有的图片信息.txt]
    x = [] # 横坐标
    y = [] # 纵坐标
    for f in dataname_anno:
        file_path_anno = os.path.join(path_annotations, f) # 每个.txt文件
        anno_file = open(file_path_anno)
        anno_lines = anno_file.readlines() # 每个.txt文件
        for s in anno_lines:
            w = int(s.split(',')[2]) # 宽
            h = int(s.split(',')[3]) # 高
            x.append(w)
            y.append(h)
    x = np.array(x)
    y = np.array(y)

    plt.figure()
    plt.scatter(x,y,s=1)
    plt.title("All classes")
    plt.show()
if __name__ == '__main__':
    figure()


2. 每个类别的散点图分布代码

# 开发时间 : 2023/7/11 19:18
import os
import numpy as np
import matplotlib.pyplot as plt

# 画出每个类别,传入的值为类别下标(int类型)
def figure_class(image_class):
    names = ['pedestrian', 'people', 'bicycle', 'car', 'van', 'truck', 'tricycle', 'awning-tricycle', 'bus', 'motor'] # 类别
    path_annotations = './VisDrone/VisDrone2019-DET-val/annotations/'
    dataname_anno = os.listdir(path_annotations)  # [所有的图片信息.txt]
    x = []  # 横坐标
    y = []  # 纵坐标
    for f in dataname_anno:
        file_path_anno = os.path.join(path_annotations, f)  # 每个.txt文件
        anno_file = open(file_path_anno)
        anno_lines = anno_file.readlines()  # 每个.txt文件
        for s in anno_lines:
            if int(s.split(',')[5]) == image_class:
                w = int(s.split(',')[2])  # 宽
                h = int(s.split(',')[3])  # 高
                x.append(w)
                y.append(h)
    x = np.array(x)
    y = np.array(y)
    plt.figure()
    plt.scatter(x, y, s=1)
    plt.title(names[image_class])
    plt.show()

if __name__ == '__main__':
    figure_class(2) # 输入0~9,测试查看每一类

3. 模型原始的9个锚框在各个类别上的位置

 

4. k-means聚类得到的9个锚框在各个类别上的位置

        关于kmeans聚类算法来说,模型使用的条件是:当bpr小于0.98,模型会自动重新更新锚框。

 5. kmeans++聚类得到的9个锚框在各个类别上的位置

3. 效果图

图1. 所有点的散点图

 图2. bicycle类别散点图

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值