1629712323
InstanceRefer: Cooperative Holistic Understanding for Visual Grounding on Point Clouds through Instance Multi-level Contextual Referring
This repository is for the ICCV 2021 paper and 1st method on ScanRefer benchmark [arxiv paper].
Zhihao Yuan, Xu Yan, Yinghong Liao, Ruimao Zhang, Zhen Li*, Shuguang Cui
If you find our work useful in your research, please consider citing:
@article{yuan2021instancerefer,
title={Instancerefer: Cooperative holistic understanding for visual grounding on point clouds through instance multi-level contextual referring},
author={Yuan, Zhihao and Yan, Xu and Liao, Yinghong and Zhang, Ruimao and Li, Zhen and Cui, Shuguang},
journal={ICCV},
year={2021}
}
The code is tested on Ubuntu 16.04 LTS & 18.04 LTS with PyTorch 1.6 CUDA 10.1 and PyTorch 1.8 CUDA 10.2 installed.
conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch
Install the necessary packages listed out in requirements.txt:
pip install -r requirements.txt
After all packages are properly installed, please run the following commands to compile the torchsaprse 1.2:
pip install --upgrade git+https://github.com/mit-han-lab/torchsparse.git
sudo apt-get install libsparsehash-dev
Before moving on to the next step, please don't forget to set the project root path to the CONF.PATH.BASE in lib/config.py.
Train the InstanceRefer model. You can change hyper-parameters in config/InstanceRefer.yaml:
python scripts/train.py --log_dir instancerefer
You need specific the use_checkpoint with the folder that contains model.pth in config/InstanceRefer.yaml and run with:
python scripts/eval.py
Input | ACC@0.25 | ACC@0.5 | Checkpoints |
---|---|---|---|
xyz+rgb | 37.6 | 30.7 | Baidu Netdisk [password: lrpb] |
This project is not possible without multiple great opensourced codebases.
InstanceRefer
├── data
│ ├── glove.p
│ ├── ScanRefer_filtered.json
│ ├── ...
│ ├── scannet
│ │ ├── meta_data
│ │ ├── pointgroup_data
│ │ │ ├── scene0000_00_aligned_bbox.npy
│ │ │ ├── scene0000_00_aligned_vert.npy
│ │ ├──├── ... ...
cd data/scannet/
python prepare_data.py --split train --pointgroupinst_path [YOUR_PATH]
python prepare_data.py --split val --pointgroupinst_path [YOUR_PATH]
python prepare_data.py --split test --pointgroupinst_path [YOUR_PATH]
1658181600
The paper detailing Tensorflex was presented at NeurIPS/NIPS 2018 as part of the MLOSS workshop. The paper can be found here.
libjpeg
. If you are using Linux or OSX, it should already be present on your machine, otherwise be sure to install (brew install libjpeg
for OSX, and sudo apt-get install libjpeg-dev
for Ubuntu).mix.exs
and you are good to go!:{:tensorflex, "~> 0.1.2"}
In case you want the latest development version use this:
{:tensorflex, github: "anshuman23/tensorflex"}
Tensorflex contains three main structs which handle different datatypes. These are %Graph
, %Matrix
and %Tensor
. %Graph
type structs handle pre-trained graph models, %Matrix
handles Tensorflex 2-D matrices, and %Tensor
handles Tensorflow Tensor types. The official Tensorflow documentation is present here and do note that this README only briefly discusses Tensorflex functionalities.
read_graph/1
:
Used for loading a Tensorflow .pb
graph model in Tensorflex.
Reads in a pre-trained Tensorflow protobuf (.pb
) Graph model binary file.
Returns a tuple {:ok, %Graph}
.
%Graph
is an internal Tensorflex struct which holds the name of the graph file and the binary definition data that is read in via the .pb
file.
get_graph_ops/1
:
Used for listing all the operations in a Tensorflow .pb
graph.
Reads in a Tensorflex %Graph
struct obtained from read_graph/1
.
Returns a list of all the operation names (as strings) that populate the graph model.
create_matrix/3
:
Creates a 2-D Tensorflex matrix from custom input specifications.
Takes three input arguments: number of rows in matrix (nrows
), number of columns in matrix (ncols
), and a list of lists of the data that will form the matrix (datalist
).
Returns a %Matrix
Tensorflex struct type.
matrix_pos/3
:
Used for accessing an element of a Tensorflex matrix.
Takes in three input arguments: a Tensorflex %Matrix
struct matrix, and the row (row
) and column (col
) values of the required element in the matrix. Both row
and col
here are NOT zero indexed.
Returns the value as float.
size_of_matrix/1
:
Used for obtaining the size of a Tensorflex matrix.
Takes a Tensorflex %Matrix
struct matrix as input.
Returns a tuple {nrows, ncols}
where nrows
represents the number of rows of the matrix and ncols
represents the number of columns of the matrix.
append_to_matrix/2
:
Appends a single row to the back of a Tensorflex matrix.
Takes a Tensorflex %Matrix
matrix as input and a single row of data (with the same number of columns as the original matrix) as a list of lists (datalist
) to append to the original matrix.
Returns the extended and modified %Matrix
struct matrix.
matrix_to_lists/1
:
Converts a Tensorflex matrix (back) to a list of lists format.
Takes a Tensorflex %Matrix
struct matrix as input.
Returns a list of lists representing the data stored in the matrix.
NOTE: If the matrix contains very high dimensional data, typically obtained from a function like load_csv_as_matrix/2
, then it is not recommended to convert the matrix back to a list of lists format due to a possibility of memory errors.
float64_tensor/2
, float32_tensor/2
, int32_tensor/2
:
Creates a TF_DOUBLE
, TF_FLOAT
, or TF_INT32
tensor from Tensorflex matrices containing the values and dimensions specified.
Takes two arguments: a %Matrix
matrix (matrix1
) containing the values the tensor should have and another %Matrix
matrix (matrix2
) containing the dimensions of the required tensor.
Returns a tuple {:ok, %Tensor}
where %Tensor
represents an internal Tensorflex struct type that is used for holding tensor data and type.
float64_tensor/1
, float32_tensor/1
, int32_tensor/1
, string_tensor/1
:
Creates a TF_DOUBLE
, TF_FLOAT
, TF_INT32
, or TF_STRING
constant value one-dimensional tensor from the input value specified.
Takes in a float, int or string value (depending on function) as input.
Returns a tuple {:ok, %Tensor}
where %Tensor
represents an internal Tensorflex struct type that is used for holding tensor data and type.
float64_tensor_alloc/1
, float32_tensor_alloc/1
, int32_tensor_alloc/1
:
Allocates a TF_DOUBLE
, TF_FLOAT
, or TF_INT32
tensor of specified dimensions.
This function is generally used to allocate output tensors that do not hold any value data yet, but will after the session is run for Inference. Output tensors of the required dimensions are allocated and then passed to the run_session/5
function to hold the output values generated as predictions.
Takes a Tensorflex %Matrix
struct matrix as input.
Returns a tuple {:ok, %Tensor}
where %Tensor
represents an internal Tensorflex struct type that is used for holding the potential tensor data and type.
tensor_datatype/1
:
Used to get the datatype of a created tensor.
Takes in a %Tensor
struct tensor as input.
Returns a tuple {:ok, datatype}
where datatype
is an atom representing the list of Tensorflow TF_DataType
tensor datatypes. Click here to view a list of all possible datatypes.
load_image_as_tensor/1
:
Loads JPEG
images into Tensorflex directly as a TF_UINT8
tensor of dimensions image height x image width x number of color channels
.
This function is very useful if you wish to do image classification using Convolutional Neural Networks, or other Deep Learning Models. One of the most widely adopted and robust image classification models is the Inception model by Google. It makes classifications on images from over a 1000 classes with highly accurate results. The load_image_as_tensor/1
function is an essential component for the prediction pipeline of the Inception model (and for other similar image classification models) to work in Tensorflex.
Reads in the path to a JPEG
image file (.jpg
or .jpeg
).
Returns a tuple {:ok, %Tensor}
where %Tensor
represents an internal Tensorflex struct type that is used for holding the tensor data and type. Here the created Tensor is a uint8
tensor (TF_UINT8
).
NOTE: For now, only 3 channel RGB JPEG
color images can be passed as arguments. Support for grayscale images and other image formats such as PNG
will be added in the future.
loads_csv_as_matrix/2
:
Loads high-dimensional data from a CSV
file as a Tensorflex 2-D matrix in a super-fast manner.
The load_csv_as_matrix/2
function is very fast-- when compared with the Python based pandas
library for data science and analysis' function read_csv
on the test.csv
file from MNIST Kaggle data (source), the following execution times were obtained:
read_csv
: 2.549233
secondsload_csv_as_matrix/2
: 1.711494
secondsThis function takes in 2 arguments: a path to a valid CSV file (filepath
) and other optional arguments opts
. These include whether or not a header needs to be discarded in the CSV, and what the delimiter type is. These are specified by passing in an atom :true
or :false
to the header:
key, and setting a string value for the delimiter:
key. By default, the header is considered to be present (:true
) and the delimiter is set to ,
.
Returns a %Matrix
Tensorflex struct type.
run_session/5
:
Runs a Tensorflow session to generate predictions for a given graph, input data, and required input/output operations.
This function is the final step of the Inference (prediction) pipeline and generates output for a given set of input data, a pre-trained graph model, and the specified input and output operations of the graph.
Takes in five arguments: a pre-trained Tensorflow graph .pb
model read in from the read_graph/1
function (graph
), an input tensor with the dimensions and data required for the input operation of the graph to run (tensor1
), an output tensor allocated with the right dimensions (tensor2
), the name of the input operation of the graph that needs where the input data is fed (input_opname
), and the output operation name in the graph where the outputs are obtained (output_opname
). The input tensor is generally created from the matrices manually or using the load_csv_as_matrix/2
function, and then passed through to one of the tensor creation functions. For image classification the load_image_as_tensor/1
can also be used to create the input tensor from an image. The output tensor is created using the tensor allocation functions (generally containing alloc
at the end of the function name).
Returns a List of Lists (similar to the matrix_to_lists/1
function) containing the generated predictions as per the output tensor dimensions.
add_scalar_to_matrix/2
:
Adds scalar value to matrix.
Takes two arguments: %Matrix
matrix and scalar value (int or float)
Returns a %Matrix
modified matrix.
subtract_scalar_from_matrix/2
:
Subtracts scalar value from matrix.
Takes two arguments: %Matrix
matrix and scalar value (int or float)
Returns a %Matrix
modified matrix.
multiply_matrix_with_scalar/2
:
Multiplies scalar value with matrix.
Takes two arguments: %Matrix
matrix and scalar value (int or float)
Returns a %Matrix
modified matrix.
divide_matrix_by_scalar/2
:
Divides matrix values by scalar.
Takes two arguments: %Matrix
matrix and scalar value (int or float)
Returns a %Matrix
modified matrix.
add_matrices/2
:
Adds two matrices of same dimensions together.
Takes in two %Matrix
matrices as arguments.
Returns the resultant %Matrix
matrix.
subtract_matrices/2
:
Subtracts matrix2
from matrix1
.
Takes in two %Matrix
matrices as arguments.
Returns the resultant %Matrix
matrix.
tensor_to_matrix/1
:
Converts the data stored in a 2-D tensor back to a 2-D matrix.
Takes in a single argument as a %Tensor
tensor (any TF_Datatype
).
Returns a %Matrix
2-D matrix.
NOTE: Tensorflex doesn't currently support 3-D matrices, and therefore tensors that are 3-D (such as created using the load_image_as_tensor/1
function) cannot be converted back to a matrix, yet. Support for 3-D matrices will be added soon.
Examples are generally added in full description on my blog here. A blog post covering how to do classification on the Iris Dataset is present here.
INCEPTION CNN MODEL EXAMPLE:
Here we will briefly touch upon how to use the Google V3 Inception pre-trained graph model to do image classficiation from over a 1000 classes. First, the Inception V3 model can be downloaded here: http://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz
After unzipping, see that it contains the graphdef .pb file (classify_image_graphdef.pb
) which contains our graph definition, a test jpeg image that should identify/classify as a panda (cropped_panda.pb
) and a few other files I will detail later.
Now for running this in Tensorflex first the graph is loaded:
iex(1)> {:ok, graph} = Tensorflex.read_graph("classify_image_graph_def.pb")
2018-07-29 00:48:19.849870: W tensorflow/core/framework/op_def_util.cc:346] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization().
{:ok,
%Tensorflex.Graph{
def: #Reference<0.2597534446.2498625538.211058>,
name: "classify_image_graph_def.pb"
}}
Then the cropped_panda image is loaded using the new load_image_as_tensor
function:
iex(2)> {:ok, input_tensor} = Tensorflex.load_image_as_tensor("cropped_panda.jpg")
{:ok,
%Tensorflex.Tensor{
datatype: :tf_uint8,
tensor: #Reference<0.2597534446.2498625538.211093>
}}
Then create the output tensor which will hold out output vector values. For the inception model, the output is received as a 1008x1 tensor, as there are 1008 classes in the model:
iex(3)> out_dims = Tensorflex.create_matrix(1,2,[[1008,1]])
%Tensorflex.Matrix{
data: #Reference<0.2597534446.2498625538.211103>,
ncols: 2,
nrows: 1
}
iex(4)> {:ok, output_tensor} = Tensorflex.float32_tensor_alloc(out_dims)
{:ok,
%Tensorflex.Tensor{
datatype: :tf_float,
tensor: #Reference<0.2597534446.2498625538.211116>
}}
Then the output results are read into a list called results
. Also, the input operation in the Inception model is DecodeJpeg
and the output operation is softmax
:
iex(5)> results = Tensorflex.run_session(graph, input_tensor, output_tensor, "DecodeJpeg", "softmax")
2018-07-29 00:51:13.631154: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
[
[1.059142014128156e-4, 2.8240500250831246e-4, 8.30648496048525e-5,
1.2982363114133477e-4, 7.32232874725014e-5, 8.014426566660404e-5,
6.63459359202534e-5, 0.003170756157487631, 7.931600703159347e-5,
3.707312498590909e-5, 3.0997329304227605e-5, 1.4232713147066534e-4,
1.0381334868725389e-4, 1.1057958181481808e-4, 1.4321311027742922e-4,
1.203602587338537e-4, 1.3130248407833278e-4, 5.850398520124145e-5,
2.641105093061924e-4, 3.1629020668333396e-5, 3.906813799403608e-5,
2.8646905775531195e-5, 2.2863158665131778e-4, 1.2222197256051004e-4,
5.956588938715868e-5, 5.421260357252322e-5, 5.996063555357978e-5,
4.867801326327026e-4, 1.1005574924638495e-4, 2.3433618480339646e-4,
1.3062104699201882e-4, 1.317620772169903e-4, 9.388553007738665e-5,
7.076268957462162e-5, 4.281177825760096e-5, 1.6863139171618968e-4,
9.093972039408982e-5, 2.611844101920724e-4, 2.7584232157096267e-4,
5.157176201464608e-5, 2.144951868103817e-4, 1.3628098531626165e-4,
8.007588621694595e-5, 1.7929042223840952e-4, 2.2831936075817794e-4,
6.216531619429588e-5, 3.736453436431475e-5, 6.782123091397807e-5,
1.1538144462974742e-4, ...]
]
Finally, we need to find which class has the maximum probability and identify it's label. Since results is a List of Lists, it's better to read in the nested list. Then we need to find the index of the element in the new list which as the maximum value. Therefore:
iex(6)> max_prob = List.flatten(results) |> Enum.max
0.8849328756332397
iex(7)> Enum.find_index(results |> List.flatten, fn(x) -> x == max_prob end)
169
We can thus see that the class with the maximum probability predicted (0.8849328756332397) for the image is 169. We will now find what the 169 label corresponds to. For this we can look back into the unzipped Inception folder, where there is a file called imagenet_2012_challenge_label_map_proto.pbtxt
. On opening this file, we can find the string class identifier for the 169
class index. This is n02510455
and is present on Line 1556 in the file. Finally, we need to match this string identifier to a set of identification labels by referring to the file imagenet_synset_to_human_label_map.txt
file. Here we can see that corresponding to the string class n02510455
the human labels are giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca
(Line 3691 in the file).
Thus, we have correctly identified the animal in the image as a panda using Tensorflex!
RNN LSTM SENTIMENT ANALYSIS MODEL EXAMPLE:
A brief idea of what this example entails:
To do sentiment analysis in Tensorflex however, we first need to do some preprocessing and prepare the graph model (.pb
) as done multiple times before in other examples. For that, in the examples/rnn-lstm-example
directory there are two scripts: freeze.py
and create_input_data.py
. Prior to explaining the working of these scripts you first need to download the original saved models as well as the datasets:
examples/rnn-lstm-example/model
folderwordsList.npy
and wordVectors.npy
. These will be used to encode our text data into UTF-8
encoding for feeding our RNN as input.Now, for the Python two scripts: freeze.py
and create_input_data.py
:
freeze.py
: This is used to create our pb
model from the Python saved checkpoints. Here we will use the downloaded Python checkpoints' model to create the .pb
graph. Just running python freeze.py
after putting the model files in the correct directory will do the trick. In the same ./model/
folder, you will now see a file called frozen_model_lstm.pb
. This is the file which we will load into Tensorflex. In case for some reason you want to skip this step and just get the loaded graph here is a Dropbox linkcreate_input_data.py
: Even if we can load our model into Tensorflex, we also need some data to do inference on. For that, we will write our own example sentences and convert them (read encode) to a numeral (int32
) format that can be used by the network as input. For that, you can inspect the code in the script to get an understanding of what is happening. Basically, the neural network takes in an input of a 24x250
int32
(matrix) tensor created from text which has been encoded as UTF-8
. Again, running python create_input_data.py
will give you two csv
files (one indicating positive sentiment and the other a negative sentiment) which we will later load into Tensorflex. The two sentences converted are:Both of these get converted to two files inputMatrixPositive.csv
and inputMatrixNegative.csv
(by create_input_data.py
) which we load into Tensorflex next.
Inference in Tensorflex: Now we do sentiment analysis in Tensorflex. A few things to note:
Placeholder_1
add
and is the eventual result of a matrix multiplication. Of this obtained result we only need the first row24x250
representing our sentence/review1x2
vector. If the value of the first column is higher than the second column, then the network indicates a positive sentiment otherwise a negative sentiment. All this can be observed in the original repository in a Jupyter notebook here: ```elixir iex(1)> {:ok, graph} = Tensorflex.read_graph "examples/rnn-lstm-example/model/frozen_model_lstm.pb" {:ok, %Tensorflex.Graph{ def: #Reference<0.713975820.1050542081.11558>, name: "examples/rnn-lstm-example/model/frozen_model_lstm.pb" }}iex(2)> Tensorflex.get_graph_ops graph ["Placeholder_1", "embedding_lookup/params_0", "embedding_lookup", "transpose/perm", "transpose", "rnn/Shape", "rnn/strided_slice/stack", "rnn/strided_slice/stack_1", "rnn/strided_slice/stack_2", "rnn/strided_slice", "rnn/stack/1", "rnn/stack", "rnn/zeros/Const", "rnn/zeros", "rnn/stack_1/1", "rnn/stack_1", "rnn/zeros_1/Const", "rnn/zeros_1", "rnn/Shape_1", "rnn/strided_slice_2/stack", "rnn/strided_slice_2/stack_1", "rnn/strided_slice_2/stack_2", "rnn/strided_slice_2", "rnn/time", "rnn/TensorArray", "rnn/TensorArray_1", "rnn/TensorArrayUnstack/Shape", "rnn/TensorArrayUnstack/strided_slice/stack", "rnn/TensorArrayUnstack/strided_slice/stack_1", "rnn/TensorArrayUnstack/strided_slice/stack_2", "rnn/TensorArrayUnstack/strided_slice", "rnn/TensorArrayUnstack/range/start", "rnn/TensorArrayUnstack/range/delta", "rnn/TensorArrayUnstack/range", "rnn/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3", "rnn/while/Enter", "rnn/while/Enter_1", "rnn/while/Enter_2", "rnn/while/Enter_3", "rnn/while/Merge", "rnn/while/Merge_1", "rnn/while/Merge_2", "rnn/while/Merge_3", "rnn/while/Less/Enter", "rnn/while/Less", "rnn/while/LoopCond", "rnn/while/Switch", "rnn/while/Switch_1", "rnn/while/Switch_2", "rnn/while/Switch_3", ...]
First we will try for positive sentiment:
```elixir
iex(3)> input_vals = Tensorflex.load_csv_as_matrix("examples/rnn-lstm-example/inputMatrixPositive.csv", header: :false)
%Tensorflex.Matrix{
data: #Reference<0.713975820.1050542081.13138>,
ncols: 250,
nrows: 24
}
iex(4)> input_dims = Tensorflex.create_matrix(1,2,[[24,250]])
%Tensorflex.Matrix{
data: #Reference<0.713975820.1050542081.13575>,
ncols: 2,
nrows: 1
}
iex(5)> {:ok, input_tensor} = Tensorflex.int32_tensor(input_vals, input_dims)
{:ok,
%Tensorflex.Tensor{
datatype: :tf_int32,
tensor: #Reference<0.713975820.1050542081.14434>
}}
iex(6)> output_dims = Tensorflex.create_matrix(1,2,[[24,2]])
%Tensorflex.Matrix{
data: #Reference<0.713975820.1050542081.14870>,
ncols: 2,
nrows: 1
}
iex(7)> {:ok, output_tensor} = Tensorflex.float32_tensor_alloc(output_dims)
{:ok,
%Tensorflex.Tensor{
datatype: :tf_float,
tensor: #Reference<0.713975820.1050542081.15363>
}}
We only need the first row, the rest do not indicate anything:
iex(8)> [result_pos | _ ] = Tensorflex.run_session(graph, input_tensor,output_tensor, "Placeholder_1", "add")
[
[4.483788013458252, -1.273943305015564],
[-0.17151066660881042, -2.165886402130127],
[0.9569928646087646, -1.131581425666809],
[0.5669126510620117, -1.3842089176177979],
[-1.4346938133239746, -4.0750861167907715],
[0.4680981934070587, -1.3494354486465454],
[1.068990707397461, -2.0195648670196533],
[3.427264451980591, 0.48857203125953674],
[0.6307879686355591, -2.069119691848755],
[0.35061028599739075, -1.700657844543457],
[3.7612719535827637, 2.421398878097534],
[2.7635951042175293, -0.7214710116386414],
[1.146680235862732, -0.8688814640045166],
[0.8996094465255737, -1.0183486938476563],
[0.23605018854141235, -1.893072247505188],
[2.8790698051452637, -0.37355837225914],
[-1.7325369119644165, -3.6470277309417725],
[-1.687785029411316, -4.903762340545654],
[3.6726789474487305, 0.14170047640800476],
[0.982108473777771, -1.554244875907898],
[2.248904228210449, 1.0617655515670776],
[0.3663095533847809, -3.5266385078430176],
[-1.009346604347229, -2.901120901107788],
[3.0659966468811035, -1.7605335712432861]
]
iex(9)> result_pos
[4.483788013458252, -1.273943305015564]
Thus we can clearly see that the RNN predicts a positive sentiment. For a negative sentiment, next:
iex(10)> input_vals = Tensorflex.load_csv_as_matrix("examples/rnn-lstm-example/inputMatrixNegative.csv", header: :false)
%Tensorflex.Matrix{
data: #Reference<0.713975820.1050542081.16780>,
ncols: 250,
nrows: 24
}
iex(11)> {:ok, input_tensor} = Tensorflex.int32_tensor(input_vals,input_dims)
{:ok,
%Tensorflex.Tensor{
datatype: :tf_int32,
tensor: #Reference<0.713975820.1050542081.16788>
}}
iex(12)> [result_neg|_] = Tensorflex.run_session(graph, input_tensor,output_tensor, "Placeholder_1", "add")
[
[0.7635725736618042, 10.895986557006836],
[2.205151319503784, -0.6267685294151306],
[3.5995595455169678, -0.1240251287817955],
[-1.6063352823257446, -3.586883068084717],
[1.9608432054519653, -3.084211826324463],
[3.772461414337158, -0.19421455264091492],
[3.9185996055603027, 0.4442034661769867],
[3.010765552520752, -1.4757057428359985],
[3.23650860786438, -0.008513949811458588],
[2.263028144836426, -0.7358709573745728],
[0.206748828291893, -2.1945853233337402],
[2.913491725921631, 0.8632720708847046],
[0.15935257077217102, -2.9757845401763916],
[-0.7757357358932495, -2.360766649246216],
[3.7359719276428223, -0.7668198347091675],
[2.2896337509155273, -0.45704856514930725],
[-1.5497230291366577, -4.42919921875],
[-2.8478822708129883, -5.541027545928955],
[1.894787073135376, -0.8441318273544312],
[0.15720489621162415, -2.699129819869995],
[-0.18114641308784485, -2.988100051879883],
[3.342879056930542, 2.1714375019073486],
[2.906526565551758, 0.18969044089317322],
[0.8568912744522095, -1.7559258937835693]
]
iex(13)> result_neg
[0.7635725736618042, 10.895986557006836]
Thus we can clearly see that in this case the RNN indicates negative sentiment! Our model works!
Author: anshuman23
Source code: https://github.com/anshuman23/tensorflex
License: Apache-2.0 license
1594162500
A multi-cloud approach is nothing but leveraging two or more cloud platforms for meeting the various business requirements of an enterprise. The multi-cloud IT environment incorporates different clouds from multiple vendors and negates the dependence on a single public cloud service provider. Thus enterprises can choose specific services from multiple public clouds and reap the benefits of each.
Given its affordability and agility, most enterprises opt for a multi-cloud approach in cloud computing now. A 2018 survey on the public cloud services market points out that 81% of the respondents use services from two or more providers. Subsequently, the cloud computing services market has reported incredible growth in recent times. The worldwide public cloud services market is all set to reach $500 billion in the next four years, according to IDC.
By choosing multi-cloud solutions strategically, enterprises can optimize the benefits of cloud computing and aim for some key competitive advantages. They can avoid the lengthy and cumbersome processes involved in buying, installing and testing high-priced systems. The IaaS and PaaS solutions have become a windfall for the enterprise’s budget as it does not incur huge up-front capital expenditure.
However, cost optimization is still a challenge while facilitating a multi-cloud environment and a large number of enterprises end up overpaying with or without realizing it. The below-mentioned tips would help you ensure the money is spent wisely on cloud computing services.
Most organizations tend to get wrong with simple things which turn out to be the root cause for needless spending and resource wastage. The first step to cost optimization in your cloud strategy is to identify underutilized resources that you have been paying for.
Enterprises often continue to pay for resources that have been purchased earlier but are no longer useful. Identifying such unused and unattached resources and deactivating it on a regular basis brings you one step closer to cost optimization. If needed, you can deploy automated cloud management tools that are largely helpful in providing the analytics needed to optimize the cloud spending and cut costs on an ongoing basis.
Another key cost optimization strategy is to identify the idle computing instances and consolidate them into fewer instances. An idle computing instance may require a CPU utilization level of 1-5%, but you may be billed by the service provider for 100% for the same instance.
Every enterprise will have such non-production instances that constitute unnecessary storage space and lead to overpaying. Re-evaluating your resource allocations regularly and removing unnecessary storage may help you save money significantly. Resource allocation is not only a matter of CPU and memory but also it is linked to the storage, network, and various other factors.
The key to efficient cost reduction in cloud computing technology lies in proactive monitoring. A comprehensive view of the cloud usage helps enterprises to monitor and minimize unnecessary spending. You can make use of various mechanisms for monitoring computing demand.
For instance, you can use a heatmap to understand the highs and lows in computing visually. This heat map indicates the start and stop times which in turn lead to reduced costs. You can also deploy automated tools that help organizations to schedule instances to start and stop. By following a heatmap, you can understand whether it is safe to shut down servers on holidays or weekends.
#cloud computing services #all #hybrid cloud #cloud #multi-cloud strategy #cloud spend #multi-cloud spending #multi cloud adoption #why multi cloud #multi cloud trends #multi cloud companies #multi cloud research #multi cloud market
1608022599
Great evolution has happened in the buying and selling process due to the advent of ecommerce. There is exponential growth in the field of online business and selling and buying happens at the doorstep. The multi seller ecommerce platform has become the next level in the ecommerce niche.
The ecommerce marketplace platforms like Amazon, Flipkart, and eBay have already succeeded in the industry and have set a milestone on sales and revenue.
This fact has inspired many aspiring entrepreneurs and has made them transfer their brick and mortar stores to multi vendor platform.
Multi vendor marketplace platform is connect a multiple sellere or vendors to display and sell their products through the platform by agreeing with the terms mentioned by the admin of the platform. They can have their way of promoting their products.
Now that you have a better understanding of the key features for Multi vendor marketplace, let’s compare ten of the top Multi vendor providers.
Zielcommerce is a white label enabled enterprise grade online marketplace software. The multi vendor platform comes with a one time payment option and it is completely customizable and also scalable.
Platform Highlights
Zielcommerce provides its users with a secured environment through its SSL certified marketplace software and gains the trust of the users. You can be easily promoted online with this SEO-optimized platform. Stay connected with your customers all the time with the in-build communication channels.
The pleasing features of this multi vendor marketplacce solution
Best Use Cases
Client’s Rating
Explore Zielcommerce Multi vendor Ecommerce Platform
X-cart is a standalone online marketplace solution for your online business needs. You can get the complete comprehensive features within this multi vendor marketplace software that can meet the customers’ expectations. A genuine approach is maintained and the users trust X-cart for its outstanding functionalities that satisfy the multi vendor market demands.
Platform Highlights
It has gained the trust of thousands of users and people who use Xcart as their online multi vendor marketplace software has given the best review about the product.
The salient features of this multi vendor ecommerce platform solution
Best Use Cases
Client’s Rating:
Explore Xcart Multi vendor Marketplace Software
CS-Cart has never disappointed its users and it comes with the complete ecommerce marketplace solution for all your business demands. You can gain perfect control over the online multi vendor marketplace platform and can personalize the platform to suit your business needs. You will get higher visibility and can easily attract your target audience with the CS-Cart marketplace solution.
Platform Highlights
You can gain the attention of global audiences through its multilingual support and can take your brand all over the world and build a strong branding with the help of CS cart.
The key features of this multi vendor ecommerce website solution
Best use cases
Client’s Rating :
[Explore Cscart Online Marketplace Software](https://www.cs-cart.com “Explore Cscart Online Marketplace Software”)
Arcadier is the SaaS (Software-as-a-Service) provider that allows businesses, SMEs, local communities, government agencies and entrepreneurs to manage their online multi vendor marketplace platform more efficiently and affectionately. Arcadier has many attractive features that can grab the attention of vendors.
Platform Highlights
Apart from other SaaS online marketplace platforms on the market that offer a temporary solution for all purposes, Arcadier allows users to choose between multiple options in buying and selling products or services to rental spaces and other business models.
**The Prominent features of this online multi vendor marketplace software solution
Best Use Case
**Client’s Rating: **
Explore Arcadier Multi vendor Marketplace Platform
Multi vendor Marketplace that converts your single admin online store into Multi vendor Marketplace. It provides of adding vendors and maintain the track record of their order and sales. Apart from vendor features, Bigcommerce gives best buyer features that will impress buyers and make them decide on buying products in your online multi vendor ecommerce platform.
Platform Highlights
It comes with an option which, without the approval of the vendor admin the product would not be visible in the forefront. This online multi vendor marketplace platform is excellent features and creating various plans for vendors, a payment management system for vendors.
Impressing features of this online multi vendor marketplace software solution
Best Use Case
Explore Bigcommerce Multi vendor Ecommerce Platform
Ixxo is an ideal marketplace solution for those who want to open and manage a high-volume marketplace as IXXO online Multi Vendor ecommerce platform offers unlimited product and unlimited vendor capacity. The marketplace owners can configure vendor privileges purely based on vendors. this help the multi vendor marketplace software owner to provide the basic vendor features, where the vendors dont have much ecommerce experience and privileges.
Platform Highlights
This will ensure that the delivery is taking place in the right way. If there is any delay then through a proper messaging system the buyer will get intimation regarding the delay. This feature impresses the customer and makes the platform the best one.
Splendid features of this best ecommerce marketplace platform solution
Best Use Cases
**Client’s Rating: **
Explore IXXO cart Online best marketplace softwarebest marketplace software
Sharetribe is one of the excellent SaaS platforms for building and launching a online multi vendor marketplace software. Easy setting changes to your color theme and photos, instantly.
Platform Highlights
This online multi vendor marketplace platform gives a perfect shopping experience to customers and also satisfied selling experience to vendors. Users can trust sharetribe for their business requirement and can get a trustworthy marketplace solution that will leverage their business to greater levels.
Core features of this best ecommerce marketplace platform
Best Use Cases
**Client’s Rating:**
Explore Sharetribe Multi vendor Marketplace Software
A online Multi vendor marketplace platform is an online marketplace where many sellers can sign up, create their profiles and add products and sell when they want. One of the best examples of multi vendor platforms right now is Amazon, and so on. Well, the ecommerce marketplace software has multiple benefits for its users and vendors.
Platform Highlights
Impressing feature of this best ecommerce marketplace platform
Best Use Cases
Is a flexible multi seller ecommerce platform that can be easily modified as their business evolves with more conversions rate, better integrations, with complete solutions for all aspects of online sales, This online multi vendor marketplace software help them generate revenue and increasing the average order value and with less operating costs.
Platform Highlights
Miva suits to any business model and business size. This online multi vendor marketplace platform is very cost-effective and even a startup who plans to start an online store with minimum investment can easily go for Miva.
The online ecommerce marketplace software looks like it has been built from scratch. It inherits all essential features that are needed to run a multi vendor marketplace platform successfully. All you need is to buy the platform and launch the marketplace and can start earning instantly.
Intuitive feature of this best marketplace software
Best Use Cases
**Client’s Rating: **
Quick eSelling is a popular multi vendor online marketplace platform with upgrade features and a more comfortable platform for global merchants and seller to start their own online store. Quick eSelling is an online store feature for Customer Engagement and Retention. This platform has been designed to help you significantly increase your sales and save time.
Platform Highlights
his will satisfy vendors and will make them stay with your best multi vendor marketplace software for a long time. You can get complete support from the technical team round the clock. Whenever customization needed the technical team will guide you in designing your own online multi seller ecommerce platform.
The essential feature of this Multi vendor marketplace software
Best Use Cases
Client’s Rating:
This is the most recommended online marketplace platform that holds thousands of active users. The advanced security feature supports users to store customers’ data in a secured way. The platform can stand against all malware attacks as it contains SSL certification.
Platform highlights
The extraordinary inventory management system will let sellers maintain their stock in an effective way. The order process will never be interrupted due to a shortage of stock. Proper notifications will be sent to respective sellers whenever their stock hits the minimum value.
This multi vendor software supports thousands of templates and plugins that can be used by users to customize their marketplace to meet their business demands. Being a user-friendly marketplace platform, no technical knowledge is needed to manage the platform. The dedicated dashboard will support the admin to know the exact working condition of their business.
Features of this multi vendor ecommerce marketplace platform.
Best use cases
Client’s Rating:
Smartstore Z is the most compatible multi vendor eCommerce store that will fit into any business model and business size.
5. Brainview – a commendable online marketplace platform
Brainview has the most enchanting UI & UX that can gain the attention of your target audience and will make them buy products on your platform. Users can get globally connected as the marketplace supports multiple languages and multiple currencies. Advanced technologies are implemented just to provide a seamless shopping experience to customers.
Platform highlights
Excellent customer support is offered by this multi vendor platform and customers can have direct communication with the concerned seller and they can get more details about the product or service before they buy. This will reduce returns and refunds. Many customer-attracting features are available in this marketplace platform like loyalty programs, referral programs, and many more.
Acquiring more customers is not at all a challenge for this best multi vendor marketplace software. Several revenue streams like commission fee, subscription fee, affiliate modules, advertisements, and many more are integrated with this online marketplace platform.
Features of this multi vendor eCommerce platform
Best use cases
Client’s Rating:
· Ease of use: 4/5
· Customer service – 4.2/5
· Overall: 4.1/5
Brainview is the significant multi vendor eCommerce store that give 100% customization and scalability to users.
There are several types of multi vendor marketplace software in the market. One needs to understand all the types and should know to identify which type of marketplace platform suits his business well.
The million-dollar question that has arisen in the minds of every budding entrepreneur is how to start a online multi vendor ecommerce platform. Full attention is needed while building a ecommerce marketplace software. It is not as simple as you think. Only through this multi vendor ecommerce platform, you are going to be recognized by the vendors and the buyers. This multi vendor platform is going to earn you money so it cannot have any flaws.
One way of building a online multi vendor marketplace software is to build it from scratch. First, you need to hire a reputed multi vendor ecommerce platform development company that has ample knowledge about this field. Then you need to explain to them about your requirements and expectations.
They will develop and will show you the demo. During the demo session, you can let them know your modifications and they will also clarify your doubts. At last, your multi seller ecommerce platform will be ready to launch and you can start promoting your multi vendor marketplace software.
The major fact to be noted is, when you build a online multi vendor ecommerce platform from scratch you need to wait for a long time and you need to spend more on the development. If you are okay with it then you can proceed. Else you have another option to go with.
Another option is buying ready made online multi vendor marketplace software that will have all the essential features that are required to run the platform successfully. The software will be tested and proved so there will not be any flaws. You can instantly launch the software after purchasing.
You can get an instant solution to building a multi vendor online marketplace software. This method is quite very cost-effective and it is highly advisable for the startups that are new to this field. You can also customize the software to suit your business needs.
The features that are built in the online multi vendor ecommerce platform will determine the user experience and will gain customer satisfaction. Now let us check out the comprehensive features that are too in a multi vendor ecommerce platform.
The main objective of building a online multi vendor ecommerce platform is to earn profit and generate more sales. This will be the ultimate motive for any entrepreneur. We need to know what are the revenue sources that a multi vendor marketplace software provides to the admin of the platform.
The multi vendor ecommerce platform will follow a hassle-free shipping and delivery process. This is where you can gain the maximum trust of your buyers and will also help you retain your customers effectively.
Online buyers need a one-stop solution to fulfill all their demands. Without searching for several sites to buy several products, users can just visit one online store and find a variety of products and it is quite a time saving process. A single platform that contains several vendors and their products is called a multi vendor ecommerce platform.
With the evolution of technology, multi vendor marketplace platforms have taken a new dimension that can easily predict customers’ buying behavior. The key pillars involved in any multi vendor marketplace are the admin, vendors and buyers. The platform will act as a bridge to connect all of them and facilitate users to be benefited. Let us analyze the benefits of a multi vendor ecommerce platform in detail.
Conclusion
By all means, building best multi vendor marketplace software will surely benefit us and will let to get more returns. We should also accept the fact that there are many challenges that a online marketplace software will face at its early stage. But still the future of this industry is unbeatable and you can firmly set your mind in starting your own multi seller ecommerce platform.
Understanding the importance and the functioning of a online multi vendor marketplace software will help you to build a flawless multi vendor ecommerce software. When you build a multi vendor marketplace platform with utmost perfection then you can easily win the market and can gain your audience’s attention with less effort.
#multi seller ecommerce platform #multi vendor marketplace platform #multi vendor marketplace software #best multi vendor marketplace platform #multi vendor ecommerce platform #online multi vendor software
1652251420
Multi Vendor marketplace FREE Download Extension Module, Affiliate marketing Software : Multivendor marketplace is an e-commerce platform that allows multiple vendors to sell their products from one storefront. Multi-vendor marketplace provides a larger base of ready-to-buy customers to sellers.
Multi-Vendor sites are similar to shopping malls - A lot of sellers dealing in a similar set of products under one roof. Amazon, Alibaba, Etsy, Walmart, etc., are among the most popular multi-vendor marketplaces.
Some examples of best marketplace platforms are Amazon, Flipkart, Airbnb, eBay, Paytm Mall, and Meesho.
Multi-Vendors Features
Vendor Features
Customer can become Vendor.
Customer auto approved/ approval by admin.
Vendor can add and edit Store Information.
Vendor can add and edit Bank and PayPal Details.
Vendor can add visit our Store.
Admin Features
Admin can give the configuration settings as show in below list.
Admin can Enabled or Disabled Auto approved Vendor.
Admin can Enabled or Disabled Auto approved Product.
Admin can Enabled or Disabled Auto approved Category.
Admin can Enabled or Disabled Vendor can Add/Edit/Delete review.
If you want to know the price of Multi Vendor Ecommerce and any queries regarding settings, and features, you can contact us at -
Skype: jks0586,
Email: letscmsdev@gmail.com,
Website: www.letscms.com, www.mlmtrees.com,
Call/WhatsApp/WeChat: +91-9717478599.
Free Download Multi Vendor : https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=43196&filter_search=multivendor
Documentation : https://www.letscms.com/documents/opencart-multivendor-new.html
Visit Website : https://www.letscms.com/blog/multi-vendor
Install : https://www.youtube.com/watch?v=v-86z-gcdb4&list=PLn9cGkS1zw3S9ZBrqbBes7L5fy7VfI8aU
#marketplace #multi_vendor_ecommerce #free_download_mutivendor #ecommerce_multivendor #multivendor_shopping #ecommerce_module #multivendor_software #multi_vendor_opencart #Multi_Vendors_Features #multi_vendor_marketplaces
1612009321
No matter what type of products you sell, we at Appdupe build a more in-depth customer engagement app for your business by delivering a multi-vendor e-commerce script development built on advanced technologies and user-centered design principles. Our dedicated team of designers, developers, analysts, testers, marketers connect with you and gather your requirements to deliver a robust and high-quality multi-vendor e-commerce marketplace store
Read More, https://www.appdupe.com/multi-vendor-ecommerce-script
#multi-vendor e-commerce script development #multi-vendor e-commerce script #multi-vendor e-commerce platform #multi-vendor marketplace script #multi-vendor e-commerce platform development #on-demand service marketplace script