当前位置: 首页 > 编程日记 > 正文

如何创建计算机视觉场景训练数据

作者 | 刘明宽

数据科学部门负责人,澳鹏(Appen)美国 
曾任eBay首席研究科学家(数据科学总监)

对于一些精度要求不太高,或者不太复杂的计算机视觉应用场景,利用一些现有的开源数据集如ImageNet/Coco 等,我们也可以训练出满足基本要求的机器学习模型。但对于更复杂的计算机视觉应用,如何获得大量、高质量的训练数据以支持创建一个精确机器学习解决方案?来自美国加州澳鹏Appen数据科学部门负责人的刘明宽先生在这篇文章中,详细阐述了如何快速创建(包括采集、标注、质检)高质量的各种计算机视觉场景所需的训练数据集,并应用于视频理解、自动驾驶、安全监控监视系统和医学图像诊断等领域。

对于任何部署于大规模实际应用中的计算机视觉应用来说,成功的一个关键就在于训练相关机器学习模型所需的训练数据集的质和量。

如何为机器学习项目创建合适的训练数据集?

不同类型的机器学习建模方法可能会使用不同类型的训练数据。这篇文章所讨论的,数据类型的主要区别在于它被标记的程度。在实际应用场景中通常有以下四种不同的机器学习建模方法

  1. 监督学习:是指模型是在标注数据集上训练的。

  2. 半监督学习:是指模型是在少量的标注数据集加上大量的非标注数据集上进行训练的。

  3. 无监督学习:采用聚类分析对非标注数据进行分组,聚类分析不是对反馈做出响应,而是识别数据中的共性,并根据每条新数据中是否存在这种共性做出反应。

  4. 强化学习:模型在一个互动环境中通过从自身的行为和经验中获得的反馈,反复实验,从而达到学习和提高的目的。

目前在实际大规模工业应用中最成功的计算机视觉系统通常还是采用监督学习的方法,即运用了大量高质量的标注数据来进行训练,例如深度学习方法。具体到您的项目中,选取何种学习模型,很大程度上将取决于您的实际项目需求以及可用资源,如预算和人员配备等。

尽管利用一些现有的开源数据集(如ImageNet, Cityscapes, 或Coco 等)也可以训练出一个还不错的计算机视觉模型来满足跟这些数据集很类似的CV应用需求。但是在更多的时候,这些开源数据集并不能满足您特定的计算机视觉应用场景需求,无论是具体应用的领域、或是数据分布的样本空间、还是标注的精细程度等等。

计算机视觉应用在实际应用部署中要想取得比较满意的应用效果,一个关键点是训练相应机器学习模型的训练数据集必须符合实际应用场景中的数据分布并尽可能地做到无偏见、无遗漏地覆盖各种实际应用中可能出现的情况。否则就很可能就是Garbage In and Garbage Out。

您需要为您的计算机视觉应用场景采集足够多的来自于实际应用场景的真实图像或视频数据,并对这些数据进行高质量的符合您具体应用需求的精细标注。根据解决方案的复杂性或安全性要求,这有可能意味着需要采集和标注数以百万计的图像数据。

如果您的计算机视觉应用场景很常见,并且也不需要进行非常定制化的精细标注,那么您有可能从某些数据供应商那里购买到一些现成的常用场景的常用标注数据集。

如果这些现成可用的数据集并不符合您的具体应用场景,大多数公司通常会选择与训练数据提供商进行合作来采集和标注所需的训练数据集。例如,澳鹏(Appen)在数据采集和标注方面拥有一个具备二十多年行业经验的多达数百人的全球项目经理团队。这些项目经理们可以一对一地根据您的特定应用场景需求,同您一起制定出符合您具体需求的数据采集、标注、质检、交付等环节的指导文档,并将这些任务和指导文档分发给Appen全球数百万的众包员工。从而可以做到在比较短的时间里就帮您开发出符合您具体应用场景需求的大量且高质量的训练数据集。

一个大型的、多样的训练数据集,将会使您的机器学习模型在细节判定和避免误报方面具有更好的健壮性和成功率。这对于诸如自动驾驶训练数据之类的解决方案尤其重要。这些解决方案中,机器学习模型必须准确地识别出在街上玩耍的小孩和在风中飘舞的购物袋之间的区别。在这种情况下,如果你的系统训练量不足,则可能会受到背景光线、颜色、大小、形状的相似性等的因素的影响,从而造成系统的识别混淆。

如何提高训练数据的质量?

精准的图像标注对于广大的计算机视觉应用至关重要,包括机器人视觉,面部识别和依赖于机器学习来解释图片的其他解决方案。为训练这些解决方案,必须将标识符,标题或关键字形式的元数据分配给图片。在大多数情况下,要正确识别复杂图像中可能经常出现的细微差别和模棱两可的情况(如交通摄像头报告和拥挤的城市街道照片),人工的处理是必不可少的。

澳鹏(Appen)的图像标注工具就是利用人工智能的力量,显著提高了图像标注工作者的工作效率。人工智能辅助的图像标注工具会首先勾勒出物体轮廓。例如,如果标注任务是标出一张图片中所有的汽车,澳鹏(Appen)的3D点云图像标注工具会自动在汽车周围形成3D边界框,如果汽车形状没有完全对齐,则人工只需要调整边界框的几个点。这样要比让人工从头开始画3D边界框快得多,效率也更高。

人总是会有犯错的时候,哪怕是那些经过长期专业训练的众包标注员。如何避免由于人工标注员的疏忽而导致的训练数据集的质量下降呢?

澳鹏(Appen)从两个方面对人工数据采集和标注的流程进行了质量管控。首先我们运用了人工智能的方法对标注员的标注结果进行自动数据验证,并给标注员提供实时的质检反馈,从而让标注员可以加速熟悉当前的标注任务进而快速地提升标注质量。另外澳鹏(Appen)还建立了一套严格符合ISO-9001国际标准质量管控认证的数据采集、标注、交付的流程。在整个流程的每个环节当中,我们都有独立的质检员来从始至终地实时对每个标注员的交付结果进行质检抽查。没有达到质量标准的标注员及其标注结果都会被新的符合质量标准的标注员替代并进行重新标注。这样我们就可以确保提供给客户的训练数据集完全符合您的高质量要求并有力地保证了客户训练出来的机器学习模型在实际部署时的成功。

提高训练数据集的质量还意味着您必须保证您的训练数据集覆盖了可能遇到的所有真实场景,以保证您的计算机视觉系统能适用于真实环境。有一些方法可以非常简单的丰富图像数据。例如帮助训练机器学习模型以应对现实中的细微差别的常见方法包括旋转或裁剪图片,以及更改颜色和曝光值。实践证明,这种方式处理数据是提高计算机视觉系统性能的简单而有效的措施。

在训练图像数据时如何避免标注偏差?

一个可能会影响机器学习模型准确性的问题是训练数据中的偏差。在训练机器学习模型时,您的团队应当注意几个可能会导致偏差的原因。

标注偏差是监督学习项目中的一个常见问题。当模型训练时所使用的数据集不能准确反映模型要操作的情境时,就会发生这个问题。当采集训练数据集样本时,不仅要考虑到与您具体的项目需求相关的情景,而且还要尽可能多地考虑当这个应用进行实际部署时现实世界的多样性,这一点很重要。换句话说,训练数据的分布要与真实数据的分布相匹配。

为此,重要的是在训练数据中要考虑到实际机器学习模型部署时的数据分布因素,比如季节和趋势信号,以及数据源的地理分布等等。如果不考虑这些因素,就可能产生有偏差的数据,从而影响机器学习模型在现实世界部署时的性能。

澳鹏(Appen)是如何做数据标注的?

澳鹏(Appen)为客户提供了一个符合ISO-9001质量管控认证的并进行全面管理的总包数据采集和标注方案。我们将机器学习和众包相结合,在任何给定时间,全球数万名专业标注员协同工作,从而可以在短时间内对大量数据进行高质量的采集、标注、质检并交付。

为了使CV项目能够及时面向市场,Appen还采用了人工智能和机器学习辅助的高效的数据采集、标注、验证、和质检的方法和项目管理流程,从而极大地提高了标注员的效率和质量。

此外,澳鹏(Appen)还提供训练数据透视报告和数据增强服务,以确保您的计算机视觉项目拥有最好的训练数据,如图片或视频标注。澳鹏(Appen)解决方案有几个关键流程组件,以确保最高水平的数据质量:数据聚合/分布分析和可视化、数据异常检测、数据偏差消除策略、数据自动扩充策略、数据标注说明建议,凭借全面,易于实现的数据标注和项目管理服务。目前澳鹏(Appen)中国提供了一套端到端一站式数据服务平台,此平台集成了澳鹏(Appen)20多年全球领先的数据服务经验 ,及Figure Eight 先进技术,能够快速的为您的CV解决方案的准确性提供基础。

您目前是否正在使用人工智能以做出更明智的决策,构建创新的解决方案,并提供更好的客户体验?点击阅读原文,可详细了解澳鹏(Appen)可以怎样帮助您。

相关文章:

express中的bin/www文件详解

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env node 表明是node执行文件,在做repl工具时候的会用的 "#!"是标识符/usr/bin是环境变量的绝对路径/env 如果是直接#!/usr/bin node ,则执行这个文件的时候,会从/usr/bin中找node命令,如果没有,则…

深度分析typedef--定义自己的数据类型

最近在看redis源码的时候看到Ae.h的时候看到如下源码: /* Types and data structures */ typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask); typedef int aeTimeProc(struct aeEventLoop *eventLoop, long long id, void *client…

Go对Python产生的冲击

作者 | yuliao来源 | 懒编程(ID: hackpython)Go 的流行让以 Python 为主流语言的开发者(比如我)产生了一定的危机感。上一次有这种危机感还是做 Android 开发的时候,当时用 Java 做 Android 开发,Google 强…

更新ADT到Android L的方法

android ADT无法更新到20? 哈哈,有办法,windows 进入host 写入例如以下所有,是的所有。然后在到sdk manager中方可更新 #Google Services START #Googleapis↓ 61.19.1.54 mt0.googleapis.com 61.19.1.54 mt1.googleapis.com 61…

php.ini安全配置详细解释

PHP本身再老版本有一些问题,比如在 php4.3.10和php5.0.3以前有一些比较严重的bug,所以推荐使用新版。另外,目前闹的轰轰烈烈的SQL   Injection也是在PHP上有很多利用方式,所以要保证  安全,PHP代码编写是一方面&am…

5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?

作者 | 马超来源 | CSDN(ID:CSDNnews)3月19日,默安科技CTO魏兴国发微博称,微博数据泄露了不少用户的手机号,当中涉及不少微博认证的明星和企业家。亦有网友在他的微博评论区表示:“有超过5.38亿…

GDB使用总结

经典编译参数: # cc -g -o xx xx.c 或者 # cc xx.c -g -o xx 如果调试不是进程总的程序 可以直接 #gdb 程序名即可 # i 打印行号 #break 行号 #r 重新开始调试 利用set args 命令就可以修改发送给程序的参数,而使用show args 命令…

Spring概述

Spring 是什么Spring是一个开源的轻量级Java SE(Java 标准版本号)/Java EE(Java 企业版本号)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中&#xf…

Nginx模块开发

最简单的Nginx模块开发,虽然简单,但是是最重要的第一步。 主要是看:http://blog.codinglabs.org/articles/intro-of-nginx-module-development.html 1.准备模块文件 在nginx-1.4.2安装目录新建一个自己的模块的目录 # mkdir myModule 再新…

程序猿惯用口头禅与内心真实 OS,快来看看你中招没?

作者 | 他二哥来源 | 腾讯技术工程滑动查看真实内心 OS滑动查看真实内心 OS滑动查看真实内心 OS滑动查看真实内心 OS滑动查看真实内心 OS滑动查看真实内心 OS滑动查看真实内心 OS滑动查看真实内心 OS滑动查看真实内心 OS【end】◆精彩推荐◆推荐阅读百万人学AI:CSDN…

每日学习笔记(1)

1,python2.4不支持下面这种异常处理语法 try: except: finally: 只有2.5以上才行,为此只能改成下述写法,damn fuck python 2.4... try: try: except: finally: 2,python实现单例模式的一种方法: class MyCl…

linux svn使用方法

1 安装 svn sudo apt-get install subversion 2 查看svn版本号 svn version 3 下载源代码 下面以举例 svn co svn://192.168.5.88/ erppurchase -username hming -password hming /var/www/test 4更新代码 cd /var/www/test/ svn up 当前目录下所有的文件都更新 svn up -r 200…

64% 的企业未实现智能化,5成公司算法工程师团队规模小于 10人,AI 工程师的机遇在哪里?...

整理 | 夕颜责编 | 唐小引出品 | CSDN(ID:CSDNnews)当前,人工智能技术已应用于各行各业,落地成为大家关注的核心问题。在经历了 2019 年的行业低谷期之后,无论是行业巨头还是新兴独角兽,都开始审视 AI 能够…

指针的本质--u_char*指针在Nginx源码中的应用及原因

GNU下的void *p相当于char *p 也就是移动一个字节。 下面的代码是Nginx中内存池的结构体代码,其中last和end是表示内存地址的。 last是u_char*指针类型也就是unsigned char typedef struct {u_char *last;u_char *end;ngx_pool_t …

原来这就是乡下人

来源:http://user.qzone.qq.com/313998514/blog/1215427152#!app2&viaQZ.HashRefresh&poscatalog_private 今天早晨一早就去做家教了, 原因是我的学生要去香港去学习七天, 明天就要走了, 所以为了赶时间, 今天的课就提到早晨来上. 这些都很正常, 早晨6:17我…

如何查看Apache的连接数和当前连接数

查看Apache的连接数和当前的连接数以及IP访问次数,下面有个不错的示例,大家可以参考下,希望对大家解决问题有所帮助查看了连接数和当前的连接数 复制代码 代码如下:netstat -ant | grep $ip:80 | wc -l netstat -ant | grep $ip:80 | grep ES…

linux环境insight安装与使用

去官网下载:ftp://sourceware.org/pub/insight/releases 安装步骤 # wget ftp://sourceware.org/pub/insight/releases/insight-6.8-1a.tar.bz2 # tar xvf insight-6.8-1a.tar.bz2 # cd ./ # ./configure --prefix/usr/local/insight # make 注意第一次make…

磁盘加密软件TrueCrypt知识大全(二)之创建文件型加密卷

磁盘加密软件TrueCrypt知识大全(二)之创建文件型加密卷 1、在“TrueCrypt”窗口中选择“创建加密卷(C)”按钮,在向导中选择“创建文件型加密卷”,然后一直下一步。 2、在TrueCrypt加密卷创建向导中单击“选…

你的企业在什么情况下需要人工智能?快来看看你需要具备哪些条件与能力吧!...

作者 | Anzhela Sychyk译者 | 风车云马 责编 | 徐威龙出品 | AI科技大本营(ID:rgznai100)如今有关人工智能的炒作多得令人眼花缭乱。各个行业都极力采用这种技术,以获得相对于其他企业的竞争优势——降低运营成本,并改善客户体验。…

struts2学习笔记--线程安全问题小结

在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的&#x…

函数指针--Nginx和Redis中两种回调函数写法

1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connection_handler_pt)(int c); //仿redis风格 typedef void redisCommandProc(int c); typedef struct { int a; //结构内定义函数指针变量pshow voi…

人生苦短,不光要用Python,还要在VSCode里用

作者 | imbennyguo出品 | CSDN博客在程序员圈子里&#xff0c;Visual Studio Code&#xff08;以下简称VSCode&#xff09;可以说是目前最火的代码编辑器之一了。它是微软出品的一款可扩展的轻量级开源编辑器&#xff0c;并且支持全平台系统。这些特性使得VSCode颇受欢迎&#…

从XXX 产品的失败谈起

从XXX 产品的失败谈起 从去年年中公司开始秘密研究一项高级产品&#xff0c;以替换陈旧体系下的老款产品&#xff0c;为此&#xff0c;创建了一个产品开发部 门&#xff0c;由七八个富有本行业开发经验的全职成员构成&#xff0c;经过一年多的努力&#xff0c;即将投入市场了&…

C++ 经常使用类 string类

6.3.2使用string对象 string word"I love China" *链接字符串* string descriptionadjective " " word; _Note_: 不能连接两个字符串字面量&#xff0c;以下的语句是错误的 string test "I have" "a dream"; 6.3.3訪问字符串中的字…

Nginx源码分析--字符串处理

ngx_string.cvoid ngx_strlow(u_char *dst, u_char *src, size_t n); 将src的前n个字符转换成小写存放在dst字符串当中&#xff0c;调用者需要保证dst指向的空间大于等于n。操作不会对原字符串产生变动。如要更改原字符串&#xff0c;可以&#xff1a;ngx_str_t str ngx_strin…

信息保留的二值神经网络IR-Net,落地性能和实用性俱佳 | CVPR 2020

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导语&#xff1a;在CVPR 2020上&#xff0c;商汤研究院链接与编译组和北京航空航天大学刘祥龙老师团队提出了一种旨在优化前后向传播中信息流的实用、高效的网络二值化新算法IR-Net。不同于以往二值神经网络大多关注量…

Jq-table最后一行添加样式

豪情姓名QQE-mail豪情249056406jikeytanggmail.comtony1234567puaggmail.comtony1234567puaggmail.comtony1234567puaggmail.comtony1234567puaggmail.com豪情啊不得了真是的运行代码

Same binary weight (位运算)

题目描述 The binary weight of a positive integer is the number of 1s in its binary representation.for example,the decmial number 1 has a binary weight of 1,and the decimal number 1717 (which is 11010110101 in binary) has a binary weight of 7.Give a positi…

Nginx源码分析--基本数据类型的别名

typedef intptr_t ngx_int_t; typedef uintptr_t ngx_uint_t; typedef intptr_t ngx_flag_t; intptr_t在 # /usr/include/stdint.h 中&#xff0c;下面是stdint.h部分代码 #ifndef _STDINT_H #define _STDINT_H 1#include <features.h> #include…

EnterpriseDB Migration 迁移工具使用测试(2)

下面我们来测试EnterpriseDB Migration 工具对于Oracle 大对象(LOB)的迁移情况&#xff1b; 首先在在Oracle实例Scott模式下创建具有LOB对象的表,如&#xff1a; SQL> create table tlob (t1 int primary key,t2 clob,t3 blob); Table created. -- 并填充数据 SQL> begin…