一. 背景
人工智能,尤其是深度学习技术最近十分的火热。因为其已经在大数据和高运算能力(gpu,fpga)的前提下验证了在图片,语音,端到端强大的能力。根据徐伟的ppt,现阶段深度学习技术已经可以成熟的领域在于:【Andrew Ng/徐伟谈人工智能发展的现状与未来】
目前深度学习创造的价值,主要集中在监督学习问题(X->Y)。这些监督学习问题,并不仅局限于Y是布尔类型或者整数的情况,还扩展到更复杂的情形。比如:
图片摘要(Image Captioning) - X:图片, Y:摘要
机器翻译(Machine Translation) - X:英文文本,Y:法文文本
基于图像的问答(Image Query Answering) - X: (图像,问题), Y:答案
语音识别(Speech Recognition) - X: 音频片段, Y:文本
与此同时,产业界也在迅猛的发展。【国内人工智能行业全梳理】中梳理了多个方向的进展。无疑,接下来深度学习会在更多的领域内落地,应用。我准备写一个系列的文章。来总结我在工作中接触到,使用过的相关工具,这包括:(1)数据集的构建:人工标注平台Vatic(2)数据集的分布式存储平台(3)深度学习平台训练工具MXNET(4)深度学习平台训练工具tensorflow。本文先介绍我使用过的一个视频/图片标注工具vatic。
二. Vatic介绍
Vatic源自MIT的一个研究项目(Video Annotation Tool from Irvine, California)。输入一段视频,支持自动抽取成粒度合适的标注任务并在流程上支持接入亚马逊的众包平台Mechanical Turk。除此之外,其还有很多实用的特性:
- 简洁使用的GUI界面,支持多种快捷键操作
- 基于opencv的tracking,这样就可以抽样的标注,减少工作量
具体使用时,可以设定要标注的物体label,比如:水果,人,车,等等。然后指派任务给到众包平台(也可是自己的数据工程师)。现阶段支持的标注样式是框(box)。一个示例,下图标注了NBA直播比赛中的运动员
三. 使用docker搭建Vatic
搭建vatic可以参照github上的说明。搭建过程对操作系统和软件的版本要求较严格。所以,我们使用docker来部署降低复用的难度。
一个参考的docker image
https://github.com/johndoherty/vatic
docker pull jldowns/vatic-docker
启动服务
docker run -v "$PWD/data":/root/vatic/data
jldowns/vatic-docker /root/vatic/start_and_block.sh --name myvatic
四. vatic使用
- 从视频抽取目标图片集合, 内部使用了ffmpeg
turkic extract /path/to/video.mp4 /path/to/output/directory
默认是720x480的目标分辨率,也可以添加--no-resize来保证原图的图片质量
- 将图片load到数据库
turkic load identifier /path/to/output/directory Label1 Label2 LabelN --blow-radius 0 --skip 5 --offline
设置标注的label,每5帧标注1帧,不覆盖周围的帧数据
- 发布任务
turkic publish --offline
- dump 标注后的元数据
turkic dump identifier -o output.txt
支持xml,json等多种格式
- dump标注后的图片数据
turkic visualize identifier $output_path --merge --renumber
cd $output_path
ffmpeg -i %d.jpg -vcodec mpeg4 output.avi
支持导出带标注box的图片集合,并可以通过ffmpeg合成为一段完成的演示视频