本文共 1530 字,大约阅读时间需要 5 分钟。
那么这个算法有没有问题呢,当然有。我们慢慢展开。
首先第一个问题是,我们知道现有的基于bounding box的模型能识别多个对象是因为有anchor method的原因。anchor method其实限制了模型的精度,它只能识别出有限的对象,如果图片中的对象数量超过了anchor method当时训练的规模,它就抓瞎了。这样算法也就会出现错误的风险。
第二个问题是,现在的机器学习,分类已经如火纯青,但是在计数上没有什么进展。设想,如果有一个小孩子,被教完计数,他可以数出图片中的指定类型的对象有多少个;也就是说,给定一个输入图片,输出直接是一个数字,中间的过程是小孩子自己在学习中生成的。并不是像我们现在的算法,先用机器学习再手动写一个计数程序。那么,计算机如何学习计数?
我们来看一下现在的机器学习大概做了什么:一些设定好的layers,数据一次通过,最后得到一个分类或者一个回归结果;这里,回归结果其实可以映射成一种分类,所以我们不妨设模型最后得到了一个分类。那么由这种模型进行组合,其实是形成了一个大的状态机,或者走出了类似于马科夫链的图结构;换句话说,我们在使用matrix的时候,它计算最终成为一个分类,我们不妨把这个分类简化为2值分类,那么其实一个模型如果是二分类,就是完成了一次大if
判断,把他们组合起来也就是很多if
;什么意思呢?就是说,现在的机器学习模型帮助人类能快速生成规模庞大的if
群,以前程序员只能写个十几个if
,现在能写几千万个,那它的精度确实高了很多,也能执行很复杂的任务了,可是和智能相去甚远。而光靠if
很难完成学习计数,这就是现在机器学习的瓶颈。
遇到瓶颈,怎么突破呢?下一个一步之遥是什么呢?
我们再来看看计数的过程,人在图片中计数一般是专注于某个区域,开始识别并计数,并重复专注某区域识别计数累加;在完成一个区域的同时,会使用记忆去标记这个区域已完成,这中间其实是又一个规划过程,而这个规划过程中其实使用了一种重复,或者说循环。是了,我们现在还没有找到稳定表述循环的方法。熟悉汇编或者C的开发者应该比较清楚,for
或者while
其实最终都是编译成goto
的,那么这个goto
具体是如何能在机器学习中实现呢?最简单的循环其实是可以实现的,比如在机器学习的模型中加入一个gate层,它的结果为0就让数据流继续往下走,为1就让数据流跳转到另一个层上。但是这个跳转,看似简单,它如何去学习,还需要更多研究。当然随机跳转,竞标赛最后取最好的遗传算法可以胜任这个任务,但是学习模型如何收敛又是另一个巨坑…其实机器学习的最终,就是可以自主生成一个满足需求的可执行程序…
生而为人,也是否是一个满足需求的程序?
https://ai.googleblog.com/2020/06/repnet-counting-repetitions-in-videos.html
翻译:见压缩
转载地址:http://ilzi.baihongyu.com/