นี่คือเอกสารที่ครอบคลุมเกี่ยวกับระบบการดึงภาพที่ใช้ CNN ของเราขั้นตอนการสร้าง ISEENN
วลี iseenn สามารถขยายได้ตามที่ ฉันเห็น (ด้วย) CNN
เราให้บริการการสาธิตออนไลน์ที่นี่ซึ่งดัชนีชุดข้อมูล mirflickr 1m มันมีไว้เพื่อการสาธิตเท่านั้นและอาจไม่สามารถใช้ได้เสมอไป
ระบบประกอบด้วย สาม องค์ประกอบหลัก:
ระบบมีจุดเด่นใน:
กรอบของระบบของเราสามารถแสดงเป็น: 
ในส่วนนี้ฉันจะแสดงรายละเอียดการตั้งค่าระบบ
ระบบของเราถูกสร้างขึ้นบนเซิร์ฟเวอร์ Linux จำนวนหนึ่ง โดยพื้นฐานแล้ว iseenn ไม่ใช่ระบบกระจาย แต่มีเพียงการรองรับการจัดเก็บภาพและดึงข้อมูลจากหลายเซิร์ฟเวอร์
นี่คือการกำหนดค่าของการใช้งานพรีเมียร์ของเรา:
| รหัสประจำตัว | ระบบปฏิบัติการ | บทบาท | IP ภายใน | GPU | หน่วยความจำ |
|---|---|---|---|---|---|
| 1 | Ubuntu 14.04 x64 | Front End & Retrieval System & Mongo Server | 192.168.6.232 | K80 x 4 | 64 กรัม |
| 2 | เปิด suse 13.2 x64 | เซิร์ฟเวอร์รูปภาพ | 192.168.104.244 | K40 x 2 | 64 กรัม |
| 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 "จากนั้นสร้างผู้ใช้ dbowner สำหรับฐานข้อมูล Image_retrieval โดยโดย
$ 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 "ที่นี่ฉันซ่อนรหัสผ่าน อย่าลืมบันทึกข้อมูลผู้ใช้เพื่อใช้เพิ่มเติม
หลังจากการเริ่มต้นให้เริ่มเซิร์ฟเวอร์ Mongod ด้วย config file /db/mongodb.conf
# /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 ' )
1เราใช้ Python3 เพื่อพัฒนาบริการเว็บและเพื่อแยกคุณสมบัติ CNN ด้วยอินเตอร์เฟส TensorFlow Python
ในส่วนนี้เราจะกำหนดค่า Python ด้วยโมดูล 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, MongoEngine, Ski-Image และ Pillow:
$ pip install django
$ pip install mongoengine
$ pip install scikit-image
$ pip install Pillowจากนั้นตั้งค่า 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 ให้แก้ไขการตั้ง DATABASE ใน ISeeNN/settings.py เป็น:
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'
เนื่องจากการสนับสนุนที่อ่อนแอของ Django สำหรับ MongoDB เราจึงไม่ได้ใช้ส่วนประกอบผู้ดูแลระบบสำหรับรุ่นนี้ ลองแสดงความคิดเห็นรหัสที่เกี่ยวข้องใน 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 ++ ด้วย Boost Python ที่จะเปิดเผยเป็นโมดูล Python
ตรวจสอบให้แน่ใจว่าได้ติดตั้ง BOOST-DEV และ BOOST-PYTHON-DEV ด้วยการสนับสนุน Python 3
สำหรับ Ubuntu:
$ sudo apt-get install libboost-dev libboost-python-devสำหรับ OSX: (เป็นสิ่งสำคัญที่จะตั้งค่าสถานะด้านล่าง)
$ brew install boost
$ brew install boost-python --with-python3 --without-pythonสำหรับ Suse 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 ++ ซึ่งจะรวบรวมไว้ในไลบรารีที่ใช้ร่วมกันเพื่อใช้เป็นโมดูล Python ในเว็บอินเตอร์เฟสในการเรียกใช้โครงการให้ทำตามขั้นตอนเหล่านี้:
ISeeNN/IseeNN/personal_settings.py.example ถึง ISeeNN/IseeNN/personal_settings.pyIndexer/indexer.pyimage_server ในเปลือกหอยของคุณ เช่น > db.image_server.insert({server_name: ' Amax ' , server_ip: ' 192.168.104.244 ' })จัดทำดัชนีชุดข้อมูลภาพเป้าหมายของคุณในดิสก์ท้องถิ่น
ตั้ง dir_name = '' server_name='' ใน Indexer/indexer.py บางทีคุณอาจต้องการระบุประเภท Normalizer และประเภทรุ่น ขณะนี้สคริปต์นี้ยังไม่ได้รับการจัดระเบียบอย่างดี เราจะทำการแก้ไขในอนาคต
เรียกใช้ cd Indexer && python indexer.py
รวบรวมและติดตั้ง Backend Search Engine:
$ cd search_engine && ./build.sh$ cd ISeeNN && ./manager.py runserver 0.0.0.0:8000