• EDA(Exploratory Data Analysis)数据探索性分析


    EDA目的:通过了解数据集的分布情况,数据之间的关系,来帮我们更好的后期进行特征工程和建立模型。


    本文主要是一个根据coco数据集格式的json文件,来分析数据集中图片尺寸,宽高比,bbox尺寸,宽高比,以及每张图片中bbox数量的分布情况。

    分析的数据集来自:零基础入门CV - 街景字符编码识别赛题与数据-天池大赛-阿里云天池 (aliyun.com) ,主要是分析训练集,一共有三万张图片。

    instances_train2017.json,是我们通过将数据集json文件转换后符合coco数据集标准的json文件。

    import json
    import os
    
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    root_path = os.getcwd()
    json_filepath = os.path.join(root_path, 'instances_train2017.json')
    data = json.load(open(json_filepath, 'r'))
    EDA_dir = './EDA/'
    if not os.path.exists(EDA_dir):
        # shutil.rmtree(EDA_dir)
        os.makedirs(EDA_dir)
    
    # 准备图片数据
    images = data[
        'images']  # [{"license": 0, "url": null, "file_name": "0.jpg", "height": 350, "width": 741, "date_captured": null, "id": 0}, , , , , ]
    annotations = data[
        'annotations']  # [{"id": 0, "image_id": 0, "category_id": 1, "area": 17739, "bbox": [246, 77, 81, 219], "iscrowd": 0}, , , , ]
    
    images_height = []
    images_width = []
    images_aspect_ratio = []  # 图片的宽高比
    bboxes_height = []
    bboxes_width = []
    bboxes_aspect_ratio = []  # bboxes的宽高比
    bboxes_num_per_image = []  # 每个图片的bbox数量
    
    for i in images:
        images_width.append(i['width'])
        images_height.append(i['height'])
        width_height = i['width'] / i['height']
        images_aspect_ratio.append(width_height)
    
    for i in annotations:
        bboxes_width.append(i['bbox'][2])
        bboxes_height.append(i['bbox'][3])
        width_height = i['bbox'][2] / i['bbox'][3]
        bboxes_aspect_ratio.append(width_height)
    
    temp_num = 0
    images_id = []
    for i in annotations:
        if i['image_id'] not in images_id:
            images_id.append(i['image_id'])
            if temp_num > 0:
                bboxes_num_per_image.append(temp_num)
            temp_num = 1
        else:
            temp_num = temp_num + 1
    
    # 配置绘图的参数
    sns.set_style("whitegrid")
    
    # 绘制图片宽高的分布
    plt.title('Images width and height distribution')
    sns.kdeplot(images_width, images_height, shade=True)
    plt.savefig(EDA_dir + 'images_width_height_distribution.png', dpi=600)
    plt.show()
    
    # 绘制图片宽高比分布
    plt.title('Images aspect ratio distribution')
    sns.distplot(images_aspect_ratio, kde=False)
    plt.savefig(EDA_dir + 'images_aspect_ratio.png', dpi=600)
    plt.show()
    
    # 绘制图片宽度比分布
    plt.title('Images width distribution')
    sns.distplot(images_width, kde=False)
    plt.savefig(EDA_dir + 'images_width_distribution', dpi=600)
    plt.show()
    
    # 绘制图片高度比分布
    plt.title('Images height distribution')
    sns.distplot(images_height, kde=False)
    plt.savefig(EDA_dir + 'images_height_distribution.png', dpi=600)
    plt.show()
    
    # 绘制bboxes宽高的分布
    plt.title('Bboxes width and height distribution')
    sns.kdeplot(bboxes_width, bboxes_height, shade=True)
    plt.savefig(EDA_dir + 'bboxes_width_height_distribution.png', dpi=600)
    plt.show()
    
    # 绘制bboxes宽高比分布
    plt.title('Bboxes aspect ratio distribution')
    sns.distplot(bboxes_aspect_ratio, kde=False)
    plt.savefig(EDA_dir + 'bboxes_aspect_ratio .png', dpi=600)
    plt.show()
    
    # 绘制bboxes宽度比分布
    plt.title('Bboxes width distribution')
    sns.distplot(bboxes_width, kde=False)
    plt.savefig(EDA_dir + 'bboxes_width_distribution', dpi=600)
    plt.show()
    
    # 绘制bboxes高度比分布
    plt.title('Bboxes height distribution')
    sns.distplot(bboxes_height, kde=False)
    plt.savefig(EDA_dir + 'bboxes_height_distribution.png', dpi=600)
    plt.show()
    
    # 绘制每张图片bboxes个数的分布情况
    plt.title('Distribution of the number of BBoxes in each image')
    sns.distplot(bboxes_num_per_image, kde=False)
    plt.savefig(EDA_dir + 'bboxes_per_image_distribution.png', dpi=600)
    plt.show()
    

    生成的结果都保存到 ./EDA/ 文件夹中。

    结果展示:

    图片的宽度分布情况
    图片的高度分布情况
    图片的宽高比分布情况
    bbox的宽度分布情况
    bbox的高度分布情况
    bbox的宽高比分布情况
    图片宽度和高度的分布情况
    bbox宽度和高度的分布情况
    每张图片中bbox数量的分布情况

    通过EDA分析,我们可以得出:
    • 图片的宽度大部分处于0~200,小部分处于200~400之间,极少数>400。

    • 图片的高度大部分处于0~100,小部分处于100~200之间,极少数>200。

    • 图片的宽高比大部分处于1.7~3之间。

    • bbox的宽度大部分处于0~50。

    • bbox的高度大部分处于0~50,小部分处于50~100。

    • bbox的宽高比大部分处于0.25~0.75。

    • 每张图片中bbox数量大部分是1,2,3,小部分有4个bbox,极少数有5,6个bbox。

  • 相关阅读:
    10 道选择题,测试你是不是死忠谷粉
    JBoss Seam 3.0.0.Beta2 发布
    送给十二星座的名言警句
    Chinasb & B3log!
    GAE 博客——B3log Solo 0.2.5 正式版发布了!
    明天发布 B3log Solo 0.2.5
    JBoss Seam 3.0.0.Beta2 发布
    10 道选择题,测试你是不是死忠谷粉
    Python数据分析工具包:Pandas
    Programming Computer Vision with Python: Tools and algorithms for analyzing images
  • 原文地址:https://www.cnblogs.com/gy77/p/15748867.html
Copyright © 2020-2023  润新知