Yahoo Open NSFWを利用してみた

「Yahoo Open NSFW」はポルノ画像を不適切な画像としてディープラーニングにより学習させたモデルです。NSFWは、Caffeというディープラーニングで使えるモデルと、設定ファイル、Pythonコードがセットになっています。ここでは「Yahoo Open NSFW」について解説していきます。

01: 環境

  • Windows 7 Professional
  • Vagrant: Ubuntu 14.04.5 LTS

02: インストール

Ubuntu14.04

bash


# 作業ディレクトリを作成
$ mkdir Ubuntu & cd Ubuntu
$ mkdir 14.04 & cd 14.04

# Ubuntu14.04をboxに追加
$ vagrant box add Ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

# Vagrantfileの作成
$ vagrant init Ubuntu14.04

Vagrantfile


  # ポートフォワーディング
  config.vm.network "forwarded_port", guest: 22, host: 2002, id: "ssh"

  # 共有フォルダー
  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  config.vm.synced_folder "./shared", "/home/vagrant/shared", owner: "vagrant", group: "vagrant"

  # メモリーの割り当て
  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  # Customize the amount of memory on the VM:
  vb.memory = "2048"
  end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

Docker

bash


# Vagrant起動
$ vagrant up

# SSH接続
$ ssh -l vagrant -p 2002 192.168.11.4

# rootでログイン
$ sudo su

# rootでログイン
root>  curl -fsSL https://get.docker.com/ | sh

# vagrantをdockerグループに追加
root>  gpasswd -a vagrant docker

# Dockerのバージョンを確認
root>  docker -v

# rootからログアウト
root>  exit

# vagrantからログアウト
$ exit

Caffe

bash


# 再度、SSH接続
$ ssh -l vagrant -p 2002 192.168.11.4

# Caffeのインストール
$ docker run -i -t -v ~/shared:/workspace/shared:ro bvlc/caffe:cpu /bin/bash

# Dockerのコンテナリストを表示 
$ docker images

# Dockerのイメージリストを表示 
$ docker ps -a

# コンテナの起動と同時にアタッチ
$ docker start -i <イメージ名>

# 「Yahoo Open NSFW」のダウンロード
root> git clone https://github.com/yahoo/open_nsfw.git

# 不適切な画像を判定
# 0.0-1.0の間の値を取る。
# 1.0に近いほど不適切な画像になる。
# 0.2以下で安全な可能性が高く、0.8以上で不適切な画像である可能性が高い。
root> cd open_nsfw
root> python ./classify_nsfw.py --model_def nsfw_model/deploy.prototxt --pretrained_model nsfw_model/resnet_50_1by2_nsfw.caffemodel ../shared/image.jpg

03: 動作テスト

下記の画像を入力画像としてテストした結果、「NSFW score: 0.17887686193」と出力され、不適切ではないと判定された。逆に意図的に不適切な画像を読み込ませた場合、「NSFW score: 0.99992287159」と出力され意図した結果通り不適切であると判定された。