大家都知道搞 AI 要有海量的高质量数据才能玩的转,那这些数据要从哪里来?不同的业务有不同的做法,结构化数据领域可能相对简单一些,很多时候都可以通过 sql 语句从线上库中把数据过滤拼接出来,不用很大的采集成本, 甚至数据标注的工作很多时候也可以自动拼接出来。 而 NLP 领域会更恶心一些,它不是恶心在数据采集上, 因为在互联网信息爆炸的现在,很多数据都是爬取出来, NLP 领域的数据恶心在标注上。 因为它往往需要理解一份文档的内容才能进行标注。 比如我们要做一个问答模型, 往往需要标注人员读懂一篇专业的文档,然后从中提取相关的问题和答案(问题和答案就是标注数据了)。 这也是为什么业内很多团队都会选择利用 GPT 进行 “蒸馏” 法,也就是把一个问题发给 GPT 来回答, 然后把 GPT 输出的答案就当是标注数据了。 这样就不用人工的来对数据进行标注了。 当然 Open AI 是不准许这么干的,这也是为什么字节的 Open AI 账号被封掉的原因, 因为 Open AI 发现该账号存在这种行为。
而这一次我接到的任务则是在计算机视觉领域中, 这个领域中的标注是非常简单的,而采集成本却异常的高(跟 NLP 完全相反)。 跟视觉相关的很多场景都设计到了数据隐私安全,所以在网络上很难找得到符合要求的数据。比如在计算机视觉中非常常见的人脸识别,用户的人脸信息是非常敏感的,在以前很多门店(房屋中介,4s 店)都会假设摄像头采集用户人脸信息,这在行业中是默认的潜规则, 但在 2,3 年前已经被国家彻底禁止了。 毫无底线的获取用户信息的时代已经过去了,这时候想要再收集到人脸或者其他信息,就需要用户的授权才可以。 而我们这一次为了提高电动车识别效果(自打某城市电动车着火把整栋楼烧掉后, 电动车识别就成了一个强需求),在与客户沟通后便派人前往客户处构造并采集数据。
本来数据采集的工作不是测试人员的负责范围的, 公司有专门的数据组, 也有专业的交付人员到客户处进行沟通。 但有些时候怎么说呢, 理想很丰满现实很骨感,网上不是流传一句话么,叫整个世界就是一个草台班子。 所以即便是在顶级的公司内部,大多数地方也都挺乱的,流程并不完善。 所以在这个项目中在一开始就缺失了数据采集的这么个角色, 所以我们总监就临时让测试来顶了数据采集的活。 这也是我们这边的理念或者是现在整个行业中比较流行的理念吧 -- 角色是不设边界的(测试人员不是只关注测试这一块,在发现其他岗位有缺口时也要补上去),大家互相补位把产品做好,在我们公司也有一句话叫能上能下。 但其实也是面向领导编程的工作态度, 很多时候当领导希望你做某件事的时候,抱着岗位边界这个原则来说事往往是非常无力的。
项目在一开始的时候只需要采集自然数据即可, 就是不会刻意的去构造数据, 就在真实的摄像头中拉流,抽帧。把数据提交到数据组的平台中,再由算法人员核查,核查后提交给标注组标注,之后模型训练即可。 但自然数据必然会带来正样本稀少的缺点,因为现在很多园区的管理也挺好的(尤其高档园区),有很多的保安在站岗,能把电动车推进楼道/电梯/大厅的情况本身就很少。 所以采集了很多天其实也没采集到多少正样本。
PS: 这里贴一下数据采集的工具:
sudo bin/ffmpeg -i rtsp://xxx:xxx@xxxx:554/cam/realmonitor?channel=1\&subtype=0 -r 1/5 -f image2 -q:v 1 -an ./xxx/xxx_7zuoketi_$(date +%Y%m%d-%H%M%S)-%03d.jpg
ffmpeg 和 opencv 都是计算机视觉领域中测试人员常用的工具(其实交付,工程,算法也都用), 尤其 ffmpeg 的使用频率非常高, 它可以把各种形式的视觉数据经过处理转换成另外一种形式。比如在这个场景中我们使用 ffmpeg 从某个摄像头中拉取 rtsp 协议的实时视频流,并设置每 5s 抽一帧并保存到对应的目录中。
所以其实可以看出来,数据采集的技术难度不高, 只要对计算机视觉方向有基本的了解,学会 ffmpeg 这个工具即可。 但数据采集恶心的地方在于如果不认为构造数据, 仅凭自然数据那就收集不到足够的正样本(在本例中就是压根采集不到多少张有人推着电动车进入楼道的图片), 所以这里就需要开展认为构造数据了, 那怎么构造呢, 其实很原始。 招聘演员和租用各种不同的电动车,到客户的各个摄像头下按照固定的路线和姿势推着电动车走来走去就行了。 这里需要注意的是:
所以根据以上背景, 上周日晚上领导们紧急开会后,当天夜里就定了第二天早上的机票飞往广州客户处。
最大的感受是一线实施的人真的苦逼, 这钱真的是一个辛苦钱。 上面说的困难里最让我难受的就是办公环境, 我们俩个一天真的是不敢喝水,就怕喝水上厕所,小区里没有公共厕所的, 想去厕所得不行 10 分钟到保安办公区那里。 但我俩都得盯着演员或者盯着监控或者盯着采集。 哪敢一走就是 10 几 20 分钟的。毕竟我们只有早 9 晚 5 这段时间能采集,那都是争分夺秒的(采集压力是很大的,必须在规定时间内采集到足够的数据,长期这么采集是不现实的,因为这扰民啊,比如在电梯场景里采集数据, 那就是占着电梯,居民就用不了这个电梯了只能用别的, 一旦人流量上来了让居民排队了就会被投诉的)。 然后一整天都在喂蚊子, 并且要么站一天,要么蹲着一天。 我基本采集的第二天大腿和腰就酸疼酸疼的,因为我一直在用蹲着的姿势一蹲就几个小时(中间也就偶尔站起来活动活动,或者转点位的时候走动走动)。 所以这一次出来采集数据, 最大的感受就是体会到了一线实施的同学真特么是挣的辛苦钱。演员也挺可怜,跟着我们一走就是一天,结果就百十来块钱的。
这次出来也算是又补全了在 AI 领域里的一个经历了, 以前还真没搞过现场数据构造与采集的活, 算是体验了一把, 也深切的感受到了那句话:人工智能是有多少人工就有多少智能。 一个个牛逼的模型背后,都是大量的一线人员的汗水。