前言
公司的业务需要大量的图片内容安全审核,目前使用的是第三方服务但是老遇到漏判、误判、标准和业务不匹配的情况,因此经常需要和第三方:
- 反馈问题、找到他们的taskid、期望的效果
- 描述详细需求,给出样本
有时候样本不够还要找半天,有几次第三方还让提供几千张训练数据
- 进行掰扯
不觉得有问题、给你一个临时且麻烦的解决方案、想要他们更好的支持
- 想要知道怎么解决的,了解root case结合业务避免问题再次发生,但是对方不愿解释
- 确认是否验证
很多时候没有验证,担心又出现类似问题还要找数据进行验证
- 跟踪问题解决进展
可能很慢,又不想影响线上业务,需要讨价还价等
很费时间觉得不值得,感觉再给第三方打工,不仅涉及技术,效果和标准还需要产品、运营、社区的参与,有些东西的推动还要领导出马。因此想尝试自己(目前CTO认为成本较低不值得花时间投入,因此仅作为PIP,只利用闲暇时间)去找开源实现。
图片安全检测涉及色情、性感、涉政、涉暴、违禁、价值观等等,不用考虑国情和文化的就是色情、性感,因此主攻这个方向,业界称为nsfw(not safe for work)模型。
需要考虑
- 广泛使用——most starts、most forks
- 是否活跃——讨论的人多,issuses有人回答
- 编程语言在该领域广泛使用
python在机器学习被科学家们广泛使用
- 使用的框架/基础模型比较流行,方便后面做扩展、定制化等
- 模型本身支持微调且方便
- 准确率高
- 适用范围
短期目标
- 能快速使用,并支持微调
长期目标
- 按照业务需要训练自己的模型
模型选择
在github中搜索下,nsfw+language:Python,使用Most stars排序:
使用Most forks排序:
基本可以锁定前面两个:yahoo/open_nsfw、GantMan/nsfw_model,下面看看是否能满足我们的需求:
模型名称 | 广泛使用 | 活跃 | 使用框架/基础模型 | 是否支持微调 | 准确率 | 适用范围 |
---|---|---|---|---|---|---|
yahoo/open_nsfw | 5.7 starts、1.1k forks | 在2019-10-18被存档了。 updated on 2018-11-21; issues:63 open(最近一个提交的时候为2019-09-14),34 Closed(最近一个为2019-06-23); | Caffe框架(CNN、ResNet) | 支持 | 没给出具体的 | 参考 focuses only on one type of NSFW content: pornographic images. The identification of NSFW sketches, cartoons, text, images of graphic violence, or other types of unsuitable content is not addressed with this model. |
GantMan/nsfw_model | 1.2 starts、228 forks | 在2019-04-04发布 1.0。 updated on 2020-05-16; issues 107; open 35(最近一个由我在6月初提交); closed 72(最近一个在2023-02-26) | tensortflow框架(Inception v3、mobilenet v2) | 支持 | 93%(Inception v3) 91%(mobilenet v2) | neutral、porn、sexy |
Caffe是一种深度学习框架,用于训练和部署各种类型的神经网络模型,包括:
- 卷积神经网络(CNN),是一种深度学习的前馈神经网络,广泛应用于机算计视觉领域,使用了卷积层和池化层等特殊的结构,可以自动从数据中学习到不同级别的特征表示,并在分类、检测等任务中具有出色的表现。
- 残差网络(ResNet),是一种深度卷神经网络,通过将输入信息直接添加到后续层的输出中,实现了直接跨层连接的效果,避免了深度网络训练过程中梯度消失和梯度爆炸的问题,从而实现了更深的网络结构。
- 循环神经网络(RNN)等。
yahoo/open_nsfw
使用了ResNet论文中描述的规模扩充,以避免过拟合。评估了各个体系结构,以在运行时间与准确性之间进行平衡:
- MS_CTC:在AlexNet的基础上提高了速度和准确性,保持了卷积层和全连接层的组合。
- Sequeezenet:节省了参数的数量,但是精度和AlexNet一样好,仅需要6MB内存。
- GoogLeNet:引入了初始模块并有20个卷积层阶段,还在中间层中使用悬挂损失函数来解决深度网络的梯度递减问题。
- ResNet-50:ResNets使用快捷连接来解决梯度递减的问题。
使用
- 输入图片,输出0-1分。小于0.2大概率是安全的,大于0.8大概率是不安全的。中等分数可能被划分为不同程度的NSFW级别。
- 不同应用程序对NSFW的定义以及容忍程度不一样,如果使用这个模型应该根据应用程序的需求创建一个评估集,然后拟合ROC曲线来选择一个合适的阈值。
ROC曲线是一种用于评估分类模型性能的常用工具。纵轴为真正例率,横轴为假正例率,当分类器能完美分区正例和负例时会经过左上角(0,1)的位置,因此ROC曲线越靠近左上角,分类器的性能就越好。
- 根据应用程序对NSFW的定义对模型进行微调,从而改善结果,不保证结果的准确性。
- 在边缘情况下使用人工调节与机器学习解决方案相结合将有助于提高性能。
模型使用了pynetbuilder工具生成的,有关如何生成和训练模型的更多细节,可以参考这。
GantMan/nsfw_model
选择
模型 | 优点 | 缺点 |
---|---|---|
yahoo/open_nsfw | 更广泛的使用(早三年发布) 支持微调 来源于大厂资料多点 Caffe主要使用C++编写,更加专注于CNN和计算机视觉领域 | 已经不活跃了(感觉像是yahoo的一个demo) 没有给出具体的准确率 只适用黄图的鉴定 Caffe较为老牌社区生态较小 |
GantMan/nfsw_model | 目前还在活跃(晚三年发布) 支持微调 两个模型准确率都在90%以上 支持neutral、porn、sexy的 Tensortflow主要使用Py和C++编写,社区庞大、有丰富的教程/示例/工具类,广泛适用于学术界和工业界 | 目前无法使用inception v3模型,已经提了issue |
个人比较倾向于GantMan/nfsw_model,主要原因有:
- 活跃
- 准确率高,支持neutral、porn、sexy的鉴定,能直接使用
- 使用的框架流行,方便后面参考,以后训练更加符合自己的模型