快速上手BaseDT

简介

BaseDT不仅是一个功能强大的数据处理库,也是一个易于使用和扩展的库。它可以让你专注于模型的构建和训练,而不用担心数据处理的问题。

安装

pip install basedtpip install BaseDT

库文件源代码可以从PyPi下载,选择tar.gz格式下载,可用常见解压软件查看源码。

数据的处理

BaseDT提供了一个data模块,它包含了多个子模块和类,分别针对不同类型和格式的数据提供了处理功能。

1. 图片数据处理

from BaseDT.data import ImageData
#图片路径,修改为对应路径
img = r"D:\PythonProject\OpenDataLab-Edu\dataset\cat2.jpg" 
data = ImageData(img, size=(256, 256), crop_size=(224,224), normalize=True)#
data.show()

下图分别是原图片,resize大小至(256, 256)的图片,crop大小至(224,224)的图片和归一化的图片。

../_images/pic_case.JPEG

2. 文本数据处理

from BaseDT.data import TextData
# 文本数据,字典类型
texts = {'city': 'Dubai', 'temperature': 33}
data = TextData(texts, vectorize = True)
print(data.value)

可看到text中'city': 'Dubai''Dubai'向量化后变为1,'temperature': 33的33仍保留为原本数值。

../_images/text_trans_case.PNG

3. 语音数据处理

敬请期待。

4. 通用数据处理

敬请期待。

5. 模型部署数据处理

from BaseDT.data import ImageData
img = r"D:\PythonProject\OpenDataLab-Edu\dataset\cat2.jpg" #修改为对应路径
data = ImageData(img, backbone = "MobileNet")
tensor_value = data.to_tensor()

该代码表示使用"MobileNet"网络模型训练时的数据处理,并将数据转化为网络模型可处理的张量。

通过使用BaseDT库,我们可以大大简化网络模型部署时所需地数据处理过程,并且保证与训练时相同或类似地pipeline一致性。

数据集处理

BaseDT提供了一个DataSet类,它可以让你对不同类型和格式的数据集进行处理。

1. 常用数据集下载

敬请期待。

2. 数据集格式检查

BaseDT提供了XEdu支持的数据集格式检查功能。

from BaseDT.dataset import DataSet
ds = DataSet(r"my_dataset", "cls")
ds.check()

格式正确提示:

../_images/form_right.png

格式有误提示:

../_images/formerror1.png

../_images/formerror2.png

3. 数据集格式转换

(1)针对网上下载的数据集,BaseDT可支持常见数据集格式(目前支持IMAGENET、VOC和COCO)的转换。

首先需将网上下载的原始数据集做初步整理,整理规范如下:

原数据集(分类) |---images |---class1 |----xxx.jpg/png/.... |---class2 |----xxx.jpg/png/.... |---class3 |----xxx.jpg/png/.... |---classN |----xxx.jpg/png/.... classes.txt

注意这里需要有images文件夹和classes.txt这两个部分,才可以进行格式转换。

如是图像分类数据集,首先需将所有图片按照类别存放,然后将所有图片文件夹放入images文件夹,同时新建一个classes.txt,写入类别信息。

整理完毕即可使用BaseDT数据集格式转换的代码完成数据集转换。需指定新数据集路径、原始数据集路径、原始数据集格式、划分比例(如不设置,则默认比例为训练集:测试集:验证集=7:1:2)。

```python
from BaseDT.dataset import DataSet
ds = DataSet(r"mycls") # 指定为生成数据集的路径
# 默认比例为train_ratio = 0.7, test_ratio = 0.1, val_ratio = 0.2
ds.make_dataset(r"mydataset", src_format="IMAGENET",train_ratio = 0.8, test_ratio = 0.1, val_ratio = 0.1)# 指定原始数据集的路径,数据集格式选择IMAGENET
原数据集(目标检测)
|---annotations
      |----xxx.json/xxx.xml
|---images
      |----xxx.jpg/png/....
classes.txt



如是目标检测数据集,需将所有图片存放至images文件夹,所有标注文件(VOC格式的为xml文件、COCO格式的为json格式)存放至annotations文件夹,同时在根目录下新建一个classes.txt,写入类别信息。如是图像分类数据集,首先需将所有图片按照类别存放,然后将所有图片文件夹放入images文件夹,同时新建一个classes.txt,写入类别信息。通过此过程,也有助于初步了解网上下载的数据集。

整理完毕即可使用BaseDT数据集格式转换的代码完成数据集转换。需指定新数据集路径、原始数据集路径、原始数据集格式、划分比例(如不设置,则默认比例为训练集:测试集:验证集=7:1:2)。

```python
from BaseDT.dataset import DataSet
ds = DataSet(r"my_dataset") # 指定为新数据集路径
ds.make_dataset(r"G:\\测试数据集\\fruit_voc", src_format="VOC",train_ratio = 0.8, test_ratio = 0.1, val_ratio = 0.1) # 指定待转格式的原始数据集路径,原始数据集格式,划分比例,默认比例为train_ratio = 0.7, test_ratio = 0.1, val_ratio = 0.2

../_images/voc2coco.png

转换成功后,不仅将网上下载的数据集转换为了XEdu支持的数据集格式,并对训练集、测试集、验证集进行了重新划分。

(2)针对OpenInnoLab平台标注创建的数据集,也可以使用BaseDT直接转换为XEdu支持的数据集。

注:需新建一个images文件夹用于存放图片 ,再将images上传平台进行在线标注。

from BaseDT.dataset import DataSet
ds = DataSet(r"my_dataset") # 指定目标数据集
ds.make_dataset(r"/data/HZQV42", src_format="INNOLAB",train_ratio = 0.8, test_ratio = 0.1, val_ratio = 0.1) # 仅需修改为待转格式的原始数据集路径(注意是整个数据集)

../_images/cocotransok.png

更多XEdu支持的数据集格式的介绍详见数据集支持部分。

用BaseDT完成数据集制作和格式检查体验项目https://www.openinnolab.org.cn/pjlab/project?id=6412c95f79f259135f259f45&sc=635638d69ed68060c638f979#public

4. 数据集拆分

一般训练前建议先完成数据集划分,即将数据集拆分为训练集和验证集,训练集用于训练模型,验证集用于评估模型的性能。针对CSV格式的数据集,可以使用BaseDT完成拆分。

from BaseDT.dataset import split_tab_dataset
# 指定待拆分的csv数据集
path = "feature_data/mmpose_pose_train_feature.csv"
# 指定特征数据列、标签列、训练集比重,‘normalize=True’表示进行归一化处理
tx,ty,val_x,val_y = split_tab_dataset(path,data_column=range(1,35),label_column=35,train_val_ratio=0.8,normalize=True)

../_images/csvdataset_split.png

数据的可视化

BaseDT提供了一个plot模块,它可以让你对不同任务的数据进行可视化。

1. 绘制分类任务混淆矩阵

敬请期待。

2. 绘制目标检测任务的检测框

from BaseDT.plot import imshow_det_bboxes
img = 'test.jpg'
# imshow_det_bboxes(图像, 框和得分,标签, 类别, 得分阈值)
imshow_det_bboxes(img, bboxes = [[3,25,170,263,0.9]],labels = [0], class_names = ["cat"], score_thr = 0.8)

../_images/draw_square.png

3. 绘制分割任务的掩膜

敬请期待。

4. 日志分析

BaseDT中的plot模块提供plot_log函数,支持对训练日志中的损失函数进行绘制。

from BaseDT.plot import plot_log
plot_log(log_path)

../_images/log_pic.png

轻松调用I/O设备

BaseDT提供了一个io模块,用于支持数据的I/O设备的调用,它可以让你方便地从不同的来源获取和输出数据。型和格式的数据。

调用麦克风

from BaseDT.io import MicroPhone
# 创建麦克风对象
microphone = MicroPhone()
# 录音两秒
audio_data = microphone.record_audio(time = 2)

录制的两秒音频图下如下图:

../_images/vedio.png

附录

敬请期待。