qianguih / voxelnet Goto Github PK
View Code? Open in Web Editor NEWThis is an unofficial inplementation of VoxelNet in TensorFlow.
This is an unofficial inplementation of VoxelNet in TensorFlow.
I wonder to know if the performances in ./img/learning_curve.jpg is the final result by fine-tone with the pre-trained model. I've done a lot of work to achieve the same result(such as freezing the front layer parameters, adjusting hyper parameter .etc), but there's still a big gap. And I'd appreciate it if you could give me any hints.
THX!!!
When compiling the evaluation code, an error occurred:
In file included from /usr/include/boost/numeric/ublas/vector.hpp:21:0,
from /usr/include/boost/numeric/ublas/matrix.hpp:18,
from evaluate_object_3d_offline.cpp:12:
/usr/include/boost/numeric/ublas/storage.hpp: In member function ‘void boost::numeric::ublas::unbounded_array<T, ALLOC>::serialize(Archive&, unsigned int)’:
/usr/include/boost/numeric/ublas/storage.hpp:299:18: error: ‘make_array’ is not a member of ‘boost::serialization’
ar & serialization::make_array(data_, s);
^
/usr/include/boost/numeric/ublas/storage.hpp: In member function ‘void boost::numeric::ublas::bounded_array<T, N, ALLOC>::serialize(Archive&, unsigned int)’:
/usr/include/boost/numeric/ublas/storage.hpp:494:18: error: ‘make_array’ is not a member of ‘boost::serialization’
ar & serialization::make_array(data_, s);
^
In file included from evaluate_object_3d_offline.cpp:12:0:
/usr/include/boost/numeric/ublas/matrix.hpp: In member function ‘void boost::numeric::ublas::c_matrix<T, M, N>::serialize(Archive&, unsigned int)’:
/usr/include/boost/numeric/ublas/matrix.hpp:5977:18: error: ‘make_array’ is not a member of ‘boost::serialization’
ar & serialization::make_array(data_, N)
The following error keeps appearing over and over again when I run the evaluation code on Windows 10 x64 with python test.py -n pre_trained_car
:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\spawn.py", line 105, in spawn_main
exitcode = _main(fd)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\spawn.py", line 114, in _main
prepare(preparation_data)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\spawn.py", line 225, in prepare
_fixup_main_from_path(data['init_main_from_path'])
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
run_name="__mp_main__")
File "C:\Users\Attila\Anaconda2\envs\python364\lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\Attila\Projects\intelligent-vehicles\voxelnet\voxelnet\test.py", line 10, in <module>
from model import RPN3D
File "C:\Users\Attila\Projects\intelligent-vehicles\voxelnet\voxelnet\model\__init__.py", line 12, in <module>
from model.model import *
File "C:\Users\Attila\Projects\intelligent-vehicles\voxelnet\voxelnet\model\model.py", line 12, in <module>
from utils import *
File "C:\Users\Attila\Projects\intelligent-vehicles\voxelnet\voxelnet\utils\__init__.py", line 12, in <module>
from utils.kitti_loader import *
File "C:\Users\Attila\Projects\intelligent-vehicles\voxelnet\voxelnet\utils\kitti_loader.py", line 44, in <module>
TRAIN_POOL = multiprocessing.Pool(4)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\context.py", line 119, in Pool
context=self.get_context())
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\pool.py", line 174, in __init__
self._repopulate_pool()
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\pool.py", line 239, in _repopulate_pool
w.start()
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\process.py", line 105, in start
self._popen = self._Popen(self)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\context.py", line 322, in _Popen
return Popen(process_obj)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\popen_spawn_win32.py", line 33, in __init__
prep_data = spawn.get_preparation_data(process_obj._name)
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
_check_not_importing_main()
File "C:\Users\Attila\Anaconda2\envs\python364\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
is not going to be frozen to produce an executable.''')
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
Following the guide in README, I only get the result below with pretrained car model.
BEV detection(car): 81.24 70.67 65.35
3D detection(car): 40.00 34.89 31.38
Is this the true performance of the provided pretrained model or I just did somthing wrong?
There seems to be an issue with the pre-trained model included (save_model/pre_trained_car).
When I run test.py, the visulizations seem to give highly inaccurate results. Furthermore, the ground truth boxes also seem to be flipped along the y-axis in the top-down lidar visualizations.
Is there something wrong with the pre-trained model or coordinate conversions?
Below are two example results.
The pre-trained car model outputs an array of size-9 for each detected object.
What do these refer to?
How to use them to get lidar-coordinates for detections?
Why pos_equal_one , neg_pos_one's dimension is (batch_size, w, l, 2)?? I don't know why last dimension is 2. if it is a positive anchor, we set 1, otherwise we set 0. so (batch_size, w, l, 1) satisfies the condition.
if not, where can i get
你好,我对整个网络的耗时性进行了一个测试,我在model.py中添加了如下代码:
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
probs, deltas = session.run(output_feed, input_feed,run_metadata=run_metadata,options=run_options)
trace = timeline.Timeline(step_stats=run_metadata.step_stats)
trace_file = open('/predictions/'+str(time.time()) + '-train-timeline.ctf.json','w')
trace_file.write(trace.generate_chrome_trace_format(show_memory=False))
trace_file.close()
测试的时间应该是准确的,发现整个网络做一次预测,是比论文里提到的更加耗时的,整体耗时超过400ms(我是在GTX1080,单个GPU),其中卷积中间层耗时大概不到100ms(比论文还低),但是有一个操作非常耗时,将近300ms,是一个tile操作,在point_cloud.py中:
def apply(self, inputs, mask, training):
# [K, T, 7] tensordot [7, units] = [K, T, units]
pointwise = self.batch_norm.apply(self.dense.apply(inputs), training)
#n [K, 1, units]
aggregated = tf.reduce_max(pointwise, axis=1, keep_dims=True)
# [K, T, units]
repeated = tf.tile(aggregated, [1, cfg.VOXEL_POINT_COUNT, 1])
# [K, T, 2 * units]
concatenated = tf.concat([pointwise, repeated], axis=2)
mask = tf.tile(mask, [1, 1, 2 * self.units])##这个tile操作非常耗时
concatenated = tf.multiply(concatenated, tf.cast(mask, tf.float32))
return concatenated
我在将这个tile操作注释掉之后,速度就提升了。
所以,我比较奇怪。
1、这个tile操作,实际操作的数据量并不大,为什么会这么耗时呢?
2、去掉这个tile操作后,不知道会不会影响训练效果,(= = 我还在训练中),这个地方是否有改进的空间呢?
嗨,你好,我发现你的这个版本在group_pointcloud.py里去掉了vfe2之后的全连接层,直接进行了reduce_max。因此在vfe里,最后的操作也有一个reduce_max,然后在进行tile和concat。
那进行tile和concat之后,再进行reduce_max,得到的结果和vfe2里做的reduce_max的结果不就一样的么?那这样不就相当于做了重复操作?
另外,为何要去掉那个全连接层呢?是对性能有影响么?
Hi,
I tried to train velodyne-16 points cloud on VoxelNet. I modified preprocess.py parameters, but I test the trained model which the training makes, the results is not good. Are there any suggestions that can optimize the results. Thx!
Best Regards,
Xuhui
Hello there,
Thanks for the great code you are supplying!
I have a question regarding the offline evaluation code.
I'm trying to verify that it works by using a singe ground truth file twice, once as gt and once as detection as input for the evaluation program. I changed gt file so it adheres to the kitti detection standard (basically just adding a score as 16th column).
Therefore I should get 100% AP correct? The actual results from my tests differ, depending on the file used I sometimes get somewhere between 0 and 36% AP.
Am I using the eval tool wrong?
Does it need a minimum number of detections (that's why it fails in this simple test case?)?
Do I need to modify the evaluation code somehow so it works with the standard kitti detection result format?
Thanks again!
Is there a detailed script for splitting them? Thanks
hello, in your implementation, you use
self.outputs = tf.scatter_nd(
self.coordinate, voxelwise, [self.batch_size, 10, cfg.INPUT_HEIGHT, cfg.INPUT_WIDTH, 128])
I want to ask if I use pytorch, which function should I use to do this operation.
Thank you very much!
When I run train.py
, got the Error:
2019-01-18 21:14:06.030010: E tensorflow/stream_executor/cuda/cuda_dnn.cc:378] Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7005 (compatibility version 7000). If using a binary install, upgrade your CuDNN library to match. If building from sources, make sure the library loaded at runtime matches a compatible version specified during compile configuration.
2019-01-18 21:14:06.030486: F tensorflow/core/kernels/conv_ops_3d.cc:395] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo<T>(), &algorithms)
Then I install CuDNN7.1.3 and CuDNN7.0.5 but the Error still exists. I'm not sure how the error occures.
I use conda environment, and tensorflow-gpu=1.4.1
i set the RPN_SCORE_THRESH = 0.90,and RPN_NMS_THRESH = 0.001
but the results have very much boxes that not include anything
does anyone know how to solve it
If I want train a detector that works for pedestrian and car at the same time, what should I do?
Hi friends,
I am trying to split the training set into training and validation set according to the protocol. But I find the test.txt in it. But now we only have training and validation set from the KITTI official website. So what the test.txt stands for? Maybe it has some connection with the process of KITTI submission? A test dataset will give us with the test.txt if we want to submit our results on KITTI?
Thank you!
有人使用作者给的预训练权重微调之后能得到作者在代码里给出来的精度吗?我的精度不管是怎样都很低
Kindly help in How to draw 3D bounding box on 3d lidar data using mayavi in voxelnet. Kindly help
the function angle_in_limit
in utils.py is:
def angle_in_limit(angle):
# To limit the angle in -pi/2 - pi/2
limit_degree = 5
while angle >= np.pi / 2:
angle -= np.pi
while angle < -np.pi / 2:
angle += np.pi
if abs(angle + np.pi / 2) < limit_degree / 180 * np.pi:
angle = np.pi / 2
return angle
However, what does the last condition mean? when -95 < angle < -85(in degree), angle = 90?
Line 28: aggregated = tf.reduce_max(pointwise, axis=1, keep_dims=True)
This op calculates all the points' featrue in a voxel including those fake zeros points.That isn't the same with the vfe in the origin paper.Although,the next step has a mask multiplying op,but it can't help your vfe encoder to calculate the right reduce max feature.
If you use qq or wechat, we may discuss use Chinses ^_^
In Data Preparation,
"Split the training set into training and validation set according to the protocol here. And rearrange the folders to have the following structure"
I don't know exactly what this means.
In my case, it allocated ~9GB GPU(1080Ti) memory when batch_size = 1, how could you train 2 batch on one GPU without out of memory?
For some reason, when i compile the evaluation code, all the import lines aren't read as they are written in angle brackets <import xx>
. but when i change them to double quotations "import xx"
, it works. i can't just change all the import lines of the Boost library files as they are all pointing to each other, so this is an impossible process. how did you manage the Boost library files? is there a specific way by which i should organize those files?
In the original papper section 2.3. Efficient Implementation, the hash tabel lookup is most time decreasing module, how can I use this? Have anybody make it?
Hi
Do you know which annotation tool was used to generate the 'data_object_label'? Thanks a lot!
I train the model in a single Titan X GPU and about a week passed while it's not over yet.
Guys, how long you cost?
After executing python3 test.py crashes with erroe below
Traceback (most recent call last):
File "/home/administrator/Documents.orig/Kumar_FileSystem/3D_Object_Detection/voxelnet-master/test.py", line 69, in
tags, results, front_images, bird_views, heatmaps = model.predict_step(sess, batch, summary=False, vis=True)
File "/home/administrator/Documents.orig/Kumar_FileSystem/3D_Object_Detection/voxelnet-master/model/model.py", line 285, in predict_step
probs, deltas = session.run(output_feed, input_feed)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", line 900, in run
run_metadata_ptr)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", line 1135, in _run
feed_dict_tensor, options, run_metadata)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", line 1316, in do_run
run_metadata)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", line 1335, in do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value MiddleAndRPN/conv21/kernel
[[Node: MiddleAndRPN/conv21/kernel/read = IdentityT=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"]]
[[Node: concat_101/_449 = _Recvclient_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_1999_concat_101", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]]
Caused by op 'MiddleAndRPN_/conv21/kernel/read', defined at:
File "/home/administrator/Documents.orig/Kumar_FileSystem/3D_Object_Detection/voxelnet-master/test.py", line 58, in
avail_gpus=cfg.GPU_AVAILABLE.split(',')
File "/home/administrator/Documents.orig/Kumar_FileSystem/3D_Object_Detection/voxelnet-master/model/model.py", line 70, in init
input=feature.outputs, alpha=self.alpha, beta=self.beta, training=self.is_train)
File "/home/administrator/Documents.orig/Kumar_FileSystem/3D_Object_Detection/voxelnet-master/model/rpn.py", line 97, in init
temp_conv, training=self.training, activation=False, bn=False, name='conv21')
File "/home/administrator/Documents.orig/Kumar_FileSystem/3D_Object_Detection/voxelnet-master/model/rpn.py", line 142, in ConvMD
temp_conv = tf.layers.conv2d(pad, Cout, k, strides=s, padding="valid", reuse=tf.AUTO_REUSE, name=scope)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/layers/convolutional.py", line 621, in conv2d
return layer.apply(inputs)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/layers/base.py", line 828, in apply
return self.call(inputs, *args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/layers/base.py", line 699, in call
self.build(input_shapes)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/layers/convolutional.py", line 144, in build
dtype=self.dtype)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/layers/base.py", line 546, in add_variable
partitioner=partitioner)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/checkpointable.py", line 436, in _add_variable_with_custom_getter
**kwargs_for_getter)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 1317, in get_variable
constraint=constraint)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 1079, in get_variable
constraint=constraint)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 425, in get_variable
constraint=constraint)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 394, in _true_getter
use_resource=use_resource, constraint=constraint)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 786, in _get_single_variable
use_resource=use_resource)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 2220, in variable
use_resource=use_resource)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 2210, in
previous_getter = lambda **kwargs: default_variable_creator(None, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variable_scope.py", line 2193, in default_variable_creator
constraint=constraint)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variables.py", line 235, in init
constraint=constraint)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/variables.py", line 397, in _init_from_args
self._snapshot = array_ops.identity(self._variable, name="read")
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/array_ops.py", line 142, in identity
return gen_array_ops.identity(input, name=name)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_array_ops.py", line 3187, in identity
"Identity", input=input, name=name)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py", line 787, in _apply_op_helper
op_def=op_def)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py", line 3392, in create_op
op_def=op_def)
File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py", line 1718, in init
self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value MiddleAndRPN_/conv21/kernel
[[Node: MiddleAndRPN_/conv21/kernel/read = IdentityT=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"]]
[[Node: concat_101/_449 = _Recvclient_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_1999_concat_101", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]]
Process finished with exit code 1
Hi, many thanks for your source, very helpful.
But when I run the train.py, there is out of memory issue as below:
ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[1,12,402,354,128].......
The memory = 1 x 12 x 402 x 354 x 128 = 172GB, super big. I wonder does it make sense.
Would you please give some hints how it works? Very appreciate for your help.
请问作者你的运行环境是什么?运行时间显示的是多少呢?
我的运行环境是一块1080ti显卡,显示的运行时间是0.6-0.8秒左右一张
还有就是我看您使用的卷积操作全部是在一个convMD函数中,但是我将他们全部替换成tf.layer.conv2d和tf.layer.conv3d了,而且我将2D卷积替换成了标准的VGG16了,请问这样对网络会有影响吗?
It seems there is a mismatch between the coordinate systems in data_aug.py
. The voxel_dict
is generated in lidar coordinates while the label
is generated in the camera coordinates.
K is the max voxel number in the paper and the author said "it is possible to only store a limited number of voxels (K) and ignore points coming from voxels with few points". But I cannot find where you define K in the code. For example, # [ΣK, 35/45, 7] self.feature = tf.placeholder(tf.float32, [None, cfg.VOXEL_POINT_COUNT, 7], name='feature')
where K can be any shape in class FeatureNet
. Could you please explain why? Thanks!
( see issue tsinghua-rll/VoxelNet-tensorflow#33 )
i'm having trouble understanding why the p_map layer doesn't have 'activation=False':
it's fed into a sigmoid, so if the activations are ReLU'd to be non-negative, it seems the objectness outputs will be limited to [.5,1]. maybe even if that's a bit wrong-ish, it doesn't much matter somehow? I.e. it messes up the gradient for the objectness somewhat, and compresses the range of confidences, but maybe that doesn't have a huge impact in the end?
it seems that, with the fixes in this repo, you're close to reproducing the original-paper-quality results, so i guess that means the impact can't be too large. BTW, thanks for sharing your efforts and fixes!
Hi, thanks for sharing your code, it's really wonderful.
It would be great to know what's the inference time of the code, the paper claimed a 225ms inference time where the voxel input feature computation takes 5ms, feature learning net takes 20ms, convolutional middle layers take 170ms and I'm a little curious about that. Can you please share that? thanks!
KITTI数据集里,lable_2里只有training没有testing,作为测试的标签在哪?
Is there any dataset which deals with only LiDAR data and doesn't use images for reference?
Have you worked on this type of problem?
Hi,
very good work :-)
I have a question about the visualization of the grid on the LIDAR point clouds that is mentioned in the paper.
In the part of voxel partitioning, do you have in your code implemented already the visualization of this grid on the input raw point cloud? (figure 2 of https://arxiv.org/pdf/1711.06396.pdf)
thanks in advance
I run the test.py and the visualizations seems to be good, however they are flipped as in #18. I assume that blue boxes are the ones with the score lower than threshold and that violet boxes are correct predictions. However, the number of lines in prediction/*.txt files is equal to the number of blue boxes. Additionally, evaluation script gives a following performance, which proves that wrong boxes are being checked.
start to eval 3D bounding boxes...
save ./predictions/plot/car_detection_3d.txt
car_detection_3d AP: 0.003730 0.003682 0.003682
Could anybody comment on this, please?
Hi, thanks for your implementation of voxelnet. Since this is my first time to train with multi-gpu, I am confused with the way you use scope for multi-gpu training.
What's the goal of using name node when creating model.
From my understanding of get_variable_scope().reuse_variables, it is used when we want to reuse the variable under the same scope. However, since variables are created under different name scopes, how can variables be reused under different scopes? Does it mean the name node is not being used when getting variable scope?
Can the code be edited so as to train for pedestrians and cyclists along with car? Or is it that the code is only for training one of the three classes at once. What can be done in code as to train for car, pedestrians and cyclists all at once?
Is there a detailed script for splitting them? Thanks
Thank you for sharing such a nice implementation code in advance :-)
Follwing Line 270 in utils.py
x, y, z = np.sum(roi, axis=0) / 8
should be replaced with the follwoing
x = np.sum(roi[:, 0], axis=0)/ 8
y = np.sum(roi[0:4, 1], axis=0)/ 4
z = np.sum(roi[:, 2], axis=0)/ 8
This makes sure that the x,y, z is the location of the bottom center of the bounding box.
Hello,
Since VoxelNet deals with only LiDAR data to detect objects, Why cropping of data based on projection on image plane has been done in this implementation?
If this is done to make Point Cloud data sparse, it can be done through random sampling as mentioned in Research paper on VoxelNet.
Can you please comment on the issues faced while using jaesinema's work https://github.com/jeasinema/VoxelNet-tensorflow.
Thanks,
Sakshi
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.