机器学习系列之:怎么样数鸡?(1)

上两周,我去剑桥听了 DDD 开发者大会,DDD是 DeveloperDeveloperDeveloper 的缩写,是英国比较有名的 .NET 开发者大会。来自微软的大神 Gary Short 讲了一个如何用 机器学习来数鸡的讲座,我印象深刻,于是想整理一下和大家分享。

2017-09-16 08.33.20.jpg

鸡场数鸡是件很痛苦的事情,因为鸡嘛,跑来跑去,人工数是不太可能的,所以才会有这个问题。最后面想出一个方法就是当所有的鸡都在室内鸡场的时候,开足灯光,然后从上面拍张照片,然后我们的目的就变成了,快速的数一数照片中的鸡。比如这个:

c1.jpg

当鸡的数量少的时候,人眼一下子就看出来了,但鸡场少说也有成千上万的鸡,人眼数是费时费力的,这时候我们就要让计算机学会数鸡。

问题一:死鸡怎么办?
答案:没关系,假设数得N只鸡,把门打开,活鸡跑出去,然后死鸡就可以数了(同样可以拍照让程序来数)

问题二:需要多少的准确率?
答案:对于鸡场来说,他们不需要100%的准确率,如果从一张照片中很快的得到90%的准确度就已经乐得屁颠屁颠了。

数鸡需要几步?

简单来说,五步:

  • 数据筛选 Data Reduction
  • 灰度化 Greyscale
  • 计算阈值 Threshold
  • 变成0和1
  • 计算分类 Cluster

数据筛选 Data Reduction

这步没啥好说的,包括图片裁减 (Crop) 和去掉无用的背景信息。 缩小图片大小有助于后面加快分析和计算。无用的信息属于噪声,会影响算法分析的准确度。

灰度化 Greyscale

图片色彩鲜艳,不利于计算机分析(不同的色彩在计算机眼里属于不同的变量),我们可以通过计算亮度 Luminosity 来把不同的色彩变成单一的数值,也就是把 RGB 用以下的公式来计算亮度:

Gary Short 的代码在: https://github.com/garyshort/chickens/blob/master/ChickenCounter/ChickenCounter/Program.cs

其中这段函数就是把一图片变成 灰度:

当然你也可以用笨方法,遍例图片每个点相素,不过这样的代码实现效率就较低。

陪媳妇去了,未完待续,请听下文分解,请见谅……


机器学习系列之:怎么样数鸡?(1)

@justyy 是CN 区的点赞机器人,对优质内容进行点赞,只要代理给 @justyy 每天收利息(100 SP 每天0.04 SBD)并且能获得一次相应至少2倍的点赞,可以认为是VP 200%+ ,详细请看:

H2
H3
H4
3 columns
2 columns
1 column
14 Comments