目錄
一、支援新的資料格式
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定義顏色,樣...