MMDetection2(二) 自定義資料集

2021-10-10 17:07:02 字數 4022 閱讀 3610

目錄

一、支援新的資料格式

1、將新的資料格式構造為已存在的格式

2、將新的資料格式構造為中間格式

3、乙個自定義資料集的例子

三、更改資料集的類 總結

最簡單的方式是將你的資料集轉化為已存在的資料集格式(例如coco或者pascal voc)

coco格式資料集的json標註檔案含有以下幾個必要的關鍵字:

'images': [

,...

],'annotations': [

,...

],'categories': [

,]

在json檔案中有三個必要的key值:

images:包含有資訊的list,例如file_name,height,width以及id。

annotations:包含有例項標註資訊的list。

categories:包含有的categories名和對應id的list。

在進行了資料預處理之後,使用者需要更改配置檔案從而來使用資料集。接下來的例子是使用乙個有5個類別的自定義資料集,假設它也是coco格式。

in configs/my_custom_config.py:

...

# 資料集的設定

dataset_type = 'cocodataset'

classes = ('a', 'b', 'c', 'd', 'e')

...data = dict(

samples_per_gpu=2,

workers_per_gpu=2,

train=dict(

type=dataset_type, # 資料集的型別

classes=classes,

ann_file='path/to/your/train/data', # 訓練集標註檔案的路徑

...),

val=dict(

type=dataset_type, # 資料集的型別

classes=classes,

ann_file='path/to/your/val/data', # 驗證集標註檔案的路徑

...),

test=dict(

type=dataset_type, # 資料集的型別

classes=classes,

ann_file='path/to/your/test/data', # 測試集標註檔案的路徑

...))

...

這個地方我沒怎麼用過,就跳過了~~~,有興趣的話可以去看原文件orz

假定資料集的標籤是一種新的文字檔案格式。bounding boxes標籤資訊通過以下形式儲存在annotation.txt檔案中:

30 40 50 60 3

我們建立乙個新的資料集檔案mmdet/datasets/my_dataset.py來匯入資料。

import mmcv

import numpy as np

from .builder import datasets

from .custom import customdataset

@datasets.register_module()

class mydataset(customdataset):

classes = ('person', 'bicycle', 'car', 'motorcycle')

def load_annotations(self, ann_file):

ann_list = mmcv.list_from_file(ann_file)

data_infos =

for i, ann_line in enumerate(ann_list):

if ann_line != '#':

continue

img_shape = ann_list[i + 2].split(' ')

width = int(img_shape[0])

height = int(img_shape[1])

bbox_number = int(ann_list[i + 3])

anns = ann_line.split(' ')

bboxes =

labels =

for anns in ann_list[i + 4:i + 4 + bbox_number]:

dict(

filename=ann_list[i + 1],

width=width,

height=height,

ann=dict(

bboxes=np.array(bboxes).astype(np.float32),

labels=np.array(labels).astype(np.int64))

))return data_infos

def get_ann_info(self, idx):

return self.data_infos[idx]['ann']

然後在配置檔案中去使用mydataset,你可以按照下面的這種樣式更改配置檔案:

dataset_a_train = dict(

type='mydataset',

ann_file = 'image_list.txt',

pipeline=train_pipeline

)

這一部分因為我自己也沒太用過,所以就跳過orz~~~,有興趣的可以去看原文件。

使用現有的資料集型別,我們可以更改它們的類名來訓練標註資料的子集。舉乙個栗子,如果你僅僅是只想訓練當前資料集的三個類,那麼你只需要更改配置檔案中資料集的類別引數就好了。

資料集匯入的時候會自動過濾掉其他幾個類別的標註。

# 如果你只需要對person、bicycle、car進行檢測

classes = ('person', 'bicycle', 'car')

# 在配置檔案中更改classes引數的值

data = dict(

train=dict(classes=classes),

val=dict(classes=classes),

test=dict(classes=classes))

mmdetection v2.0開始支援從乙個檔案中讀取classes,假定classes.txt檔案中包含有以下幾個類名:

person

bicycle

car

使用者可以設定classes的值設為檔案的路徑,資料集將會自動的匯入並轉化它為乙個列表。

classes = 'path/to/classes.txt'

data = dict(

train=dict(classes=classes),

val=dict(classes=classes),

test=dict(classes=classes))

自定義控制項(2)

自定義伺服器控制項屬性的特性 bindable 這個特性表示屬性是否可以繫結乙個有效資料來源。通常使用布林值進行設定。例如 bindable true 如果使用值true標記屬性,表示該屬性可以繫結乙個有效資料來源,且應引發該屬性的屬性更改通知。browsable 指定屬性是否應該在屬性瀏覽器中顯示...

自定義標籤 二

1 使用自定義標籤控制頁面內容 標籤體 是否輸出 public void dotag throws jspexception,ioexception 2 簡單標籤控制標籤後的jsp內容是否執行 public void dotag throws jspexception,ioexception 3 自...

自定義view 二

自定義view的最重要的乙個部分是自定義它的外觀。根據你的程式的需求,通過ondraw方法實現繪製。在ondraw中,會傳遞給你乙個canvas。canvas封裝了繪製圖形的方法。還需要自定義乙個 paint去定義顏色樣式的填充 簡單來說 canvas定義你在螢幕上畫的圖形,而paint定義顏色,樣...