이것은 CNN 기반 이미지 검색 시스템 ISEENN 빌딩 절차에 대한 포괄적 인 문서입니다.
ISEEENN이라는 문구는 CNN과 같이 확장 될 수 있습니다.
여기에서 Mirflickr 1m 데이터 세트를 색인화하는 온라인 데모를 제공합니다. 시연 목적을위한 것이며 항상 사용할 수있는 것은 아닙니다.
시스템은 세 가지 주요 구성 요소로 구성됩니다.
시스템은 다음과 같습니다.
우리 시스템의 프레임 워크는 다음과 같이 설명 할 수 있습니다. 
이 부분에서는 시스템 설정 세부 정보를 보여 드리겠습니다.
당사 시스템은 여러 Linux 서버를 기반으로 구축됩니다. 기본적으로 ISEENN은 분산 시스템이 아니라 이미지 저장을 지원하고 여러 서버에서 가져 오는 것만으로도 있습니다.
프리미어 구현의 구성은 다음과 같습니다.
| ID | 운영 체제 | 역할 | 내부 IP | GPU | 메모리 |
|---|---|---|---|---|---|
| 1 | 우분투 14.04 x64 | 프론트 엔드 및 검색 시스템 및 몽고 서버 | 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 |
우리는 다른 서버에 대해 동일한 운영 체제에 의존하지 않는다는 것을 알 수 있습니다. 우리는 Computing Resource가 상대적으로 높기 때문에 서버 1을 주요 서버로 선택합니다. 물론 이미지 서버 역할을 할 수도 있습니다.
다음에서 우리는 먼저 서버 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데이터베이스를 초기화하기 위해 먼저 admin 및 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 "그런 다음 image_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 "여기서 나는 비밀번호를 울렸다. 추가 사용을 위해 사용자 정보를 저장해야합니다.
초기화 후 구성 파일 /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을 사용하여 웹 서비스를 개발하고 Tensorflow Python 인터페이스로 CNN 기능을 추출합니다.
이 부분에서는 웹 서비스 용 Django 모듈 및 MongoDB 백엔드로 Python을 구성합니다.
VirtualEnV를 사용하여 독립형 파이썬 런타임 환경을 만드는 것은 유감입니다.
virtualenv 설치 :
$ sudo pip install virtualenv이제 작업 공간에서 VirtualEnV 환경을 만들어 입력하십시오.
$ virtualenv --no-site-packages -p python3 image_retrieval
$ cd image_retrieval
$ source bin/activate설치 Django, 몽고 엔진, 스키 이미지 및 베개 :
$ pip install django
$ pip install mongoengine
$ pip install scikit-image
$ pip install Pillow그런 다음 웹 사이트의 지시에 따라 텐서 플로를 설정하십시오.
이제 우리는 자신의 환경에 따라 파이썬 환경을 가지고 있습니다.
$ 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),
]좋아요! 이제 서버를 lanch하십시오
./manage.py runserver 8000 그런 다음 브라우저를 열어 http://localhost:8000 찾아 테스트하십시오.
당사의 검색 엔진 백엔드는 효율성 문제를 위해 C ++로 구현됩니다. 이 백엔드를 호출하기 위해 C ++ 코드를 부스트 파이썬으로 래핑하여 파이썬 모듈로 노출됩니다.
Python 3 지원으로 Boost-Dev 및 Boost-Python-Dev를 설치하십시오.
우분투를 위해 :
$ 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 })이 프로젝트에는 세 부분이 있습니다.
ISeeNN/ , 두 개의 웹 앱 search_web/ 및 image_server/ 포함하여.Indexer/ .search_engine/ 구현 Wit C ++는 웹 인터페이스에서 파이썬 모듈로 사용될 공유 라이브러리로 컴파일됩니다.프로젝트를 실행하려면 다음 단계를 따르십시오.
ISeeNN/IseeNN/personal_settings.py.example ISeeNN/IseeNN/personal_settings.py 로 복사합니다Indexer/indexer.py 에서 MongoDB 사용자 이름 및 비밀번호를 지정하십시오.image_server 문서를 만듭니다. 예, > db.image_server.insert({server_name: ' Amax ' , server_ip: ' 192.168.104.244 ' })대상 이미지 데이터 세트를 로컬 디스크로 색인하십시오.
Indexer/indexer.py 에서 dir_name = '' , server_name='' 설정하십시오. 어쩌면 Normalizer 유형 및 모델 유형을 지정하려고합니다. 현재이 스크립트는 잘 구성되어 있지 않습니다. 우리는 미래에 개정을 할 것입니다.
cd Indexer && python indexer.py 실행합니다
검색 엔진 백엔드를 컴파일하고 설치하십시오.
$ cd search_engine && ./build.sh$ cd ISeeNN && ./manager.py runserver 0.0.0.0:8000