0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

开源鉴黄AI新鲜出炉:代码+预训练模型,附手把手入门教学

jmiy_worldofai 来源:YXQ 2019-04-16 16:40 次阅读

要入门机器学习,一个自己感兴趣又有丰富数据的领域再好不过了。

今天我们就来学习用Keras构建模型,识别NSFW图片,俗称造个鉴黄AI

资源来自一名印度小哥Praneeth Bedapudi,涉及图像分类和目标检测两个科目。他在GitHub上最新发布了NudeNet项目,包含代码和两个预训练模型:负责识别露不露的图像分类模型和负责找出关键部位(以便打码)的目标检测模型。

图像分类模型很简单,能区分两个类别:nude和safe,也就是露和不露,堪比经典的hotdog/not hotdog。

目标检测模型则能检测6个类别:不分性别的腹部、臀部,和区分了性别的不可描述部位。

资源链接全在文末,我们先来学习一番。

图像分类从数据集开始

构建一个图像二分类模型,需要数据集当然也要包含两类图像。所以,第一项任务就是分别搜集露的图片(nude)和不露的图片(safe)。

不安全的nude图片来自三处:

一是用RipMe从website scrolller下载,这些图片来自Reddit论坛的各种NSFW板块;

图片来源:https://scrolller.com/nsfw(打开请慎重)

下载工具:https://github.com/RipMeApp/ripme

二是P站的缩略图。引入这些缩略图是为了平衡图片质量——上边的的Reddit图片质量太高了,而一个鉴黄AI,在现实中遇到的图片大多是渣品质,这就需要分辨率很低的缩略图来平衡。

三是之前广为流传的同类数据集,来自alexkimxyz。

原数据集的5个类别,被映射到现在的两类之中。hentai和porn属于nude,而drawings、neutral和sexy属于safe。

搜集好数据之后,进行标准化和去重:

#Resizingandremovingduplicatesmogrify-geometryx320*fdupes-rdN./

最终得到的不安全图片1,78,601张P站图片、1,21,644张Reddit图片和1,30,266张前辈数据集图片。

安全的图片则有三个来源,一是alexkimxyz数据集中的普通图片;二是Facebook资料;三是Reddit论坛上那些老少皆宜的板块。

为什么已经有了现成的数据集,还需要去后两个来源抓取呢?

因为小哥发现,前辈收集的安全图片,有很多根本就不包含人。用这样的数据训练,模型很可能学到错误的特征,没学会判断“露不露”,直接变成了一个“有没有人”分类器。

最终得到的安全图片中,有68,948张来自Facebook资料、98,359张来自前辈数据集、55,137张来自Reddit。

数据收集完毕,接下来要进行数据增强。这里用的是Augmentor和Keras自带的fit_generator。

Augmentor地址:https://github.com/mdbloice/Augmentor

使用的代码如下:

#Randomrotation,flips,zoom,distortion,contrast,skewandbrightnesspipeline.rotate(probability=0.2,max_left_rotation=20,max_right_rotation=20)pipeline.flip_left_right(probability=0.4)pipeline.flip_top_bottom(probability=0.8)pipeline.zoom(probability=0.2,min_factor=1.1,max_factor=1.5)pipeline.random_distortion(probability=0.2,grid_width=4,grid_height=4,magnitude=8)pipeline.random_brightness(probability=0.2,min_factor=0.5,max_factor=3)pipeline.random_color(probability=0.2,min_factor=0.5,max_factor=3)pipeline.random_contrast(probability=0.2,min_factor=0.5,max_factor=3)pipeline.skew(probability=0.2,magnitude=0.4)

训练与评估

小哥为这个任务选择了谷歌出品的Xception模型,直接从Keras使用,输入256x256尺寸的图片,批次大小设为32。

而训练的设备,是从vast.ai租来的云服务器,带一块GTX 1080Ti显卡。

Keras提供的图像分类模型有个问题:不带正则化。所以,还要用下面的代码,为每一层加上正则化(dropout或L2)。

#Forl2forlayerinmodel.layers:layer.W_regularizer=l2(..)#OrfordropoutadddropoutbetweenthefullyconnectedlayersandredefinethemodelusingfunctionalAPI.

使用SGD with momentum训练,模型可以在alexkimxyz数据集上收敛到0.9347的准确率。

训练完成后,他选择了Towards Data Science之前构建的一个测试集来测试模型性能。

测试集:https://drive.google.com/drive/folders/18SY4oyZgTD_dh8-dc0wmsl1GvMsA7woY

测试成绩如下:

目标检测还是从数据集开始

训练目标检测模型需要的数据集,和图片分类可不一样。分类只需要图片和类别,而目标检测需要的,是用边界框标注了某样东西位置的图片。

因此,上边讲过的数据集不能用了,新科目的数据集来自Jae Jin的团队,包含5789张图片,各种标注的分布如下:

其实也就是模型能检测出的六类目标。

数据集没有公开,作者在这里:https://github.com/Kadantte

有了数据,还是要做一些图像增强工作,随机加入一些模糊、翻转。使用的工具是albumentations:

https://github.com/albu/albumentations

训练与评估

这里的检测模型,选择的是FAIR推出的RetinaNet,它使用焦点损失(交叉熵损失的一种变体)来增强一阶目标检测的性能。

检测模型的基干使用了ResNet-101,在测试集上的成绩如下:

除了用来指出某个部位究竟出现在了图中什么位置之外,这个模型其实还可以当成分类器来用:

如果在图中检测到了BUTTOCKS_EXPOSED、*_GENETALIA_EXPOSED、F_BREAST_EXPOSED这四类,就可以判定图片NSFW,如果没有,这张图就是安全的。

所以,也可以用分类器的测试集来检测这个模型的性能。

得到的成绩,比纯粹的分类器好不少:

当然,目标检测更适合实现的功能,是打码。比如说见到一张NSFW图片,它就可以根据检测到的关键部位,自动遮挡:

预训练模型怎么用?

如果你想先用预训练模型看看效果,可以按照下面的安装指南来:

安装:

pipinstallnudenetorpipinstallgit+https://github.com/bedapudi6788/NudeNet

使用分类器:

fromnudenetimportNudeClassifier

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    26363

    浏览量

    263955
  • 开源
    +关注

    关注

    3

    文章

    2982

    浏览量

    41694

原文标题:开源鉴黄AI新鲜出炉:代码+预训练模型,还附手把手入门教

文章出处:【微信号:worldofai,微信公众号:worldofai】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    手把手教你学单片机之AVR入门视频教程

    `手把手教你学单片机之AVR入门视频教程AVR单片机软硬件设计视频教程-入门篇本视频是 力天电子 尹延辉 录制的 详情请登 力天电子第01讲-单片机及其开发工具简介_手把手教你学单片机
    发表于 03-02 11:04

    力天手把手教你学ARM入门代码

    力天手把手教你学ARM入门代码
    发表于 08-12 20:26

    【原创】小草手把手教你LabVIEW视频系列汇总帖(12.22更新)

    为了让大家更好的查找小草手把手教你LabVIEW视频教学系列,小编特为大家汇总如下:【视频教学】小草手把手LabVIEW编程—LED滚动屏【视频教学
    发表于 12-08 10:10

    手把手教你设计人工智能芯片及系统--(全阶设计教程+AI芯片FPGA实现+开发板)

    核心RTL代码、工具链代码、测试代码等;手把手教学手把手
    发表于 07-19 11:54

    手把手教你SIMULINK代码生成

    FrancisZhao:专栏文章列表以及一些说明​zhuanlan.zhihu.comFrancisZhao:手把手教你代码生成(下):SIMULINK代码生成​zhuanlan.zhihu.com
    发表于 08-18 06:03

    手把手教你构建一个完整的工程

    手把手教你构建一个完整的工程
    发表于 08-03 09:54 33次下载
    <b class='flag-5'>手把手</b>教你构建一个完整的工程

    手把手教你组磁盘阵列5

    手把手教你组磁盘阵列5 始接触到这种提升速同时也能确保数据安全性的良好的解决方案。 RAID 5 模式的入门知识   RAID 5 是一种存储
    发表于 03-29 10:27 1122次阅读

    手把手教您做光立方

    电子发烧友网站提供《手把手教您做光立方.doc》资料免费下载
    发表于 03-21 14:07 0次下载

    手把手教你学DSP28335_张卿杰

    手把手教你学DSP28335张卿杰百度云分享手把手教你学DSP28335张卿杰百度云分享
    发表于 01-11 11:45 173次下载

    DSP开发软件及工具介绍--力天手把手教你学DSP之入门

    DSP开发软件及工具介绍--力天手把手教你学DSP之入门
    发表于 10-20 14:50 18次下载
    DSP开发软件及工具介绍--力天<b class='flag-5'>手把手</b>教你学DSP之<b class='flag-5'>入门</b>篇

    手把手教学Ansoft-Maxwell-工程仿真实例

    手把手教学Ansoft-Maxwell-工程仿真实例
    发表于 01-18 16:06 33次下载

    手把手教你如何开始DSP编程

    手把手教你如何开始DSP编程。
    发表于 04-09 11:54 12次下载
    <b class='flag-5'>手把手</b>教你如何开始DSP编程

    手把手教你学LabVIEW视觉设计

    手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手教你学LabVIEW视觉设计手把手
    发表于 03-06 01:41 2757次阅读

    51单片机手把手教学(二)—— 点亮 LED 灯(GPIO 操作)

    对话框进入专栏主页↓↓↓CSDN 请求进入专栏       _ O x是否进入《51单片机手把手教学》?       确定文章目录一、51单片机的GPIO口简介二、GPIO 操作 —— 点亮第一个LED灯三、GPIO 控制1、使用代码
    发表于 11-17 16:06 8次下载
    51单片机<b class='flag-5'>手把手</b><b class='flag-5'>教学</b>(二)—— 点亮 LED 灯(GPIO 操作)

    51单片机手把手教学 (一)—— 开发环境搭建

    51单片机手把手教学 (一)—— 点亮第一个LED灯文章目录51单片机手把手教学 (一)—— 点亮第一个LED灯一、写在前面二、下载开发工具,烧录工具一、写在前面51单片机一般指传统8
    发表于 11-23 16:20 8次下载
    51单片机<b class='flag-5'>手把手</b><b class='flag-5'>教学</b> (一)—— 开发环境搭建