-
Notifications
You must be signed in to change notification settings - Fork 236
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from Cloud-CV/basicDragAndDrop
Basic drag and drop
- Loading branch information
Showing
97 changed files
with
52,697 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{ "presets": [ "es2015","react" ] } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# editorconfig.org | ||
root = true | ||
|
||
[*] | ||
indent_style = space | ||
indent_size = 4 | ||
end_of_line = lf | ||
charset = utf-8 | ||
trim_trailing_whitespace = true | ||
insert_final_newline = true | ||
|
||
[*.md] | ||
trim_trailing_whitespace = false |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
module.exports = { | ||
"extends": "airbnb", | ||
"plugins": [ | ||
"react" | ||
], | ||
"globals": { | ||
"instance": true, | ||
"addLayerEndpoints": true, | ||
"jsPlumb": false, | ||
"$": false | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -60,3 +60,5 @@ target/ | |
|
||
#Ipython Notebook | ||
.ipynb_checkpoints | ||
|
||
node_modules/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,5 @@ | ||
# CloudCV-IDE | ||
# CloudCV-IDE | ||
###Build Instructions | ||
1. pip install -r requirements.txt | ||
2. npm install | ||
3. python manage.py runserver |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
""" | ||
Django settings for cloudcv project. | ||
Generated by 'django-admin startproject' using Django 1.9.3. | ||
For more information on this file, see | ||
https://docs.djangoproject.com/en/1.9/topics/settings/ | ||
For the full list of settings and their values, see | ||
https://docs.djangoproject.com/en/1.9/ref/settings/ | ||
""" | ||
|
||
import os | ||
|
||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) | ||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | ||
|
||
|
||
# Quick-start development settings - unsuitable for production | ||
# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ | ||
|
||
# SECURITY WARNING: keep the secret key used in production secret! | ||
SECRET_KEY = '8b@xzv$6#x_%geu3x)5yl(!^0rw_dl%!ks=pch!zb=zm5mg*s+' | ||
|
||
# SECURITY WARNING: don't run with debug turned on in production! | ||
DEBUG = True | ||
|
||
ALLOWED_HOSTS = ['*'] | ||
|
||
|
||
# Application definition | ||
|
||
INSTALLED_APPS = [ | ||
'cloudcvIde.apps.CloudcvideConfig', | ||
'django.contrib.admin', | ||
'django.contrib.auth', | ||
'django.contrib.contenttypes', | ||
'django.contrib.sessions', | ||
'django.contrib.messages', | ||
'django.contrib.staticfiles', | ||
] | ||
|
||
MIDDLEWARE_CLASSES = [ | ||
'django.middleware.security.SecurityMiddleware', | ||
'django.contrib.sessions.middleware.SessionMiddleware', | ||
'django.middleware.common.CommonMiddleware', | ||
'django.middleware.csrf.CsrfViewMiddleware', | ||
'django.contrib.auth.middleware.AuthenticationMiddleware', | ||
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', | ||
'django.contrib.messages.middleware.MessageMiddleware', | ||
'django.middleware.clickjacking.XFrameOptionsMiddleware', | ||
] | ||
|
||
ROOT_URLCONF = 'cloudcv.urls' | ||
|
||
TEMPLATES = [ | ||
{ | ||
'BACKEND': 'django.template.backends.django.DjangoTemplates', | ||
'DIRS': [], | ||
'APP_DIRS': True, | ||
'OPTIONS': { | ||
'context_processors': [ | ||
'django.template.context_processors.debug', | ||
'django.template.context_processors.request', | ||
'django.contrib.auth.context_processors.auth', | ||
'django.contrib.messages.context_processors.messages', | ||
], | ||
}, | ||
}, | ||
] | ||
|
||
WSGI_APPLICATION = 'cloudcv.wsgi.application' | ||
|
||
|
||
# Database | ||
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases | ||
|
||
DATABASES = { | ||
'default': { | ||
'ENGINE': 'django.db.backends.sqlite3', | ||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), | ||
} | ||
} | ||
|
||
|
||
# Password validation | ||
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators | ||
|
||
AUTH_PASSWORD_VALIDATORS = [ | ||
{ | ||
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', | ||
}, | ||
{ | ||
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', | ||
}, | ||
{ | ||
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', | ||
}, | ||
{ | ||
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', | ||
}, | ||
] | ||
|
||
|
||
# Internationalization | ||
# https://docs.djangoproject.com/en/1.9/topics/i18n/ | ||
|
||
LANGUAGE_CODE = 'en-us' | ||
|
||
TIME_ZONE = 'UTC' | ||
|
||
USE_I18N = True | ||
|
||
USE_L10N = True | ||
|
||
USE_TZ = True | ||
|
||
|
||
# Static files (CSS, JavaScript, Images) | ||
# https://docs.djangoproject.com/en/1.9/howto/static-files/ | ||
|
||
STATIC_URL = '/static/' | ||
|
||
MEDIA_ROOT = os.path.join(BASE_DIR, 'cloudcvIde/media') | ||
MEDIA_URL = '/media/' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
from django.conf.urls import url, include | ||
from django.contrib import admin | ||
from django.conf.urls.static import static | ||
from django.conf import settings | ||
|
||
urlpatterns = [ | ||
url(r'^cloudcvide/', include('cloudcvIde.urls')), | ||
url(r'^admin/', admin.site.urls), | ||
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
""" | ||
WSGI config for cloudcv project. | ||
It exposes the WSGI callable as a module-level variable named ``application``. | ||
For more information on this file, see | ||
https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ | ||
""" | ||
|
||
import os | ||
|
||
from django.core.wsgi import get_wsgi_application | ||
|
||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cloudcv.settings") | ||
|
||
application = get_wsgi_application() |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from __future__ import unicode_literals | ||
|
||
from django.apps import AppConfig | ||
|
||
|
||
class CloudcvideConfig(AppConfig): | ||
name = 'cloudcvIde' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# OS X temporary metadata | ||
._* | ||
*.DS_Store | ||
|
||
# Extracted parameters | ||
*.params | ||
|
||
# Python cache | ||
*.pyc | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
[MASTER] | ||
ignore=caffepb.py | ||
|
||
[MESSAGES CONTROL] | ||
disable=missing-docstring,invalid-name,wildcard-import,unused-wildcard-import,bad-builtin,no-self-use,locally-disabled | ||
|
||
[MISCELLANEOUS] | ||
# Exclude TODOs | ||
notes= | ||
|
||
[TYPECHECK] | ||
ignored-classes=numpy,cv2,NodeKind,LayerType,NetParameter,NpzFile | ||
|
||
[DESIGN] | ||
# Maximum number of arguments for function / method | ||
max-args=20 | ||
# Maximum number of locals for function / method body | ||
max-locals=30 | ||
# Maximum number of return / yield for function / method body | ||
max-returns=10 | ||
# Maximum number of branch for function / method body | ||
max-branches=12 | ||
# Maximum number of statements in function / method body | ||
max-statements=200 | ||
# Maximum number of attributes for a class (see R0902). | ||
max-attributes=100 | ||
# Maximum number of public methods for a class (see R0904). | ||
max-public-methods=200 | ||
# Maximum number of boolean expressions in a if statement | ||
max-bool-expr=10 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
[style] | ||
based_on_style = chromium | ||
column_limit = 100 | ||
indent_width = 4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# License | ||
|
||
Each contributor holds copyright over their contributions to Caffe-Tensorflow. In particular: | ||
|
||
- Any included network model is provided under its original license. | ||
|
||
- Any portion derived from Caffe is provided under its original license. | ||
|
||
- Caffe-tensorflow is provided under the MIT license, as specified below. | ||
|
||
# The MIT License (MIT) | ||
|
||
Copyright (c) 2016 Saumitro Dasgupta | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
# Caffe to TensorFlow | ||
|
||
Convert [Caffe](https://github.com/BVLC/caffe/) models to [TensorFlow](https://github.com/tensorflow/tensorflow). | ||
|
||
## Usage | ||
|
||
Run `convert.py` to convert an existing Caffe model to TensorFlow. | ||
|
||
Make sure you're using the latest Caffe format (see the notes section for more info). | ||
|
||
The output consists of two files: | ||
|
||
1. A data file (in NumPy's native format) containing the model's learned parameters. | ||
2. A Python class that constructs the model's graph. | ||
|
||
### Examples | ||
|
||
See the [examples](examples/) folder for more details. | ||
|
||
## Verification | ||
|
||
The following converted models have been verified on the ILSVRC2012 validation set using | ||
[validate.py](examples/imagenet/validate.py). | ||
|
||
| Model | Top 5 Accuracy | | ||
|:------------------------------------------------------|---------------:| | ||
| [ResNet 152](http://arxiv.org/abs/1512.03385) | 92.92% | | ||
| [ResNet 101](http://arxiv.org/abs/1512.03385) | 92.63% | | ||
| [ResNet 50](http://arxiv.org/abs/1512.03385) | 92.02% | | ||
| [VGG 16](http://arxiv.org/abs/1409.1556) | 89.88% | | ||
| [GoogLeNet](http://arxiv.org/abs/1409.4842) | 89.06% | | ||
| [Network in Network](http://arxiv.org/abs/1312.4400) | 81.21% | | ||
| [CaffeNet](http://arxiv.org/abs/1408.5093) | 79.93% | | ||
| [AlexNet](http://goo.gl/3BilWd) | 79.84% | | ||
|
||
## Notes | ||
|
||
- Only the new Caffe model format is supported. If you have an old model, use the `upgrade_net_proto_text` and `upgrade_net_proto_binary` tools that ship with Caffe to upgrade them first. Also make sure you're using a fairly recent version of Caffe. | ||
|
||
- It appears that Caffe and TensorFlow cannot be concurrently invoked (CUDA conflicts - even with `set_mode_cpu`). This makes it a two-stage process: first extract the parameters with `convert.py`, then import it into TensorFlow. | ||
|
||
- Caffe is not strictly required. If PyCaffe is found in your `PYTHONPATH`, and the `USE_PYCAFFE` environment variable is set, it will be used. Otherwise, a fallback will be used. However, the fallback uses the pure Python-based implementation of protobuf, which is astoundingly slow (~1.5 minutes to parse the VGG16 parameters). The experimental CPP protobuf backend doesn't particularly help here, since it runs into the file size limit (Caffe gets around this by overriding this limit in C++). A cleaner solution here would be to implement the loader as a C++ module. | ||
|
||
- Only a subset of Caffe layers and accompanying parameters are currently supported. | ||
|
||
- Not all Caffe models can be converted to TensorFlow. For instance, Caffe supports arbitrary padding whereas TensorFlow's support is currently restricted to `SAME` and `VALID`. | ||
|
||
- The border values are handled differently by Caffe and TensorFlow. However, these don't appear to affect things too much. | ||
|
||
- Image rescaling can affect the ILSVRC2012 top 5 accuracy listed above slightly. VGG16 expects isotropic rescaling (anisotropic reduces accuracy to 88.45%) whereas BVLC's implementation of GoogLeNet expects anisotropic (isotropic reduces accuracy to 87.7%). | ||
|
||
- The support class `kaffe.tensorflow.Network` has no internal dependencies. It can be safely extracted and deployed without the rest of this library. | ||
|
||
- The ResNet model uses 1x1 convolutions with a stride of 2. This is currently only supported in the master branch of TensorFlow (the latest release at time of writing being v0.8.0, which does not support it). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
#!/usr/bin/env python | ||
|
||
import os | ||
import sys | ||
import numpy as np | ||
import argparse | ||
from kaffe import KaffeError, print_stderr | ||
from kaffe.tensorflow import TensorFlowTransformer | ||
|
||
|
||
def fatal_error(msg): | ||
print_stderr(msg) | ||
exit(-1) | ||
|
||
|
||
def validate_arguments(args): | ||
if (args.data_output_path is not None) and (args.caffemodel is None): | ||
fatal_error('No input data path provided.') | ||
if (args.caffemodel is not None) and (args.data_output_path is None): | ||
fatal_error('No output data path provided.') | ||
if (args.code_output_path is None) and (args.data_output_path is None): | ||
fatal_error('No output path specified.') | ||
|
||
|
||
def convert(def_path, caffemodel_path, data_output_path, code_output_path, phase): | ||
try: | ||
transformer = TensorFlowTransformer(def_path, caffemodel_path, phase=phase) | ||
print_stderr('Converting data...') | ||
if caffemodel_path is not None: | ||
data = transformer.transform_data() | ||
print_stderr('Saving data...') | ||
with open(data_output_path, 'wb') as data_out: | ||
np.save(data_out, data) | ||
if code_output_path: | ||
print_stderr('Saving source...') | ||
with open(code_output_path, 'wb') as src_out: | ||
src_out.write(transformer.transform_source()) | ||
print_stderr('Done.') | ||
except KaffeError as err: | ||
fatal_error('Error encountered: {}'.format(err)) | ||
|
||
|
||
def main(): | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument('def_path', help='Model definition (.prototxt) path') | ||
parser.add_argument('--caffemodel', help='Model data (.caffemodel) path') | ||
parser.add_argument('--data-output-path', help='Converted data output path') | ||
parser.add_argument('--code-output-path', help='Save generated source to this path') | ||
parser.add_argument('-p', | ||
'--phase', | ||
default='test', | ||
help='The phase to convert: test (default) or train') | ||
args = parser.parse_args() | ||
validate_arguments(args) | ||
convert(args.def_path, args.caffemodel, args.data_output_path, args.code_output_path, | ||
args.phase) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
Oops, something went wrong.