Py学习  »  Python

Python人工智能鉴黄师的自我修养

Python中文社区 • 6 年前 • 754 次点击  

專 欄


LucasX,Python中文社区专栏作者。

前阵子在设计一个智能黄反识别的方案,查阅了已有Paper,结合自己的一点想法,现对不良图像的识别进行以下梳理:

方案1:皮肤区域检测法

与正常图片相比,不良图片的最大特征就是一张图像里包含了大量暴露的皮肤区域,因此可初步通过皮肤区域检测法来快速完成对色情图片的识别。主要方法如下:

1) 将RGB通道的图像转为HSV或YCbCr通道的图像:

2) 分析转换后三通道的图像信息,目前对皮肤区域的定义区间如下:


3) 皮肤区域统计:

4) 阈值参数选定: 选定阈值 t (通常设置为0.3~0.6),当 skin_{area} > t 时,可认为该图片为不良图片。

5) 总结: 该方法通过对图像通道的变化分析,可快速检测出嫌疑色情图像,操作简单,但是对于“性感——如女性泳装照”、“正常——如男性裸露上身、裸体婴儿皮肤”等均会误判为少儿不宜的图像。

方案2:机器学习方法

对于一张图像,我们可以广义地定义为3类:“正常”、“性感”、“色情”。因此,可以利用机器学习的方法来对训练集图像进行训练,将训练后的模型用于预测。就像下面这样的(图片来自百度AI)。

该方法主要思路如下:

1) 分别搜集“正常”、“性感”、“色情”三类大量带有标记的图像样本,3类样本分布需尽可能均衡。

2) 提取图像LBP/HOG/SIFT特征,尝试SVM、Adboost、KNN、Random Forest、MLP等分类器模型进行训练,选择分类性能最佳的模型。

3) 总结: 该方法借助机器学习对训练集图像进行训练,因此相比于方案1,该方法精度会有明显提升;但是需要大量标注样本。

方案3:深度学习方法

近年来,深度学习在计算机视觉领域超越传统机器学习方法取得了突破性的进展,因此可借助深度卷积神经网络对图像进行训练,依据数据量的大小设计不同的模型。将其转换为基于深度学习的 图像分类(Classification) 或 图像检测(Detection)(关键部位检测)问题。

总结:该方法准确率和鲁棒性均可以达到最高,但需要海量标记样本。

方案4:数据挖掘方法

该方法旨在对平台用户积累的历史行为数据进行深度数据挖掘,少数色情图片上传者与大部分正常用户在行为上往往会有很大的不同。该方法对应于数据挖掘中的“离群点分析”。尤其对于直播平台,可重点关注点赞/弹幕 比例,若在某时刻突破峰值,那么可认为存在较大概率为色情直播(比如当年某直播平台的直播造人 =_=!)。

总结:该方法检测效率较高(对数据库的操作效率远胜于二进制图像数据的操作),但需要平台提供海量用户历史行为数据。

方案5:MD5检测

可通过比对上传文件的MD5来检测不良图片或视频,该方法效率较高,适合于云盘内容检索等应用场景;但对于直播等UGC平台,则该方法不适用。

方案6:训练音频分类器

视频文件的处理,若按照深度学习与计算机视觉的方法去做视频内容分析,势必会存在极高的计算复杂度。因此,可对视频文件的音轨进行分离,分别提取色情视频与正常视频的音频特征,从而将其转换为机器学习二分类问题。

总结:该方法效率上比视频分析高,但是对无声色情视频无效。

方案7:迁移学习方法

考虑到昂贵的图像标注成本,因此可借助迁移学习(Transfer Learning)的思想,从 Pretrained-Model 提取 features,然后再结合 Ensemble Learning Methods(例如 Random Forests 等) 做 fine-tuning。

总结:由于目前并没有 Porn Image Recognition 相关的 benchmark,所以我能想到的是利用VGG/GoogleNet/ResNet/DenseNet 从ImageNet 数据集预训练得到的模型,取 较低层 的feature map,或者结合低层与高层的 feature map做concatenate操作作为最终的feature vector。

实验环节:

因为我主要是做机器学习算法相关的设计与实现,因此给图片打Label这种事就不讨论了(请勿飙车~~~)。目前尝试了两种方案,即皮肤区域检测模型与机器学习分类模型。

其中皮肤区域检测很显然误差比较高,在此就不讨论了。说一下用机器学习方法来做的过程吧,pipeline也比较清晰。就是先提取图像的 HOG/SURF/SIFT/LBP 特征,然后选择合适的机器学习分类算法进行训练。我在实验环节中发现,选择 HOG + Random Forests 效果是最好的。说明基于集成学习机制的随机森林算法能实现最佳的分类效果。mAP达到了88.15%。

由于目前带标记的样本数量不够多,而给这些图片打标签也着实是个“伤身体”的体力活。所以......若训练集数量足够大,肯定推荐 Deep CNN 去做,预测结果肯定是会有大幅度提升。

另:因某些不可描述的原因,此处不开放数据与具体模型算法~

最后,给唐马儒童鞋做了一张帅气的照片~

长按扫描关注Python中文社区,

获取更多技术干货!

    

Python 中 文 社 区

Python中文开发者的精神家园

合作、投稿请联系微信:

pythonpost

— 人生苦短,我用Python —
1MEwnaxmMz7BPTYzBdj751DPyHWikNoeFS




本文为作者原创作品,未经作者授权同意禁止转载



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/zR9PupsAaC
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3445
 
754 次点击