TAMALOG

プログラミングがあれば遠いところへ行けます。プログラムと人の共生を記録します。

画像収集基盤の構築ログ8

目的

人の代わりに画像を集めてくれるシステムを構築すること。なあ、個人的な趣味でイラスト画像を対象としている。

tamanobi.hatenablog.com

進捗

  • Jubatusの近似近傍探索を試した
    • illustration2vecを使って1000次元弱の特徴量をJubatusに登録した
    • 登録データから類似画像を検索する事に成功した

類似画像検索について

illustration2vecはイラストのタグ(一人の女性、猫耳、青い髪など)を学習・推論する手法です。1000個のタグを学習していれば、最終的な出力は1000次元ベクトルとなります。Jubatusにはこのデータを登録しています。つまり、illustration2vecを特徴量抽出として利用しているわけですが、タグというイラストのメタ情報を予測する性質があります。描かれているそのものを対象とした類似画像検索よりも、抽象度の高い検索をかけることが可能です。似ている画像を探すのではなく似たような画像を探すような、探索的検索に力を発揮しそうです。

Jubatusでは、画像データを渡すとORB特徴量を取り出す機能があります。ORB特徴量は画像特徴量の一種で、画像の拡大・縮小・回転・トリミング・ノイズに対して頑健な特徴量です。パテントフリーなので安心して使えます。illustration2vecとORBそれぞれでJubatusの近傍探索を試してみたいと思います。それぞれ違う用途として使えそうで楽しみです。

画像収集基盤の構築ログ7

目的

目的は、人間の代わりに画像を集めてきてくれるシステムを構築することです。個人的な趣味からイラスト画像を対象としています。

tamanobi.hatenablog.com

進捗

  • スクレイピングを試せるような管理画面を作成
    • これまでのCLIをウェブアプリ化
    • プレビュー(Dry Run)機能を追加
    • CSSフレームワークの選定
    • リファクタリング
  • 推薦システムに関する論文を読んだ

f:id:tamanobi:20170504212532p:plain

余談

SAOをやっと視聴しましたが、夢のある話でとても良いですね。アニメーションの話つながりで思い出しましたが、「東のエデン」という作品で「東のエデンシステム」というシステムが登場します。カメラをかざすだけでそこに写っている物体が何かわかるそういうシステムです。最近の機械学習界隈でそのシステムの実現が現実味を帯びてきています。あのシステムの存在は僕にとって大きな衝撃を与えてくれたのでかなりワクワクしています。

参考資料

Alpine LinuxのRoswell環境をDockerで作った

複数のmacOSでLispプログラムを書くとき、環境を用意することが面倒なので、RoswellのDockerをAlpine Linuxベースで作成しました。デプロイ時にもコンテナがあれば便利ですね!

https://hub.docker.com/r/tamanobi/alpine-roswell/

今度はこのコンテナを使ってHerokuにLispウェブアプリをデプロイする予定です。

画像収集基盤の構築ログ6

目的

目的は、人間の代わりに画像を集めてきてくれるシステムを構築することです。個人的な趣味からイラスト画像を対象としています。

進捗

  • 画像ストレージを用意するにあたってオブジェクトストレージを用意した
    • RiakCSかCephを利用しようとしたが、ローカルホストだけで動作できるminioを利用した
  • オーケストレーションが困難になってきたため、Dockerの調査を行った
    • 新規導入したオブジェクトストレージ(minio)と画像変換(thumbor)だけDockerで起動するようにした

興味深い記事

画像処理において、学習したい画像かどうかをスクリーニングすることは膨大なコストがかかるので、この作業自体を自動化したい

人と機械学習のちょうど良い住み分けだと思います。この方のブログは、いつも面白いです。

参考資料

画像収集基盤の構築ログ5

目的は、人間の代わりに画像を集めてきてくれるシステムを構築することです。個人的な趣味からイラスト画像を対象としています。

tamanobi.hatenablog.com

広告配信システムを構築し、十数年間運用してきた人と話す機会がありました。その人が構築したシステムは細かい変更こそされど、アーキテクチャを変えずに運用しているそうです。その堅牢でハイパフォーマンス、そして何よりも柔軟なシステムに強い感銘を受けました。

現在の構築中の画像収集基盤は、かなりポータビリティが低く、別の環境で再構築しようとするとかなり時間がかかる見込みです。最近、簡単なウェブアプリを通じて、Dockerを触る機会があったので少し勉強をしています。

画像収集基盤の構成要素

各サーバーは試験的に立ち上げたものを含めると、それなりに数があります。これまで少しずつ増やしていきましたが、再度構築するには骨が折れる数です。特にインストール手順が複雑なライブラリがいくつかあるので、再現すらできないかもしれないです。

Dockerの基本的な操作についてはわかるようになったので、これらの構成をコンテナに分けようかな。

  • データベースサーバー
  • 自動タグ付けサーバー
  • 自動クロップサーバー
  • 特徴抽出サーバー
  • 管理サーバー
  • コンテンツ推薦サーバー
  • 行動ログ集約サーバー
  • スクレイピングサーバー
  • データ収集バッチサーバー
  • プロキシサーバー
  • クローラーサーバー(未定)
  • オブジェクティブストレージ(未定)

参考資料

画像収集基盤の構築ログ4

目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。

tamanobi.hatenablog.com

進捗

  • illustration2vecのタグ学習済みモデルの全結合層から特徴ベクトルを抽出
  • 自動クロッピングAPIを作成
  • DBへ挿入
    • Tumblr APIを用いてLike済み画像をDBへ挿入
    • これまでに収集した出処の分かる画像をDBへ挿入
  • システムが煩雑化してきたのでDockerを検討
  • 画像のランク付けのために、k-top selectionを検討
  • 画像ストレージをセットアップ
  • グラフDBを調査
  • Image Influence APIを調査

作業記録

Jubatusのレコメンダーか近似最近傍探索を利用するため、画像特徴量が必要になった。 illustration2vecextract_feature という関数が用意されていたが、配布しているモデルのレイヤー名が変わったせいで、動作しなかった。直したものをPull Requestする予定。 http://illustration2vec.net/models/illust2vec_tag.prototxt によれば全結合層は conv6_4 のようだった。

参考資料

画像収集基盤の構築ログ3

目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。

tamanobi.hatenablog.com

まだ良いコードネームは思いつかない。

進捗

  • 自動で画像収集を行い始めた
    • エラーに対応できるようにスクリプトを改良
    • RedisとSidekiqを使ったジョブキューの導入の検討
  • 参考資料を漁った
    • 国内でクローラーと言えば、VASILY。ブログ記事を読み漁った。
  • 画像変換サーバーへの依存をRMagickへの依存へ変更。ネットワークを介さなくした。
  • スマートクロップの改良の検討
    • AnimeFaceのカスケーディングを使って顔認識してみたが思ったように検出できなかったため断念
  • 画像収集用のストレージを購入する
  • ユーザが気軽に画像分類するにはどうするか考えた(検討段階)
    • ランダムサンプリングによる二者択一の比較
      • エンターテイメント性皆無(ニコニコ静画のように「どっちがけしからん」くらいやらないとおもしろくない)
    • いくつか表示した画像を、ドラッグ&ドロップによって配置する
      • ユーザが独自の価値観で距離を定める。うまくクラスタリングできる可能性は低いが直感的。
    • 選択された画像の横に並ぶ画像に対しても評価を勝手に行う
      • サムネイル画像が並んでいる中で一つの画像が選ばれたときに、周辺にある画像は相対的に関心が低いはず。それを評価として反映させたらどうか。

雑記

タスク管理が困難になってきたので、todoistのCLIクライアントを使って管理しようと思う。

qiita.com

おすすめリンク

VASILYのブログはいつも参考になる。クローラーや画像処理まさに僕がやりたいことが揃っている。

tech.vasily.jp