これは、CNNベースの画像検索システムISEEENNビルディング手順に関する包括的なドキュメントです。
(with)cnnを見るように、 iseennというフレーズは拡張できます。
ここでは、Mirflickr 1Mデータセットのインデックスを作成するオンラインデモを提供しています。それはデモンストレーションの目的のためだけであり、常に利用できるとは限りません。
システムは、 3つの主成分で構成されています。
システムは次のとおりです。
システムのフレームワークは、次のように説明できます。 
この部分では、システムのセットアップの詳細を表示します。
当社のシステムは、多くのLinuxサーバーの上に構築されています。基本的に、 ISEEENNは分散システムではなく、画像ストレージと複数のサーバーからのフェッチをサポートすることでのみです。
プレミア実装の構成は次のとおりです。
| id | オペレーティング·システム | 役割 | 内部IP | GPU | メモリ |
|---|---|---|---|---|---|
| 1 | Ubuntu 14.04 x64 | フロントエンドおよび検索システム&Mongoサーバー | 192.168.6.232 | K80 x 4 | 64g |
| 2 | Suse 13.2 x64を開きます | 画像サーバー | 192.168.104.244 | K40 x 2 | 64g |
| 3 | Suse Leap 42.1 x64を開きます | 画像サーバー | 192.168.102.200 | GeForce GTX 660 Ti | 16g |
さまざまなサーバーの同じオペレーティングシステムに依存していないことがわかります。サーバー1は、比較的高いコンピューティングリソースを備えているため、主要なサーバーとして選択します。もちろん、画像サーバーとしても機能します。
以下では、最初にサーバー1の構成に焦点を当てます。
MongoDB v3.4.1をバックエンドストレージデータベースとして使用します。データベースの内容は次のとおりです。
feature_id -> image_id )image_id -> image_url )APTリポジトリはMongoDBの古いため、バイナリファイルを直接ダウンロードします。
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-3.4.1.tgz
$ tar zxvf mongodb-linux-x86_64-ubuntu1404-3.4.1.tgz
$ sudo cp mongodb-linux-x86_64-ubuntu1404-3.4.1/bin/ * /usr/local/binデータベースを初期化するために、最初に管理者とimage_retrievalデータベースの管理者ユーザーを作成します。
初期化のためにFrodenasによって書かれたスクリプトを使用します。
# first_run.sh
#! /bin/bash
USER= ${MONGODB_USERNAME :- mongo}
PASS= ${MONGODB_PASSWORD :- $(pwgen -s -1 16)}
DB= ${MONGODB_DBNAME :- admin}
DBPATH=/db/mongo # set your own db_path here
if [ ! -z " $MONGODB_DBNAME " ]
then
ROLE= ${MONGODB_ROLE :- dbOwner}
else
ROLE= ${MONGODB_ROLE :- dbAdminAnyDatabase}
fi
# Start MongoDB service
mongod --dbpath $DBPATH --nojournal &
while ! nc -vz localhost 27017 ; do sleep 1 ; done
# Create User
echo " Creating user: " $USER " ... "
mongo $DB --eval " db.createUser({ user: ' $USER ', pwd: ' $PASS ', roles: [ { role: ' $ROLE ', db: ' $DB ' } ] }); "
# Stop MongoDB service
mongod --dbpath $DBPATH --shutdown
echo " MongoDB User: " $USER " "
echo " MongoDB Password: " $PASS " "
echo " MongoDB Database: " $DB " "
echo " MongoDB Role: " $ROLE " "まず、管理データベースの管理者ユーザーを作成します。
$ ./first_run.sh
MongoDB User: " mongo "
MongoDB Password: " xxxxxxxxxxxxx "
MongoDB Database: " admin "
MongoDB Role: " dbAdminAnyDatabase "次に、 yimage_retrievalデータベースのdbownerユーザーを作成します。
$ export MONGODB_USERNAME=webclient
$ export MONGODB_DBNAME=image_retrieval
$ ./first_run.sh
MongoDB User: " webclient "
MongoDB Password: " xxxxxxxxxxxxx "
MongoDB Database: " image_retrieval "
MongoDB Role: " dbOwner "ここでパスワードをハイドしました。さらに使用するためにユーザー情報を保存することを忘れないでください。
初期化の後、config file /db/mongodb.confでmongodサーバーを起動します
# /db/mongodb.conf
dbpath=/db/mongo/
logpath=/db/mongodb.log
logappend=true
journal=true
auth = true $ mongod --config /db/mongodb.conf次に、データベースをテストします
$ mongo
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.1
> use image_retrieval
switched to db image_retrieval
> db.auth( ' webclient ' , ' xxxxxxxxxxx ' )
1Python3を使用してWebサービスを開発し、Tensorflow Pythonインターフェイスを使用してCNN機能を抽出します。
この部分では、Webサービス用のDjangoモジュールとそのMongoDBバックエンドでPythonを構成します
Virtualenvを使用してスタンドアロンのPythonランタイム環境を作成することはベニフィアルです。
virtualenvをインストール:
$ sudo pip install virtualenvワークスペースで、Virtualenv環境を作成して入力してください。
$ virtualenv --no-site-packages -p python3 image_retrieval
$ cd image_retrieval
$ source bin/activateDjango、Mongoengine、Ski-Image、枕のセットアップ:
$ pip install django
$ pip install mongoengine
$ pip install scikit-image
$ pip install Pillow次に、Webサイトの指示の下でTensorflowをセットアップします。
今、私たちは(あなた自身の環境に応じて)としてPython環境を持っています:
$ pip freeze
appdirs==1.4.0
cycler==0.10.0
dask==0.13.0
decorator==4.0.11
Django==1.10.5
matplotlib==2.0.0
mongoengine==0.11.0
networkx==1.11
numpy==1.12.0
olefile==0.44
packaging==16.8
Pillow==4.0.0
protobuf==3.2.0
pymongo==3.4.0
pyparsing==2.1.10
python-dateutil==2.6.0
pytz==2016.10
scikit-image==0.12.3
scipy==0.18.1
six==1.10.0
tensorflow-gpu==0.12.1
toolz==0.8.2そして、私たちのISEENNプロジェクトを始めましょう:
$ django-admin startproject ISeeNN
$ tree ISeeNN
ISeeNN
├── ISeeNN
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py MongoDBバックエンドで動作するには、 ISeeNN/settings.pyのDATABASE設定を次のように変更します。
import mongoengine
...
DATABASES = {
'default' : {
'ENGINE' : '' ,
}
}
_MONGODB_USER = 'webclient'
_MONGODB_PASSWD = 'xxxxxxxxxxxxxx'
_MONGODB_HOST = '192.168.6.232'
_MONGODB_NAME = 'image_retrieval'
_MONGODB_DATABASE_HOST =
'mongodb://%s:%s@%s/%s'
% ( _MONGODB_USER , _MONGODB_PASSWD , _MONGODB_HOST , _MONGODB_NAME )
mongoengine . connect ( _MONGODB_NAME , host = _MONGODB_DATABASE_HOST ) TIMEZONE = 'Asia/Shanghai'を構成します。
Mongodbに対するDjangoのサポートが弱いため、このバージョンには管理コンポーネントを使用していません。 urls.pyの関連コードにコメントしましょう
from django . conf . urls import url
# from django.contrib import admin
urlpatterns = [
# url(r'^admin/', admin.site.urls),
]わかりました!次に、サーバーをランチします
./manage.py runserver 8000次に、ブラウザを開いてhttp://localhost:8000閲覧してテストします。
私たちの検索エンジンバックエンドは、効率的な懸念のためにC ++で実装されています。このバックエンドを呼び出すために、Boost PythonでC ++コードをPythonモジュールとして公開するようにラップします。
Python 3サポート付きのBoost-DevとBoost-Python-Devを必ずインストールしてください。
ubuntuの場合:
$ sudo apt-get install libboost-dev libboost-python-devOSXの場合:(下にフラグを設定することが重要です)
$ brew install boost
$ brew install boost-python --with-python3 --without-pythonsuse linuxの場合:
$ sudo zypper in boost-devel
これらのライブラリを使用するには、これらの行をcmakelists.txtに追加します。
INCLUDE ( FindPythonLibs )
FIND_PACKAGE ( PythonInterp )
FIND_PACKAGE ( PythonLibs )
FIND_PACKAGE ( Boost COMPONENTS python3 )
INCLUDE_DIRECTORIES (${ Boost_INCLUDE_DIRS } ${ PYTHON_INCLUDE_DIRS })
LINK_LIBRARIES (${ Boost_LIBRARIES } ${ PYTHON_LIBRARIES })
PYTHON_ADD_MODULE ( your_target ${ SOURCE_FILES })このプロジェクトには3つの部分があります。
search_web/およびimage_server/を含むWebインターフェイスISeeNN/ 。Indexer/データベースに特定の画像データセットをインデックス化します。search_engine/ Wit c ++を実装します。これは、WebインターフェイスのPythonモジュールとして使用される共有ライブラリにコンパイルされます。プロジェクトを実行するには、次の手順に従ってください。
ISeeNN/IseeNN/personal_settings.py.example to ISeeNN/IseeNN/personal_settings.pyをコピーしますIndexer/indexer.pyでMongoDBユーザー名とパスワードを指定image_serverドキュメントを作成します。例えば、 > db.image_server.insert({server_name: ' Amax ' , server_ip: ' 192.168.104.244 ' })ローカルディスクでターゲット画像データセットをインデックス化します。
dir_name = '' 、 server_name='' Indexer/indexer.pyに設定します。また、ノーマイザータイプとモデルのタイプを指定したいかもしれません。現在、このスクリプトは十分に整理されていません。将来、改訂を行います。
cd Indexer && python indexer.pyを実行します
検索エンジンバックエンドをコンパイルしてインストールします。
$ cd search_engine && ./build.sh$ cd ISeeNN && ./manager.py runserver 0.0.0.0:8000