最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python腳本實現統(tǒng)計與可視化COCO數據集標注信息

 更新時間:2026年03月18日 14:59:06   作者:lxmyzzs  
COCO(Common Objects in Context)是目前計算機視覺領域最流行的數據集之一,下面我們就來看看如何使用Python腳本實現統(tǒng)計與可視化COCO數據集標注信息吧

一、COCO數據集簡介

COCO(Common Objects in Context)是目前計算機視覺領域最流行的數據集之一,廣泛用于目標檢測、實例分割、人體關鍵點檢測等任務。COCO數據集采用JSON格式存儲標注信息,包含圖片信息、類別信息以及每個目標的標注框(bbox)、分割掩碼等。對于從事目標檢測研究的同學來說,經常需要分析數據集的標注分布,例如各類別的目標數量、圖片分辨率分布等,這有助于理解數據集的構成,為模型訓練和評估提供指導。

二、為什么需要分析COCO標注文件

在實際項目中,拿到一個COCO格式的數據集后,我們通常需要回答以下問題:

  • 數據集中有多少張圖片?多少個標注框?
  • 類別有哪些?每個類別的標注數量是多少?是否存在類別不平衡?
  • 圖片的分辨率分布如何?是否有大量小尺寸圖片?

通過分析這些信息,我們可以更好地設計模型輸入尺寸、調整數據增強策略,甚至發(fā)現數據標注中的錯誤。手動統(tǒng)計這些信息既繁瑣又容易出錯,因此編寫一個自動化腳本是非常必要的。

三、腳本功能介紹

本文分享的Python腳本可以完成以下功能:

  • 加載COCO格式的JSON標注文件。
  • 輸出基礎統(tǒng)計信息:圖片總數、標注總數、類別映射字典。
  • 統(tǒng)計每個類別的標注數量,并按數量從高到低排序打印。
  • 統(tǒng)計圖片的分辨率分布。
  • 繪制類別分布的柱狀圖,并保存為PNG圖片。

腳本使用了Python標準庫中的json、collections.Counter,以及第三方庫matplotlib進行可視化。代碼簡潔易讀,非常適合初學者學習和使用。

四、環(huán)境準備

在運行腳本之前,請確保你的Python環(huán)境已安裝必要的庫。推薦使用Python 3.6+。

所需庫:

  • json(Python內置)
  • collections(Python內置)
  • matplotlib(用于繪圖)

安裝matplotlib:

pip install matplotlib

五、腳本代碼

以下是完整的腳本代碼。你可以將其保存為analyze_coco.py,并修改文件路徑后直接運行。

import json
from collections import Counter
import matplotlib.pyplot as plt
def analyze_coco_json(file_path):
    print(f"正在加載并分析文件: {file_path} ...\n")
    with open(file_path, 'r', encoding='utf-8') as f:
        coco_data = json.load(f)
    # 1. 基礎信息提取
    images = coco_data.get('images', [])
    annotations = coco_data.get('annotations', [])
    categories_info = coco_data.get('categories', [])
    num_images = len(images)
    num_annotations = len(annotations)
    categories = {cat['id']: cat['name'] for cat in categories_info}
    print("=== 1. 數據集基礎統(tǒng)計 ===")
    print(f"圖片總數: {num_images}")
    print(f"標注框總數: {num_annotations}")
    print(f"類別映射字典: {categories}\n")
    # 2. 統(tǒng)計各類別標注數量
    cat_counts = Counter([ann['category_id'] for ann in annotations])
    cat_distribution = {categories.get(k, f"Unknown ({k})"): v for k, v in cat_counts.items()}
    print("=== 2. 類別分布情況 ===")
    # 按數量從多到少排序
    sorted_cats = dict(sorted(cat_distribution.items(), key=lambda item: item[1], reverse=True))
    for cat, count in sorted_cats.items():
        print(f"  [{cat}]: {count} 個標注")
    # 3. 統(tǒng)計圖片分辨率
    resolutions = Counter([(img['width'], img['height']) for img in images])
    print("\n=== 3. 圖片分辨率分布 ===")
    for res, count in sorted(resolutions.items(), key=lambda x: x[1], reverse=True):
        print(f"  {res[0]}x{res[1]}: {count} 張圖片")
    # 4. 繪制類別分布柱狀圖并保存
    plt.figure(figsize=(8, 5))
    plt.bar(sorted_cats.keys(), sorted_cats.values(), color='#4C72B0')
    plt.title('Annotation Count per Category in COCO Dataset')
    plt.xlabel('Categories')
    plt.ylabel('Number of Annotations (BBoxes)')
    plt.xticks(rotation=45)
    # 在柱狀圖上顯示具體數值
    for i, (cat, count) in enumerate(sorted_cats.items()):
        plt.text(i, count + sum(sorted_cats.values())*0.01, str(count), ha='center')
    plt.tight_layout()
    plot_filename = 'category_distribution.png'
    plt.savefig(plot_filename, dpi=300)
    print(f"\n[成功] 類別分布可視化圖表已保存為: '{plot_filename}'")
if __name__ == "__main__":
    # 請確保將此處文件名替換為您實際的文件路徑
    analyze_coco_json('_annotations.coco.json')

六、運行腳本及結果解讀

1. 準備JSON文件

將你的COCO格式標注文件放在腳本同目錄下,或者指定絕對路徑。腳本默認讀取_annotations.coco.json,你需要根據實際情況修改analyze_coco_json()中的文件名。

2. 執(zhí)行腳本

在終端中運行:

python analyze_coco.py

3. 輸出示例

假設你的數據集包含3個類別:person、car、dog,腳本運行后控制臺會輸出類似下面的信息:

正在加載并分析文件: _annotations.coco.json ...

=== 1. 數據集基礎統(tǒng)計 ===
圖片總數: 1000
標注框總數: 8500
類別映射字典: {1: 'person', 2: 'car', 3: 'dog'}

=== 2. 類別分布情況 ===
  [person]: 5000 個標注
  [car]: 2500 個標注
  [dog]: 1000 個標注

=== 3. 圖片分辨率分布 ===
  1920x1080: 600 張圖片
  1280x720: 300 張圖片
  640x480: 100 張圖片

[成功] 類別分布可視化圖表已保存為: 'category_distribution.png'

4. 生成的圖表

腳本會在當前目錄下生成category_distribution.png

從圖表中可以直觀地看到各類別的標注數量,幫助判斷數據是否存在長尾分布。

七、自定義與擴展建議

修改類別名稱顯示:如果類別名稱包含中文,可能需要設置matplotlib支持中文字體,否則可能顯示為方框??梢栽诶L圖前加入以下代碼:

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus'] = False   # 用來正常顯示負號

統(tǒng)計標注框的尺寸分布:可以遍歷annotations中的bbox字段,提取寬高進行分析。

計算每張圖片的標注框數量分布:統(tǒng)計每張圖片上有多少個目標,了解圖片的密集程度。

輸出結果為表格:可以將統(tǒng)計結果保存為CSV文件,便于后續(xù)處理。

支持多文件批量分析:將腳本包裝成函數,循環(huán)處理多個JSON文件。

八、總結

通過這個簡單的Python腳本,我們可以快速掌握COCO數據集的標注概況,為后續(xù)的模型訓練和數據分析打下基礎。腳本結構清晰,易于修改和擴展,適合初學者上手實踐。如果你在處理其他格式的數據集(如VOC、YOLO),也可以借鑒類似的思路進行統(tǒng)計分析。

到此這篇關于Python腳本實現統(tǒng)計與可視化COCO數據集標注信息的文章就介紹到這了,更多相關Python分析COCO數據集內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python中os模塊的簡單使用及重命名操作

    Python中os模塊的簡單使用及重命名操作

    這篇文章主要給大家介紹了關于Python中os模塊的簡單使用及重命名操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 一文搞懂Python的hasattr()、getattr()、setattr()?函數用法

    一文搞懂Python的hasattr()、getattr()、setattr()?函數用法

    python中的getattr()、setattr()、hasattr()函數均是對類屬性或方法的操作,其中getattr()用于獲取類或實例中指定方法獲取屬性的值,setattr()用于設置類或實例中屬性或方法,hasattr()用于判斷類或實例中是否存在指定的屬性或方法,本文通過例子給大家詳解,一起看看吧
    2022-04-04
  • Python中bytes和str的區(qū)別與聯系詳解

    Python中bytes和str的區(qū)別與聯系詳解

    Python3最重要的新特性之一是對字符串和二進制數據流做了明確的區(qū),下面這篇文章主要給大家介紹了關于Python中bytes和str區(qū)別與聯系的相關資料,需要的朋友可以參考下
    2022-05-05
  • Python的Bottle框架中返回靜態(tài)文件和JSON對象的方法

    Python的Bottle框架中返回靜態(tài)文件和JSON對象的方法

    這篇文章主要介紹了Python的Bottle框架中返回靜態(tài)文件和JSON對象的方法,Bottle框架在Python開發(fā)者中具有很高的人氣,需要的朋友可以參考下
    2015-04-04
  • Python利用正則表達式從字符串提取數字

    Python利用正則表達式從字符串提取數字

    正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配,下面這篇文章主要給大家介紹了關于Python利用正則表達式從字符串提取數字的相關資料,需要的朋友可以參考下
    2022-02-02
  • Python高效定時任務處理APScheduler庫深入學習

    Python高效定時任務處理APScheduler庫深入學習

    這篇文章主要為大家介紹了Python高效定時任務處理APScheduler庫深入學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Pytorch轉onnx、torchscript方式

    Pytorch轉onnx、torchscript方式

    這篇文章主要介紹了Pytorch轉onnx、torchscript方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 使用python對excel表格處理的一些小功能

    使用python對excel表格處理的一些小功能

    這篇文章主要介紹了使用python對excel表格處理的一些小功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 利用Python實現自動生成小學生計算題

    利用Python實現自動生成小學生計算題

    過年期間發(fā)現小外甥已經上小學了,我姐說老師今天給他們布置了寒假作業(yè):每天堅持做乘法和加減法混合運算。這我必須幫幫忙,用Python寫了一段自動生成小學生計算題的代碼,希望外甥不要太感謝我
    2023-02-02
  • 關于Python的一些學習總結

    關于Python的一些學習總結

    這篇文章主要介紹了關于Python的一些總結,希望自己以后在學習Python的過程中可以邊學習邊總結,就自己之前的學習先做以總結,之后將不斷總結更新
    2018-05-05

最新評論

益阳市| 务川| 浙江省| 小金县| 广饶县| 鄂托克旗| 于都县| 清原| 长丰县| 重庆市| 武汉市| 镇雄县| 沭阳县| 星子县| 湘潭市| 浦北县| 饶阳县| 盘锦市| 镇江市| 秭归县| 来凤县| 保康县| 台前县| 上栗县| 鄂伦春自治旗| 鄢陵县| 峨眉山市| 丽江市| 新野县| 新沂市| 肇东市| 襄汾县| 潍坊市| 平陆县| 二连浩特市| 安阳县| 石楼县| 浪卡子县| 武平县| 承德县| 平陆县|