画像収集基盤の構築ログ8
目的
人の代わりに画像を集めてくれるシステムを構築すること。なあ、個人的な趣味でイラスト画像を対象としている。
進捗
- Jubatusの近似近傍探索を試した
- illustration2vecを使って1000次元弱の特徴量をJubatusに登録した
- 登録データから類似画像を検索する事に成功した
類似画像検索について
illustration2vecはイラストのタグ(一人の女性、猫耳、青い髪など)を学習・推論する手法です。1000個のタグを学習していれば、最終的な出力は1000次元ベクトルとなります。Jubatusにはこのデータを登録しています。つまり、illustration2vecを特徴量抽出として利用しているわけですが、タグというイラストのメタ情報を予測する性質があります。描かれているそのものを対象とした類似画像検索よりも、抽象度の高い検索をかけることが可能です。似ている画像を探すのではなく似たような画像を探すような、探索的検索に力を発揮しそうです。
Jubatusでは、画像データを渡すとORB特徴量を取り出す機能があります。ORB特徴量は画像特徴量の一種で、画像の拡大・縮小・回転・トリミング・ノイズに対して頑健な特徴量です。パテントフリーなので安心して使えます。illustration2vecとORBそれぞれでJubatusの近傍探索を試してみたいと思います。それぞれ違う用途として使えそうで楽しみです。
画像収集基盤の構築ログ7
目的
目的は、人間の代わりに画像を集めてきてくれるシステムを構築することです。個人的な趣味からイラスト画像を対象としています。
進捗
- スクレイピングを試せるような管理画面を作成
- これまでのCLIをウェブアプリ化
- プレビュー(Dry Run)機能を追加
- CSSフレームワークの選定
- リファクタリング
- 推薦システムに関する論文を読んだ
余談
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で起動するようにした
興味深い記事
画像処理において、学習したい画像かどうかをスクリーニングすることは膨大なコストがかかるので、この作業自体を自動化したい
人と機械学習のちょうど良い住み分けだと思います。この方のブログは、いつも面白いです。
参考資料
- Compose file version 3 reference - Docker Documentation
- データ分析環境の構築にDockerを利用しよう - Qiita
- minioを使ってS3の環境をローカルで再現する - notebook
- docker-composeを使うと複数コンテナの管理が便利に - Qiita
- Docker の Data Volume まわりを整理する - Qiita
- Alpine Linux で Docker イメージを劇的に小さくする - Qiita
- 効率的に安全な Dockerfile を作るには - Qiita
- GitHub - minio/minio: Minio is an open source object storage server compatible with Amazon S3 APIs
- [Minio] Minio導入手順(Ubuntu 16.04) - Life with IT
画像収集基盤の構築ログ5
目的は、人間の代わりに画像を集めてきてくれるシステムを構築することです。個人的な趣味からイラスト画像を対象としています。
広告配信システムを構築し、十数年間運用してきた人と話す機会がありました。その人が構築したシステムは細かい変更こそされど、アーキテクチャを変えずに運用しているそうです。その堅牢でハイパフォーマンス、そして何よりも柔軟なシステムに強い感銘を受けました。
現在の構築中の画像収集基盤は、かなりポータビリティが低く、別の環境で再構築しようとするとかなり時間がかかる見込みです。最近、簡単なウェブアプリを通じて、Dockerを触る機会があったので少し勉強をしています。
画像収集基盤の構成要素
各サーバーは試験的に立ち上げたものを含めると、それなりに数があります。これまで少しずつ増やしていきましたが、再度構築するには骨が折れる数です。特にインストール手順が複雑なライブラリがいくつかあるので、再現すらできないかもしれないです。
Dockerの基本的な操作についてはわかるようになったので、これらの構成をコンテナに分けようかな。
- データベースサーバー
- 自動タグ付けサーバー
- 自動クロップサーバー
- 特徴抽出サーバー
- 管理サーバー
- コンテンツ推薦サーバー
- 行動ログ集約サーバー
- スクレイピングサーバー
- データ収集バッチサーバー
- プロキシサーバー
- クローラーサーバー(未定)
- オブジェクティブストレージ(未定)
参考資料
画像収集基盤の構築ログ4
目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。
進捗
- illustration2vecのタグ学習済みモデルの全結合層から特徴ベクトルを抽出
- 自動クロッピングのAPIを作成
- DBへ挿入
- システムが煩雑化してきたのでDockerを検討
- 画像のランク付けのために、k-top selectionを検討
- 画像ストレージをセットアップ
- グラフDBを調査
- Image Influence APIを調査
作業記録
Jubatusのレコメンダーか近似最近傍探索を利用するため、画像特徴量が必要になった。 illustration2vec
に extract_feature
という関数が用意されていたが、配布しているモデルのレイヤー名が変わったせいで、動作しなかった。直したものをPull Requestする予定。 http://illustration2vec.net/models/illust2vec_tag.prototxt
によれば全結合層は conv6_4
のようだった。
参考資料
- [Python] numpy.ndarrayを普通の配列(list)にする
- Python: Converting Epoch time into the datetime - Stack Overflow
- API | Tumblr
- GitHub - cayleygraph/cayley: An open-source graph database
- Demo of Cayley - Graph Database written in Go - YouTube
- Image Influence API|PRODUCT|A3RT
- MySQL :: MySQL 5.7 Reference Manual :: 11.1.9.8 Converting Between 3-Byte and 4-Byte Unicode Character Sets
画像収集基盤の構築ログ3
目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。
まだ良いコードネームは思いつかない。
進捗
- 自動で画像収集を行い始めた
- エラーに対応できるようにスクリプトを改良
- RedisとSidekiqを使ったジョブキューの導入の検討
- 参考資料を漁った
- 国内でクローラーと言えば、VASILY。ブログ記事を読み漁った。
- 画像変換サーバーへの依存をRMagickへの依存へ変更。ネットワークを介さなくした。
- スマートクロップの改良の検討
- AnimeFaceのカスケーディングを使って顔認識してみたが思ったように検出できなかったため断念
- 画像収集用のストレージを購入する
- ユーザが気軽に画像分類するにはどうするか考えた(検討段階)
雑記
タスク管理が困難になってきたので、todoistのCLIクライアントを使って管理しようと思う。
おすすめリンク
VASILYのブログはいつも参考になる。クローラーや画像処理まさに僕がやりたいことが揃っている。