## What's inside of javacpp-presets-mxnet * Native shared libraries: * libmxnet.so * libjnimxnet.so * libmkldnn.0.so * MXNet scala and java classes * javacpp-presets-mxnet java API implemenations * javacpp generated native bindings * mxnet C_API * mxnet-predict C_API
## What's missing javacpp-presets-mxnet doesn't expose APIs form nnvm/c_api.h (some of current python/gluon API depends on APIs in nnvm/c_api.h) ## What's the dependencies ``` org.bytedeco.mxnet:ImageClassificationPredict:jar:1.5-SNAPSHOT +- org.bytedeco:mxnet-platform:jar:1.4.0-1.5-SNAPSHOT:compile | +- org.bytedeco:opencv-platform:jar:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:android-arm:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:android-arm64:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:android-x86:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:android-x86_64:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:ios-arm64:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:ios-x86_64:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:linux-x86:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:linux-x86_64:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:linux-armhf:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:linux-ppc64le:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:macosx-x86_64:4.0.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:opencv:jar:windows-x86:4.0.1-1.5-SNAPSHOT:compile | | \- org.bytedeco:opencv:jar:windows-x86_64:4.0.1-1.5-SNAPSHOT:compile | +- org.bytedeco:openblas-platform:jar:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:android-arm:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:android-arm64:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:android-x86:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:android-x86_64:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:ios-arm64:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:ios-x86_64:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:linux-x86:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:linux-x86_64:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:linux-armhf:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:linux-ppc64le:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:macosx-x86_64:0.3.5-1.5-SNAPSHOT:compile | | +- org.bytedeco:openblas:jar:windows-x86:0.3.5-1.5-SNAPSHOT:compile | | \- org.bytedeco:openblas:jar:windows-x86_64:0.3.5-1.5-SNAPSHOT:compile | +- org.bytedeco:mkl-dnn-platform:jar:0.18.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:mkl-dnn:jar:linux-x86_64:0.18.1-1.5-SNAPSHOT:compile | | +- org.bytedeco:mkl-dnn:jar:macosx-x86_64:0.18.1-1.5-SNAPSHOT:compile | | \- org.bytedeco:mkl-dnn:jar:windows-x86_64:0.18.1-1.5-SNAPSHOT:compile | \- org.bytedeco:mxnet:jar:1.4.0-1.5-SNAPSHOT:compile \- org.bytedeco:mxnet:jar:macosx-x86_64:1.4.0-1.5-SNAPSHOT:compile +- org.bytedeco:opencv:jar:4.0.1-1.5-SNAPSHOT:compile +- org.bytedeco:openblas:jar:0.3.5-1.5-SNAPSHOT:compile +- org.bytedeco:mkl-dnn:jar:0.18.1-1.5-SNAPSHOT:compile +- org.bytedeco:javacpp:jar:1.5-SNAPSHOT:compile +- org.slf4j:slf4j-simple:jar:1.7.25:compile | \- org.slf4j:slf4j-api:jar:1.7.25:compile \- org.scala-lang:scala-library:jar:2.11.12:compile ``` ## Build the project form source I spent 40 min to build the project on my mac, and has to make some hack to build it. * It downloads mxnet source code, and making some hack around the source code * It uses it's own set of compiler flags to build libmxnet.so * It also build MXNet Scala project. Classes See javadoc: http://bytedeco.org/javacpp-presets/mxnet/apidocs/ 1. Java class name is “mxnet”, which is not following java naming conventions 2. Each pointer has a corresponding java class, which is arguable. It's necessary to expose them as strong type class if they meant to be used directly by end developer. But they really should only be internal implementation of the API. It's overkill to expose them as a Type instead of just a pointer. 3. All the classes (except mxnet.java) are hand written. 4. API mapping are hand coded as well. ## Performance JavaCPP native library load takes a long time, it takes average *2.6 seconds* to initialize libmxnet.so with javacpp. Loader.load(org.bytedeco.mxnet.global.mxnet.class); ## Issues The open source code on github doesn't match the binary release on maven central: * the maven group and the java package name are different. * c predict API is not included in maven version * Example code doesn't work with maven artifacts, it can only build with snapshot version locally. -- You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub: https://github.com/apache/incubator-mxnet/issues/17783#issuecomment-663138354