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

專 欄

❈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-china)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏电光石火

python3和python2共存

特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。 使用python开发,环境有Python2和 py...

28080
来自专栏偏前端工程师的驿站

Design Pattern: Not Just Mixin Pattern

Brief                                 从Mix-In模式到Mixin模式,中文常用翻译为“混入/织入模式”。单纯从名字上看...

21460
来自专栏菩提树下的杨过

jupyter notebook 在mac OS上的安装

一、关于Anaconda python中有很多包,类似于java中的jar包,java中用maven、gradle来管理依赖的jar包,而在python中类似...

31950
来自专栏Vamei实验室

Python标准库14 数据库 (sqlite3)

Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的...

23790
来自专栏编程

Python的解码和编码

使用Python语言做网络爬虫或者写自动化脚本时,总会遇到“中文乱码”的问题,很是头疼。很多“中文乱码”的问题是跟Python的解码/编码有关,所以今天和大家说...

372100
来自专栏编程

centos系统安装Python

CentOS 6.5安装Python2.7.14 大家好,周五到了,明天终于可以好好的放松一下了,而且,还是三天的长假哦!自从毕业以后再也没有超过七天的假期了。...

283100
来自专栏电光石火

树莓派与arduino通信

一、安装树莓派及arduino开发环境 搭建树莓派串口通信开发环境 (1)安装Python: sudo apt-get update sudo ...

36560
来自专栏Vamei实验室

被解放的姜戈07 马不停蹄

前面的文章研究了Django最主要的几个方面:数据库,模板,动态生成页面等。但都是使用python manage.py runserver来运行服务器。这是一个...

207100
来自专栏Vamei实验室

Python应用03 使用PyQT制作视频播放器

最近研究了Python的两个GUI包,Tkinter和PyQT。这两个GUI包的底层分别是Tcl/Tk和QT。相比之下,我觉得PyQT使用起来更加方便,功能也相...

93990
来自专栏张善友的专栏

IronPython资料

Python文档:http://blog.csdn.net/ccat/category/9998.aspx A bit more on IronPython:h...

20790

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励