偶然上 UCI Machine Learning Repository , 发现新增加了一批新的数据集,包括一个 "Skin Segmentation" 样本集:
样本数:245057 (其中有50,000+正样本,剩余负样本)
特征: B G R(像素颜色)
类别: 2类(废话,肤色/非肤色)
页面上对这个数据库的简要介绍:
"The Skin Segmentation dataset is constructed over B, G, R color space. Skin and Nonskin dataset is generated using skin textures from face images ofdiversity of age, gender, and race people"(很直白,不翻译了吧)
肤色检测一直是一个比较实用,实时性也很强的方法。早前也有以肤色为基础做人脸检测的[1]。另外,肤色检测也可以用来做人脸检测的验证等。
之前,也一直想要实现一个肤色检测,用过最简单的矩形和椭圆区域在颜色空间中标记肤色的方法(中文文献,具体忘记了)。但是,如果要自己收集数据集的话还是比较繁琐,所以后来也不了了之了。正好有了上面这个"Skin Segmentation" 样本集,wow~~,然后用随机森林训练了一个肤色检测器,参数如下:
(1)集成随机树15棵
(2)节点分裂用轴平行的简单弱分类器
(3)每个节点随机选择特征空间一维
训练与测试:
其实应该将RGB转换到其他颜色空间的,把色调和亮度分离。但是这里又偷懒了,直接RGB作训练和分类。
在全部245057个样本中随机5500个样本(正负约接近),训练/测试为2475/3025(准备数据集满足分类器的输入也是我最不喜欢的繁琐的事,这里或许使用的样本有点少了)。上述随机森林大概花了600ms训练完成,在测试集上分类准确率>99%(重复实验过N次,大概在99.2%左右)。对一幅516*345的图像需要2s时间(3G RAM/1.83GHz laptop),平均到每个像素点为0.01123ms(这种统计数据有意义吗?!)
下面是一些效果图:
先拿我刺的(sorry,是你们皇马的)魔笛来试试:
白鹿巷的魔笛和帕克(这图截的太不专业了!)
然后是那时还在里昂的皮少
在罗马卖萌的皮皮
再来四张斯内德吧,今天谈判破裂(预想中的),你的下一站是何方?
然后,今天科比成为最年轻的Mr. 30K!恭喜!希望湖人走上正轨吧!
原来对黑人的肤色效果欠佳,这也是在情理之中。
绝杀之后的老男孩
最后来一张热刺的全家福吧,当然是在老雷时代
最后,想说,不要指望肤色可以解决很高难的问题,肤色检测大多数应该只是一个辅助手段,如[4]用在了人体部件的跟踪上。
关于用RF做肤色检测的论文可以参考[2]和[3],其中[3]对各种分类器和各种颜色空间做了大量实验。
纯属业余兴趣,想法很naive,欢迎拍砖。
[1] Rein-Lien Hsu, Mohamed Abdel-Mottaleb and Anil K. Jain. Face Detection in Color Images.TPAMI, 24(5), 2002.
[2] Rehanullah Khan, Allan Hanbury, Julian Stoettinger. Skin Detection: A Random Forest Approach.ICIP, 2010.
[3] Rehanullah Khan, Allan Hanbury, Julian Stöttinger, Abdul Bais. Color based skin classification. Pattern Recognition Letters, 33(2), 2012.
[4] Haris Baltzakis, Maria Pateraki, Panos Trahanias. Visual Tracking of Hands, Faces and Facial Features of Multiple Persons. Machine Vision and Applications, 2012.
--------------------------------------------------我不是分类面,下面也没有演职人员表了----------------------------------------------------
最后,祝魔笛和皮皮在各自的球队好好表现,稳扎稳打。不过,说实话还是喜欢冬季转会时皮皮来我们热刺的。