COCO 數據集格式及mmdetection中的轉換方法

COCO 數據集格式及mmdetection中的轉換方法

COCO格式

CV中的目標檢測任務不同于分類,其標簽的形式稍為復雜,有幾種常用檢測數據集格式,本文將簡要介紹最為常見的COCO數據集的格式。

完整的官方樣例可自行查閱,以下是幾項關鍵的字段:

{"images": [image],"annotations": [annotation],"categories": [category]
}image = {"id": int,"width": int,"height": int,"file_name": str,
}annotation = {"id": int,"image_id": int,"category_id": int,"segmentation": RLE or [polygon],"area": float,"bbox": [x,y,width,height],"iscrowd": 0 or 1,
}categories = [{"id": int,"name": str,"supercategory": str,
}]

以下是一組實例:

dict{'images': list[dict{'id': 0,'file_name': 34020010494_e5cb88e1c4_k.jpg,'height': 1536,'width': 2048}, ...'annotations': list[dict{'image_id': 0,'id': 1,'category_id': 0,'bbox': [135, 115, 676, 850],'area': 574600,'segmentation': [[586.5, ...], []],'is_crowd': 0}, ...'catgories': list[dict{'id': 0,'name': 'balloon'},...]]]
}
首先最外層(json文件讀進來)是一個字典,該字典有三個鍵:'images', 'annotations', 'categories';?		其中'images'是一個列表,長度就是數據集圖像數;?				列表中每個元素又是一個字典,有四個鍵:'id', 'file_name', 'height', 'width',和他們的值?		其中'annotations'也是一個列表,長度就是數據集所有標注(instances)數;?				列表中每個元素又是一個字典,有七個鍵:'image_id', 'id', 'category_id', 'bbox', 'area', 'segmentation', 'is_crowd'?		其中'categories'是一個列表,長度為數據集所含有的類別數;?				列表中每個元素又是一個字典,有兩個鍵:'id', 'name'

mmdetection中的轉換方法

官方例程

mmdetection中提供了幾種訓練自己的數據集的方法,其中之一就是將自己的數據集轉換為COCO格式,進行訓練。

官方給出了balloon數據集的轉換樣例,初次嘗試可以按照此例程學習,這里同時提供balloon數據集下載鏈接。

其他例程

除此之外,筆者想在這里介紹一下另一個非官方的數據集,轉換為COCO格式的例程,供讀者參考。

首先介紹一下這個pig數據集。

與balloon數據集類似,pig數據集只有pig一個類,共700個樣本,原始給出的數據集格式如下:

  1. 文件路徑

    imagesxxx.jpg...
    labelsxxx.json...
    

    本數據集有兩個文件夾,分別存放images和labels,對應文件名相同,擴展名分別為jpg和json。

  2. 標注格式

    json文件中給出的標注格式如下:

    dict{'shape': list[dict{'label': 'pig','boxes': [x1, x2, y1, y2],'points': [[x1, y1], [x2, y2], ..., [xn, yn]]}'imagePath': 'xxx.jpg']
    }
    
    json文件最外層是一個字典,該字典有兩個鍵:'shape','imagePath';?	其中'shape'內是一個列表,列表的長度是該張圖片內pig的個數;?		列表內每個元素又是一個字典,有三個鍵:'label','boxes','points';?	其中'imagePath'內則是本標注文件所對應的圖片名。
    

    原本數據集內700個樣本有500個box標注,其他200個是mask標注,經過我的初步處理,已經將沒有box標注的樣本根據mask標注生成了box標注。其中box標注是給出了左上右下兩個對角坐標,而mask標注,也是給出了全部點的坐標。注意此處與COCO數據集給出標注的格式不同,需要做一定的轉換。

轉換為COCO數據集格式的函數如下:

import os
import os.path as osp
import mmcvdef convert_pig_to_coco(img_dir, label_dir, out_file):samples_list = [sample.split('.')[0] for sample in os.listdir(label_dir)]obj_count = 0images = []annotations = []for image_id, sample in enumerate(mmcv.track_iter_progress(samples_list)):prev_dict = mmcv.load(osp.join(label_dir, sample+'.json'))height, width = mmcv.imread(osp.join(img_dir, sample+'.jpg')).shape[: 2]images.append(dict(id = image_id,file_name = sample+'.jpg',height = height,width = width))for pig in prev_dict['shape']:# print(pig['boxes'])x_min, y_min, x_max, y_max = pig['boxes']mask = pig['points']if mask != None:px = [item[0] for item in mask]py = [item[1] for item in mask]poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]poly = [p for x in poly for p in x]else:poly = Nonedata_anno = dict(image_id=image_id,id=obj_count,category_id=0,bbox=[x_min, y_min, x_max - x_min, y_max - y_min],area=(x_max - x_min) * (y_max - y_min),segmentation=[poly],iscrowd=0)annotations.append(data_anno)obj_count += 1coco_format_json = dict(images=images,annotations=annotations,categories=[{'id':0, 'name': 'pig'}])mmcv.dump(coco_format_json, out_file)

提供這個額外的例程是為了說明不必拘泥于官方給出的轉換例程框架,要抓住數據集的本質,按照合理的方式將原格式內的數據讀取出來并以COCO數據集的格式存放到一整個json文件中即可。只要完成這項任務,就是成功完成了自己的數據集到COCO格式的數據集的轉換。
另外,如果有與本數據集原格式高度相似的檢測數據集要轉換為COCO格式,也可直接參考本例程的內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php獲取h1,jQuery獲取h1-h6標題元素值方法實例

本文主要介紹了jQuery實現獲取h1-h6標題元素值的方法,涉及$(":header")選擇器操作h1-h6元素及事件響應相關技巧,需要的朋友可以參考下,希望能幫助到大家。1、問題背景:查找到h1-h6,并遍歷它們,打印出內容2、實現代碼&am…

在導入NVIDIA的apex庫時報錯 ImportError cannot import name ‘UnencryptedCookieSessionFactoryConfig‘ from

在導入NVIDIA的apex庫時報錯 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ from ‘pyramid.session’ (unknown location) 報錯 在使用NVIDIA的apex庫時報錯 ImportError: cannot import name ‘UnencryptedCookieSessionFactoryConfig’ fro…

php怎么取request,PHP-如何在Guzzle中獲取Request對象?

我需要使用Guzzle檢查數據庫中的很多項目.例如,項目數量為2000-5000.將其全部加載到單個數組中太多了,因此我想將其分成多個塊:SELECT * FROM items LIMIT100.當最后一個項目發送到Guzzle時,則請求下一個100個項目.在“已滿”處理程序中,我應該知道哪個項目得到了響…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 論文簡析及關鍵代碼簡析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 論文簡析及關鍵代碼簡析 論文:https://arxiv.org/abs/2104.00323 代碼:https://github.com/dvlab-research/JigsawClustering 總結 本文提出了一種單批次&#xff0…

java jps都卡死,java長時間運行后,jps失效

在部署完應用后,原本jps使用的好好的,能正確的查詢到自己正在運行的java程序。但,過了一段時間后,再使用jps來查看運行的應用時,自己運行的程序都看不到,但是自己也沒有關閉這些程序啊!然而使用…

指針(*)、取地址()、解引用(*)與引用()

指針(*)、取地址(&)、解引用(*)與引用(&) C 提供了兩種指針運算符,一種是取地址運算符 &,一種是間接尋址運算符 *。 指針是一個包含了另一個變量地址的變量,您可以把一個包含了另一個變量地址的變量說成是"指向"另一…

matlab電類,985電氣研二,有發過考研經驗貼 電氣電力類的有

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓clc;clear;p[2.259;2.257;2.256;2.254;2.252;2.248;2.247;2.245;2.244;2.243;2.239;2.238;2.236;2.235;2.234;2.231;2.229;2.228;2.226;2.225;2.221;2.220;2.219;2.217;2.216;2.211;2.209;2.208;2.207;2.206;2.202;2.201;2.199;2.1…

matlab legend 分塊,matlab?legend?分塊!

matlab legend 分塊!(2013-03-26 18:07:38)%%%壓差clc;clear all;figure(55);set (gcf,Position,[116 123 275 210],color,w);P[25 26 27 28 29 30 31 32 33 34 35];%理論q0.00006*pi*28*P*10^(6)*0.03^3/(12*0.028448*5);q1110.00006*pi*28*P*10^(6)*0.03^3/(12*0.…

利用opencv-python繪制多邊形框或(半透明)區域填充(可用于分割任務mask可視化)

利用opencv-python繪制多邊形框或(半透明)區域填充(可用于分割任務mask可視化) 本文主要就少opencv中兩個函數polylines和fillPoly分別用于繪制多邊形框或區域填充,并會會以常見用途分割任務mask(還是筆者…

matlab與maple互聯,Matlab,Maple和Mathematica三款主流科學計算軟件的互操作

本文根據網上零散的信息以及這三款軟件自帶的說明文檔整理而成,為備忘而記錄。記錄了Matlab和Maple之間的相互調用,以及Matlab和Mathematica之間相互調用的安裝配置方法。為何需要互操作? 數值計算和圖形方面Matlab毫無疑問是最強的&a…

PyTorch中的topk方法以及分類Top-K準確率的實現

PyTorch中的topk方法以及分類Top-K準確率的實現 Top-K 準確率 在分類任務中的類別數很多時(如ImageNet中1000類),通常任務是比較困難的,有時模型雖然不能準確地將ground truth作為最高概率預測出來,但通過學習&#…

java高級語言特性,Java高級語言特性之注解

注解的定義Java 注解(Annotation)又稱 Java 標注,是 JDK1.5 引入的一種注釋機制。注解是元數據的一種形式,提供有關于程序但不屬于程序本身的數據。注解對它們注解的代碼的操作沒有直接影響。注解本身沒有任何意義,單獨的注解就是一種注釋&am…

C/C++中的typedef 和 #define

C/C中的typedef 和 #define typedef C/C中的關鍵字typedef允許用戶為類型名來起一個新名字,通常會是縮寫或者能夠清晰表明類型含義的新名字。 例: typedef unsigned int UINT; UINT 100;值得注意的是,typedef除了為C/C內置的數據類型取別…

php3.2.3 升級,thinkphp3.2.3 升級到3.2.4時出錯問題

有些項目最初用OneThink做的,而OneThink 默認使用的TP 是3.2.0 的,沒事的時候就想給升級一下,但是直接復制進去的時候,有錯誤,導致OneThink 不能運行,排查后,需要修改兩個地方1、修改 Applicati…

Positional Encodings in ViTs 近期各視覺Transformer中的位置編碼方法總結及代碼解析 1

Positional Encodings in ViTs 近期各視覺Transformer中的位置編碼方法總結及代碼解析 最近CV領域的Vision Transformer將在NLP領域的Transormer結果借鑒過來,屠殺了各大CV榜單。對其做各種改進的頂會論文也是層出不窮,本文將聚焦于各種最新的視覺trans…

mysql 分析查詢語句,MySQL教程之SQL語句分析查詢優化

怎么獲取有功能問題的SQL1、經過用戶反應獲取存在功能問題的SQL2、經過慢查詢日志獲取功能問題的SQL3、實時獲取存在功能問題的SQL運用慢查詢日志獲取有功能問題的SQL首要介紹下慢查詢相關的參數1、slow_query_log 發動定制記載慢查詢日志設置的辦法,能夠經過MySQL指…

關于PyTorch中的register_forward_hook()函數未能執行其中hook函數的問題

關于PyTorch中的register_forward_hook()函數未能執行其中hook函數的問題 Hook 是 PyTorch 中一個十分有用的特性。利用它,我們可以不必改變網絡輸入輸出的結構,方便地獲取、改變網絡中間層變量的值和梯度。這個功能被廣泛用于可視化神經網絡中間層的 f…

geoda權重矩陣導入matlab,空間計量經濟學-分析解析.ppt

廈門大學 鄧明 空間截面回歸模型 地理加權回歸模型 地理加權回歸模型擴展了普通線性回歸模型。在GWR模型中,特定區位的回歸系數不再是利用全部信息獲得的假定常數,而是利用鄰近觀測值的子樣本數據信息進行局域(Local)回歸估計而得,并隨著空間…

樹莓派攝像頭基礎配置及測試

樹莓派攝像頭基礎配置 step 1 硬件連接 硬件連接,注意不要接反了,排線藍色一段朝向網口的方向。(筆者的設備是樹莓派4B) step 2 安裝raspi-config 安裝 raspi-config raspi-config在raspbian中是預裝的,而在kali、…

matlab sobel銳化,sobel銳化 - yirui wu.ppt

sobel銳化 - yirui wu第六章 圖像銳化 圖像銳化的概念 圖像銳化的目的是加強圖像中景物的細節邊緣和輪廓。 銳化的作用是使灰度反差增強。 因為邊緣和輪廓都位于灰度突變的地方。所以銳化算法的實現是基于微分作用。 圖像銳化方法 圖像的景物細節特征; 一階微分銳化…