疯狂工作室:图像、文本、音频和视频的数据集编辑器
使用Crazy Studio创建和编辑图像、文本、音频和视频数据集——一个强大的编辑器,简化了处理各种媒体格式的工作。
QRazy 的主要發現
- Crazy Studio允许快速创建项目并标记用于训练AI模型的数据。
- 编辑器支持对图像、文本、音频和视频的标记,并能够为对象添加多个类。
- 每个数据集可以导出为不同的格式,包括COCO JSON和YOLO,从而简化与框架的集成。
我从事人工智能领域的开发,常常面临一些任务,仅仅拿一个现成的模型并在我自己的数据上运行是不够的。模型在标准测试中表现良好,但在条件稍微不同于其训练时的情况下可能会出错。
在这种情况下,模型需要进行再训练。而再训练需要自己的数据:图像、文本、音频记录或按特定任务标注的视频。
最近,我需要对能够在天空中找到物体并识别其类型的模型进行实验。例如,区分飞机、直升机、无人机、鸟类或其他小物体。进行测试时,我需要自己从特定相机收集的标注数据集,并按照我的规则进行标注。
我查看了现有的解决方案,但许多对于小型实验而言都显得过于复杂。有的地方需要长时间调整项目,有的界面面向大团队,而有的功能我根本用不上。
因此,我制作了 Crazy Studio —— 我自己的浏览器数据集编辑器。在这里,可以快速创建项目,上传材料,添加类别,并在无需长时间准备的情况下进行标注。
为什么需要自己的数据集
现成的模型通常是在大型通用数据集上训练的。这是一个有用的起点,但实际任务几乎总是具有其特定的特点。
假设模型能在照片中找到飞机。在互联网上的普通图片中,它的表现很好:飞机较大,背景干净,角度清晰。但监控摄像头提供的图像可能完全不同。物体占据几十个像素,天空被云层遮挡,图像有噪声,飞机的形状几乎无法辨认。
对于模型来说,这就是另一组数据。如果它在训练期间未见过类似的例子,结果可能会很差。
因此,对于特定的任务,我会努力收集正是在系统将要工作的条件下的数据:
- 来自不同的相机和镜头;
- 在晴天和多云天气;
- 白天、傍晚和黄昏;
- 包含大且非常小的物体;
- 有模糊、数字噪声和强放大的情形;
- 从不同的角度和与物体的距离。
收集图像后,还需要进行标注。需要告诉模型物体具体在什么地方,以及它属于哪个类别。正因如此,我需要一个专门的工具。
Crazy Studio的构成
Crazy Studio 在浏览器中运行。首先需要创建项目并选择要处理的数据类型:
- 图像;
- 文本;
- 音频记录;
- 视频。
类型在创建项目时设定。这是特意为之:图像标注工具与文本或音频的工具有很大不同,因此将它们混合在一个工作区没有意义。
项目内可以创建多个数据集。例如,可以单独存储用于训练、验证和最终测试模型的数据:
TrainingValidationTest另一种选择是根据来源或拍摄条件对材料进行分类:
Camera 1Camera 2DayNightCloudy这样的划分有助于了解哪些数据已经收集,以及模型在哪些材料上表现不佳。
对图像中的物体进行标注
在Crazy Studio中,图像可用的标注工具包括矩形区域和多边形。
矩形框
矩形适用于大多数物体检测任务。用户在图像上选择所需区域并为其分配类别。
在我的情况下,类别的集合可能如下所示:
airplanehelicopterdronebirdunknown如果在同一帧中有一架飞机和几只鸟,每个物体会被单独标注。结果是模型不仅获得类别名称,还获得物体在图像上的坐标。
这种格式不仅适用于天空。矩形区域适合于对人类、汽车、动物、交通标志、商品、零部件和其他物体的标注。
多边形
有时矩形框会捕捉到过多的背景。这时,可以用多边形将物体包围,通过顺序放置点来标记其边界。
多边形非常适合于对形状复杂的物体进行标注:
- 道路和人行道;
- 建筑物;
- 田野和水体;
- 裂缝和其他损坏;
- 设备部件;
- 医学影像上的区域。
对于我在天空中的测试,当需要标出物体的准确轮廓,而不仅仅是其大致位置时,多边形可能会派上用场。
一个物体的多个类别
一个物体并不总是用一个标签来描述。例如,无人机不仅可以用类名drone来标记,还可以附加特征:
dronesmallfarblurred在Crazy Studio中,一个区域可以指定多个类别。这比为每个特征组合创建单独的类别更为方便。
物体不仅得类名small_blurred_drone,而是得到三个独立的标签:
dronesmallblurred将来,这样的数据更容易过滤和转换为所需的训练格式。
文本标注
Crazy Studio不仅可以用于计算机视觉。在文本项目中,用户可以标记单词、句子或任意片段。
例如,文本中可以标注:
- 人名;
- 公司名;
- 国家和城市;
- 日期;
- 地址;
- 商品;
- 事件;
- 设备模型。
在句子中:
CrazyLayer公司开发了一款新数据集编辑器。
可以标记单词CrazyLayer,并将其类名设为company。
这样的数据集适用于训练能够提取新闻、文件、合同、用户消息和其他文本资料中的实体的模型。
文本项目同样可以用于内容分类。例如,对消息进行分类:
spamadvertisinginsultthreatnormal基于这样的样本,可以再训练模型用于评论审核或自动分类请求。
音频记录标注
在音频项目中,标注是在时间轴上创建的。用户指出所需片段的开始和结束,然后为其分配类别。
例如,在对话录音中可以标记:
operatorclientsilencebackground_noise对于声音识别项目,类别集合将不同:
enginealarmmusicdogshot创建的时间段可以移动和更改长度。当事件的边界在第一次收听后能够更加精确地确定时,这一点非常有用。
对于天空中的物体任务,可以收集飞机、直升机和无人机的发动机声音录音,然后标记真实可听到的声音区域。
视频标注
视频按类似的原则进行标注,使用时间间隔。用户指定事件的开始时刻和结束时刻。
可以标记:
- 物体出现在镜头中;
- 开始移动;
- 人下落;
- 汽车停止;
- 场景切换;
- 特定动作;
- 违反安全规则。
在我的情况下,时间段可以表示飞机或无人机在镜头中可见的时间。
这并不取代逐帧标注,尤其是当模型确实需要时。但对于时间事件检测任务,时间间隔可以更快地准备数据。
数据集可以导出为哪些格式

进行标注只是工作的一半。接下来需要将其传递到训练脚本、计算机视觉库或自己的处理程序。因此,在Crazy Studio中,我添加了几种适用于不同类型项目的导出选项。
导出时,可以选择当前数据集或整个项目。此外,还可以将原始图像、文本、音频和视频打包到ZIP中。如果文件已经单独存放且只需要标注,可以关闭此选项。
Universal JSON
通用JSON适用于图像、文本、音频和视频。它保存整个项目的结构:类别、数据集、材料、标注对象、几何形状和分配的标签。
这个格式方便用作备份,数据转移到自有服务或编写自己的转换器。如果我需要最大的信息量而不依赖于特定框架,我通常选择Universal JSON。
JSON Lines
在JSON Lines格式中,每个材料以单独的行记录在文件dataset.jsonl中。行中包含项目数据、数据集名称、文件信息和所有注释。
这种方式易于按顺序读取,而无需将整个导出加载到内存中。它适用于大型数据集、服务器处理和自定义Python脚本。
YOLO
YOLO只适用于图像项目。对于矩形标注,保存类别编号、框的中心、宽度和高度。所有坐标被归一化并记录在0到1的范围内。
多边形也受支持:在类别编号之后,行中记录所有点的坐标。因此,同一个导出器可以同时用于物体检测和分割。
导出的文件夹中包括dataset.yaml、classes.txt、labels目录,以及在相应选项启用时的images目录。每当我想快速从标注转到训练YOLO系列模型时,我便使用这个格式。
Crazy Studio不会自动将一个导出拆分成train、validation和test。因此,我创建单独的数据集Training、Validation和Test并分开导出。
COCO JSON
COCO JSON同样适用于图像。文件annotations.json中保存了图像列表、类别和注释。矩形被记录为边界框,而多边形则作为一组点的分割。
当训练代码或现有库已经期待COCO结构时,这个格式很方便。它也适合于在不同计算机视觉工具之间交换数据集。
Pascal VOC
导出为Pascal VOC时,每张图像都会创建一个单独的XML文件,包含图像的尺寸、类别名称和矩形区域的坐标。
Pascal VOC适用于老旧项目和处理XML标注的工具。需要注意的是,在此格式导出时,多边形会转换为表示其外部边界的普通矩形框。物体的精确形状不会在此格式中保留。
spaCy JSON
对于文本项目,支持导出为spaCy JSON。保存原始文本和标记实体的列表:起始位置、结束位置和类别名称。
例如,可以将标记的公司名称作为company实体导出,将人名作为person。这样的文件可以用于准备命名实体识别和其他文本处理任务的数据。
Audacity Labels
对于音频和视频,可以选择Audacity Labels。Crazy Studio创建一个文本文件,其中每行包含开始时间、结束时间和时间段类别的名称。
该文件可以与录音一起在Audacity中打开,或者用自定义脚本处理。这个格式适合于标注语音、噪声、音乐、设备声音和视频中的事件。
多个类别的处理
在Crazy Studio中,单个对象可以被赋予多个类别。通用格式将它们与对象一起保存。如果选择了仅适用于单个类别的格式,则编辑器会为每个标签创建单独的记录。
例如,带有类别drone、small和blurred的对象会在YOLO中呈现为三行相同坐标但类别编号不同的记录。在训练前需要注意这一点:额外特征并不总是需要与主要物体类混合。
可以用编辑器完成哪些任务
我最初制作Crazy Studio是为了自己的实验,但这种标注原则适用于不同的方向。
物体检测
可以收集汽车、人、动物、商品、文件、天空中的物体或设备零件的数据集。
缺陷检测
在图像中可以标记裂缝、缺口、划痕、腐蚀、污垢和其他损伤。随后,这些数据用于训练模型,以自动查找类似的缺陷。
文件处理
在文本中可以标记日期、金额、合同号码、组织、姓名和地址。这些数据集对于处理账单、合同、问卷和请求会很有用。
声音识别
音频记录可以根据声音、噪声类型、信号、交通工具或设备声音进行标注。
视频事件分析
在视频中可以标记物体出现的时刻、动作开始或需要的片段。这适合于视频监控、运动分析和长时间录制的分析。
我如何通常开始新数据集
我努力避免将成千上万的文件立即加载到项目中。开始时,我会先处理一小部分示例,并完整走一遍整个过程。
- 创建所需类型的项目。
- 添加测试数据集。
- 上传几十份材料。
- 创建主要类别。
- 标注前几个示例。
- 检查所选类别是否足够。
- 如有必要,修改标注规则。
- 只有在这之后,才会上传主样本。
在前二十或三十个示例中,通常可以明白我未考虑到的情况。
比如,在天空物体项目中,很快就会产生一个问题:该如何处理一个小点,不会被明确识别?可以将其视作无人机,使用unknown类,还是根本不将该帧添加到训练样本中?
在大规模标注之前,最好先确定类似规则。否则,相同情况可能会被标注不同,而数据会出现额外的噪声。
为什么标注质量比文件数量更重要
大型数据集本身并不保证良好的结果。如果其中类别混淆、物体遗漏或边界设置不准确,模型将会在这些错误上进行学习。
假设在一张图像上,类似的微小点被标注为drone,在另一张被标注为bird,而第三张甚至没有标注。对人来说,原因可能是显而易见的:物体难以辨认。模型仅看到矛盾的答案。
因此,我倾向于首先制作一个小而精确的数据集。如果它产生了所需的结果,之后可以逐步增加规模。
为什么我没有让Crazy Studio变得复杂
在大型标注系统中,有用户角色、复杂的工作流程、质量控制、任务分配和数十个额外的工具。对于大团队,所有这些可能是必要的。
但我的任务则不同。我需要一个简单的编辑器,能够快速验证我的想法:
- 创建项目。
- 上传材料。
- 添加类别。
- 标注数据。
- 导出结果。
我并不试图替代所有现有的平台。我设计了一个工具,以应对需要快速准备自己数据集并进行测试或再训练模型的情况。
我计划进一步添加的内容
Crazy Studio仍然是一个正在开发的项目,我会根据新任务继续进行改进。
未来编辑器可能会引入新的导入格式、额外的导出器、标注检查工具、类别统计、自动预标注功能以及与大样本的更便捷处理。
但是我想保持的主要原则是:在加载文件和创建首次标注之间,应该尽可能少的多余操作。
如何尝试Crazy Studio
编辑器可通过以下地址访问 studio.crazylayer.com 。
登录后,可以创建用于图像、文本、音频或视频的项目,添加自己的类别并上传测试材料。
开始时最好从自己任务中的一个小的真实示例着手。这样可以更快地理解所选标注方式是否合适,以及哪些类别确实是必要的。
总之,使用Crazy Studio数据集编辑器——它完全免费!我会定期更新、改进并添加新功能。
