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

机器之心报道,机器之心编辑部。linux

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

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

项目地址:github.com/alexkimxyz/…bash

这 20 万多张图像大概分为如下 5 个类别,它们能够用 CNN 训练不一样的分类器。这里咱们就保留 GitHub 中的原描述了:网络

其中每个类别都是一个 Text 文本,文本中的每一行都对应一个 URL,因此读取并下载都很是方便,本身写也就几行代码。以下简单展现了 sexy 类别下文本与图像:app

此外值得注意的是,有少许图像 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 下编辑文件,不然无需从新运行。ui

  • 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 作一些新奇的模型,类别都是颇有区分度的特征。

最后,各位请怀着敬畏之心严肃使用,且仅供研究使用(不要举报)……

相关文章
相关标签/搜索