使用VoTT进行视频数据集标注

视频数据集标注方法:使用VoTT进行视频数据集标注

By 自牧君 2021/12/04

一、 VoTT

1.1 简介

软件下载地址:www.github.com/Microsoft/VoTT/releases

VoTT是微软发布的用于图像目标检测的标注工具,它是基于JavaScript开发的,因此可以跨Windows和Linux平台运行,并且支持从图片和视频读取。此外,其还提供了基于CNTK训练的Faster-RCNN模型进行自动标注然后人工矫正的方式,这样大大减轻了标注所需的工作量。其分为V1和V2两个版本, 目前V1仅用于BUG修复,不再添加新功能支持, 因此建议直接用V2.

使用VoTT进行视频数据集标注_第1张图片

1.2 安装

安装好后,软件主界面如下:

使用VoTT进行视频数据集标注_第2张图片

1.3 准备工作

( 1 \mathbf{1} 1) 建立源文件夹 “source”:用来存放需要标注的视频。

使用VoTT进行视频数据集标注_第3张图片

( 2 \mathbf{2} 2) 建立目标文件夹 “target”:存放转化过程中的结果。

使用VoTT进行视频数据集标注_第4张图片

( 3 \mathbf{3} 3) 建立目标文件夹 “results”:存放最终标注的结果。

使用VoTT进行视频数据集标注_第5张图片

1.4 创建工程

( 1 \mathbf{1} 1) 点击 New Project 新建工程:

使用VoTT进行视频数据集标注_第6张图片

( 2 \mathbf{2} 2) 填写工程信息。第一项填写工程名称,第二项一般不需改动。

使用VoTT进行视频数据集标注_第7张图片

( 3 \mathbf{3} 3) 指定源文件夹source。 首先点击 “Add Connection”.

使用VoTT进行视频数据集标注_第8张图片

① 在 “Provider” 项下拉菜单选择 “Local File System”.

② 在 “Folder Path” 选项下,选择刚刚创建的源文件夹 “source”.

③ 选择完成后,点击 “Save Connection” 即可完成源文件夹指定。

使用VoTT进行视频数据集标注_第9张图片

( 4 \mathbf{4} 4) 指定目标文件夹target。步骤同上。

使用VoTT进行视频数据集标注_第10张图片

( 5 \mathbf{5} 5) Description 对工程的描述,为可选项。

Video Settings* 下的 “Frame Extraction Rate” 为视频帧率,默认是15帧,根据实际需求去改动。

使用VoTT进行视频数据集标注_第11张图片

( 6 \mathbf{6} 6) 最后是类别数,可以稍后再添加。这里我稍后再添加。最后点击 “Save Project” 新建工程。

使用VoTT进行视频数据集标注_第12张图片

1.5 标注

( 1 \mathbf{1} 1) 进入工程后的界面如下:

使用VoTT进行视频数据集标注_第13张图片

( 2 \mathbf{2} 2) 选取矩形标注框。

使用VoTT进行视频数据集标注_第14张图片

( 3 \mathbf{3} 3) 接下来进行逐帧标注。

① 用矩形标注框框选目标;

② 点击右上角的 “加号” 添加标签;

③ 输入标签名称 “coscinodiscus” (圆筛藻);

④ 回车键确定。

使用VoTT进行视频数据集标注_第15张图片

① 标注框选中目标后,点击右边的绿色标签;

② 矩形标注框变成和右边标签相同颜色(绿色) 时即标注成功。

使用VoTT进行视频数据集标注_第16张图片

( 4 \mathbf{4} 4​) 点击下图所示的按钮,或着按键盘上的右箭头方向键,切换下一帧继续标注:

使用VoTT进行视频数据集标注_第17张图片

① 连续标注5~8帧,即可以开始自动标注。

1.6 自动标注

( 1 \mathbf{1} 1) 左边菜单栏,点击学士帽图标,进行自动标注的设置。

使用VoTT进行视频数据集标注_第18张图片

( 2 \mathbf{2} 2) 自动标注设置的菜单页面如下:

使用VoTT进行视频数据集标注_第19张图片

① 学习模型。一般保持默认即可。

② 勾选 “Auto Detect” 即可开始自动学习标注。

③ 保存自动标注设置。

( 3 \mathbf{3} 3) 开始自动学习标注。

使用VoTT进行视频数据集标注_第20张图片

( 4 \mathbf{4} 4) 把视频进度条手动拉到开始位置,加载学习模型:

使用VoTT进行视频数据集标注_第21张图片

( 5 \mathbf{5} 5) 自动学习标注有一定的瑕疵,需要手动检查纠正。

使用VoTT进行视频数据集标注_第22张图片

标注框变成正确标签的颜色 (这里是绿色) 即可。

使用VoTT进行视频数据集标注_第23张图片

( 6 \mathbf{6} 6) 不断重复,直到标注完为止。

1.7 保存

( 1 \mathbf{1} 1) 标注完成后,点击保存。

使用VoTT进行视频数据集标注_第24张图片

( 2 \mathbf{2} 2) 设置导出格式。基本保持默认即可。

使用VoTT进行视频数据集标注_第25张图片

“VoTT JSON” 选项下的 “Asset State” 项:

第一个选项是:输出全部图像。

第二个选项是:只输出当前所关联的图像 (默认选这个)。

第三个选项是:只输出当前所标记的图像。

使用VoTT进行视频数据集标注_第26张图片

( 3 \mathbf{3} 3) 导出结果。

使用VoTT进行视频数据集标注_第27张图片

结果将会保存到 “target” 文件夹中:

使用VoTT进行视频数据集标注_第28张图片

1.8 矩形标注框的显示

( 1 \mathbf{1} 1) 这一步用 python 代码来完成,代码如下:

注意:

① 要提前安装好以下库:

pip install opencv-python --user
pip install opencv-contrib-python --user
pip install bounding_box --user

② 下列代码中,有注释的那一行需要根据自己文件的实际路径、实际文件名修改。

import json
import cv2
import os
from bounding_box import bounding_box as bbox_plot

Img_Dir = 'F:\\videoDatasetTag\\target\\vott-json-export'           # 这里填写target文件夹中vott-json-export文件夹的路径
Save_Dir = 'F:\\videoDatasetTag\\results'                           # 这里填写results文件夹路径
Draw_Tags = ['coscinodiscus']                                       # 这里填写标签名称


def make_video(img_dir, img_size=(1920, 1080), fps=5):
    file_path = os.path.join(Save_Dir, "demo.mp4")
    filelist = os.listdir(img_dir)
    fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')
    video = cv2.VideoWriter(file_path, fourcc, fps, img_size)

    for item in filelist:
        if item.endswith('.jpg'):
            item = img_dir + '/' + item
            img = cv2.imread(item)
            video.write(img)
    video.release()


def draw_one_img(img_name, img_timestamp, labels_list):

    img_path = os.path.join(Img_Dir, img_name)
    img = cv2.imread(img_path, cv2.IMREAD_COLOR)
    for label in labels_list:
        tag = label['tags'][0]
        if not tag in Draw_Tags:
            continue
        bbox = label['boundingBox']
        left = bbox['left']
        top = bbox['top']
        right = left + bbox['width']
        bottom = top + bbox['height']
        bbox_plot.add(img, left, top, right, bottom, tag, 'red')
    save_name = 'time%s.jpg' % format(img_timestamp, '.2f').replace('.', '')
    save_path = os.path.join(Save_Dir, save_name)
    cv2.imwrite(save_path, img)
    print(save_name, 'ok~')


def main():
    lb_json = os.path.join(Img_Dir, 'test-export.json')     		# 这里填写\target\vott-json-export文件夹中.json后缀的文件名
    with open(lb_json, 'r',encoding='utf-8') as f:
        labels_dict = json.load(f)

    assets = labels_dict['assets']
    size = None

    for k, v in assets.items():
        img_name = v['asset']['name']
        img_timestamp = v['asset']['timestamp']
        if size is None:
            w = v['asset']['size']['width']
            h = v['asset']['size']['height']
            size = (w, h)
        labels_list = v['regions']
        draw_one_img(img_name, img_timestamp, labels_list)

    make_video(Save_Dir, img_size=size)


if __name__ == '__main__':
    main()

( 2 \mathbf{2} 2) 执行上面的代码。

使用VoTT进行视频数据集标注_第29张图片

( 3 \mathbf{3} 3) 执行完毕后,在 “results” 文件夹中即可看到 2 \mathbf{2} 2 种标注格式:带有标注的 视频 帧图片

使用VoTT进行视频数据集标注_第30张图片

① 视频展示:

使用VoTT进行视频数据集标注_第31张图片

② 帧图片展示 (部分):

使用VoTT进行视频数据集标注_第32张图片

1.9 标注完成

训练时,如果需要的是以视频为单位,则采用步骤 1.8 1.8 1.8 中的 ①视频格式。

如果以单帧图片作为训练单位,则采用采用步骤 1.8 1.8 1.8 中的 ②帧图片格式。

1.10 测试过程中遇到的问题

( 1 \mathbf{1} 1) 该软件无法加载 .avi 格式的视频,我使用《格式工厂》软件转为 .mp4 格式后才能正常加载。

( 2 \mathbf{2} 2) 视频标注工作量大。此前工程设置了帧率为15帧,所以10秒的视频就有150帧,相当于标注了150张图片。更何况数据集中的视频动辄几分钟。自动标注也有瑕疵,需要逐帧对自动标注进行检查和微调。

你可能感兴趣的:(深度学习,深度学习)