如果你想训练一个内容审核系统过滤不合适的信息,或用 GAN 做一些大胆的新想法,那么数据集是必不可少的。例如图像鉴黄,我们需要使用卷积神经网络训练一个分类器,以区分正常图像与限制级图像。但限制级的图像很难收集,也很少会开源。因此最近有开发者在 GitHub 上开源了一份 NSFW 图像数据集,这是不是你们想要的?

内容审核在很多领域都有非常重要的作用,它不仅需要通过分类器识别图像或其它数据不适合展示,同时还能结合语义分割模型对这些限制级图像进行处理(Mask 掉敏感部分)。这样在不过多影响内容的情况下去除掉不合适的信息。开发者 alexkimxyz 构建的这个项目大概收集了 20 多万张敏感图像,且通过 URL 的形式展示了 GitHub 中。

项目地址:https://github.com/alexkimxyz/nsfw_data_scrapper

这 20 万多张图像大概分为以下 5 个类别,它们可以用 CNN 训练不同的分类器。这里我们就保留 GitHub 中的原描述了:

其中每一个类别都是一个 Text 文本,文本中的每一行都对应一个 URL,所以读取并下载都非常方便,自己写也就几行代码。如下简单展示了 sexy 类别下文本与图像:

此外值得注意的是,有少量图像 URL 是失效的,因此在处理的过程中需要把这些情况考虑进去。一般如果 URL 是失效的,它会返回一张 161×81 的声明图像。

当然,作者同样提供了获取 URL 和下载图像的脚本,我们只需要运行就行了。目前,这些脚本仅在 Ubuntu 16.04 Linux 发行版本中进行了测试。

以下是重要脚本(位于 scripts 目录下)及它们的作用:

  • 1_get_urls.sh:遍历 scripts / source_urls 下的文本文件,下载上述 5 个类别中每个类别的图像 URL。Ripme 应用程序执行所有关键部分。源 URL 主要是链接到各种 subreddits,但可以是 Ripme 支持的任何网站。注意:作者已经运行了此脚本,其输出位于 raw_data 目录中。除非在 scripts / source_urls 下编辑文件,否则无需重新运行。
  • 2_download_from_urls.sh:下载 raw_data 目录中的文本文件中找到的 URL 的实际图像。
  • 5_create_train.sh:创建 data/train 目录并从 raw_data 将所有* .jpg 和* .jpeg 文件复制到其中。并删除损坏的图像。
  • 6_create_test.sh:创建 data/test 目录,并从 data / trainto 为每个类随机移动 N = 2000 个文件(如果需要不同的训练/测试分割,则在脚本内更改此数字)到 data / test。或者,可以多次运行它,每次它将从 data/train 到 data/test 将每个类别移动 N 个图像。

注意运行 get_urls.sh 后,生成的 URL 文本文件会覆盖 raw_data 下已有的文本文件。所以在复制 GitHub 项目后,我们也可以直接运行 2_download_from_urls.sh 从已有 raw_data 文件下载图像。

环境配置

  • Python3 环境:conda env create -f environment.yml
  • Java 运行时环境(Ubuntu linux):sudo apt-get install default-jre
  • Linux 命令行工具:wget, convert (imagemagick 工具套件), rsync, shuf

怎么运行

将工作目录转到 scripts,并按文件名中的数字指示的顺序执行每个脚本,例如:

$ bash 1_get_urls.sh # has already been run
$ find ../raw_data -name "urls_*.txt" -exec sh -c "echo Number of urls in {}: ; cat {} | wc -l" ;
Number of urls in ../raw_data/drawings/urls_drawings.txt:25732
Number of urls in ../raw_data/hentai/urls_hentai.txt:45228
Number of urls in ../raw_data/neutral/urls_neutral.txt:20960
Number of urls in ../raw_data/sexy/urls_sexy.txt:19554
Number of urls in ../raw_data/porn/urls_porn.txt:116521
$ bash 2_download_from_urls.sh
$ bash 3_optional_download_drawings.sh # optional
$ bash 4_optional_download_neutral.sh # optional
$ bash 5_create_train.sh
$ bash 6_create_test.sh
$ cd ../data
$ ls train
drawings hentai neutral porn sexy
$ ls test
drawings hentai neutral porn sexy

如上所示为脚本的执行方法,五类一共 227995 张敏感图像。这个脚本同样会把它们分割为训练集与测试集,因此直接利用它们实现 5 类别的分类任务会很简单。当然如果我们需要用于其它的任务,就没有必要直接分割了。

使用简单的卷积神经网络直接实现分类任务可以达到 91% 的准确率,这已经非常高了,因为敏感数据手动分为 5 类本来就有一些模糊性存在。以下展示了在测试集上,5 分类任务的混淆矩阵:

其中对角线表示正确预测的样本数,其它为误分类样本数。这个分类任务至少说明了 5 类别是有区分度的,不论我们用于正常内容与敏感内容的二分类,还是使用 GAN 做一些新奇的模型,类别都是很有区分度的特征。

c语言 将url图片存到本地_一个22万张NSFW图片的鉴黄数据集?我有个大胆的想法……...相关推荐

  1. 一个22万张NSFW图片的鉴黄数据集?我有个大胆的想法……

    机器之心报道,机器之心编辑部. 如果你想训练一个内容审核系统过滤不合适的信息,或用 GAN 做一些大胆的新想法,那么数据集是必不可少的.例如图像鉴黄,我们需要使用卷积神经网络训练一个分类器,以区分正常 ...

  2. c语言 将url图片存到本地_计算机网络系列之浏览器对URL处理,小白看完吊打面试官...

    从这篇开始,就开始了计算机网络的学习,从面试时最常见的一道面试题开始,"在浏览器输入一个网址之后发生了什么?" 一.序言 1.1什么是互联网 说到计算机网络,先来认识一下天天说的互 ...

  3. c语言 将url图片存到本地_python爬虫:爬取男生喜欢的图片

    任务目标: 1.抓取不同类型的图片 2.编写一个GUI界面爬虫程序,打包成exe重新文件 3.遇到的难点 1.分析如何抓取不同类型的图片 首先打开网站,可以看到有如下6个类型的菜单 在这里插入图片描述 ...

  4. outlook邮件存到本地_如何在Microsoft Outlook中将电子邮件(和其他项目)另存为文件

    outlook邮件存到本地 You can save your Outlook emails, contacts, and appointments as individual files. Savi ...

  5. 判断两个图片的特征向量_响应式布局提高篇 图片正确的打开方式

    作者 | Brilliant Open Web团队 编辑 | Aaron 本文承接上一章的内容,接着介绍响应式布局设计,主要讲如何实现响应式图片.通过对图片适配问题的说明,加深对响应式图片的理解,并分 ...

  6. python图片水印软件_使用Python编写批量添加图片水印程序:一、代码方案

    一.为什么要为图片添加水印 在互联网写文章最头疼的一件事情就是发表的文章容易被抄袭,各种抄袭的手段真的是层出不穷.无奈,只能在不影响阅读体验的情况下不断地提高反抄袭的难度.虽然防不住,但是为文章中的图 ...

  7. android 图片放大缩小_几款堪称神器的图片无损放大缩小工具!

    Bigjpg Bigjpg是一款非常强大的能放大图片并使其不失真的工具. 一般来说,图片在经过PS或PhotoZoom放大之后,都会出现一定程度的损害和模糊,而Bigjpg可以让放大的图片无损. Bi ...

  8. picturectrl控件中加载图片并显示_在 CRA 中使用 webp 图片提升加载性能

    webp 是 google 提倡的一种新的 image 格式,意在为 web 提供体积更小的图片格式.通常情况下,无损压缩可以减小 25%-35% 的体积(有例外情况,反而会增大体积,但是是因为转换图 ...

  9. JAVA MYSQL从数据库中提取图片_java web将图片存到储数据库和从数据库中读取图片...

    (Notice:以下所有经验也是我根据网上的经验整理的,如有侵权可以联系我删除,Wx:IT_Ezra,QQ 654303408. 有问题讨论也可联系我,QQ同上.) 一.分析一下基本流程 从前台页面获 ...

最新文章

  1. 【译】理解Javascript函数执行—调用栈、事件循环、任务等
  2. OVS datapath包处理流程(二十)
  3. Linux查看utmp文件,linuxc操作utmp和wtmp文件接口
  4. vmdk文件怎么安装到虚拟机_【技术分享】虚拟机镜像解析
  5. Vue.config.productionTip = false
  6. Android DDMS如何使用?
  7. chart控件做实时曲线显示_Python 如何实时绘制数据
  8. C++之new和delete探究
  9. grassfire算法
  10. Flink SQL 系列 | 5 个 TableEnvironment 我该用哪个?
  11. 设置GRUB菜单密码
  12. matlab数据的获取、预处理、统计、可视化、降维 | 《matlab数学建模方法与实践(第三版)》学习笔记
  13. 瀑布模型,快速原型模型,增量模型,螺旋模型以及敏捷开发模型的相关概念
  14. 石家庄地铁路线安排网站的设计
  15. word图片被文字覆盖一部分的解决方法
  16. 微信小程序下载图片到本地
  17. android-gpuimage-plus
  18. Unity DOTween Yoyo循环运动
  19. jre8 64位官网安装版下载
  20. Android 媒体 IV-支持的媒体格式

热门文章

  1. 织梦手机网站建设 并配置二级域名
  2. 实验六 快速生成树配置
  3. @ResponseBody
  4. 深入浅出 CPropertySheet
  5. 用iptables做IP的静态映射
  6. 谷歌正式推出官方“Android界面设计”网站
  7. 如何在PowerBuilder 11.x 中通过ADO.NET访问Sybase ASE?
  8. Cloud Foundry平台中国唯一云供应商,阿里云持续链接Cloud Foundry/Kubernetes生态
  9. WPF ComboBox_SelectionChange事件中获取当前文本的方法
  10. 使用@Controller注解为什么要配置mvc:annotation-driven /