balancap / sdc-vehicle-detection Goto Github PK
View Code? Open in Web Editor NEWUdacity Project - Vehicle Detection
Udacity Project - Vehicle Detection
Thanks for this implementation. In ssd_common.py
using default params we have num_classes=8
; this is consistent with what is in datasets/kitti*
. I understand why no_annotations_label=9
, and think I see that these labels > num_classes
are handled in tf_bboxes_filter_labels
. However, in ssd_common.py
we have:
# Predictions, removing first void class.
sub_predictions = predictions_layer[:, :, 1:]
idxes = np.where(sub_predictions > threshold)
classes = idxes[-1]+1
scores = sub_predictions[idxes]
Does this cause an off-by-one error? I understand that the 0th index represents 'none': (0, 'Background')
, but in this case should we have specified num_classes=9
? Otherwise we do not consider the 'misc' class for KITTI ('Misc': (8, 'Misc')
, since label < num_classes
is false in this case)?
Given we have num_cls_pred = num_anchors * num_classes
predictions (see ssd_vgg_300.py
), this means that if num_classes=8
then subpredictions would only consider 7 classes. Is this correct?
Command ran:
python eval_image_classifier.py --checkpoint_path=logs/ssd_300_kitti/ --eval_dir=logs/ssd_300_kitti/eval/ --dataset_name=kitti --dataset_split_name=test --model_name=ssd_300_vgg --batch_size=1 --max_num_batches=500 --dataset_dir=/home/tfrecords/
Error:
Traceback (most recent call last):
File "eval_image_classifier.py", line 197, in <module>
tf.app.run()
File "/usr/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 48, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "check_classifier.py", line 153, in main
logits = tf.squeeze(logits)
File "/usr/lib/python2.7/site-packages/tensorflow/python/ops/array_ops.py", line 2394, in squeeze
return gen_array_ops._squeeze(input, axis, name)
File "/usr/lib/python2.7/site-packages/tensorflow/python/ops/gen_array_ops.py", line 5202, in _squeeze
"Squeeze", input=input, squeeze_dims=squeeze_dims, name=name)
File "/usr/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 528, in _apply_op_helper
(input_name, err))
ValueError: Tried to convert 'input' to a tensor and failed. Error: Dimension 1 in both shapes must be equal, but are 3 and 1
From merging shape 4 with other shapes. for 'Squeeze/packed' (op: 'Pack') with input shapes: [1,38,38,4,8], [1,19,19,6,8], [1,10,10,6,8], [1,5,5,6,8], [1,3,3,4,8], [1,1,1,4,8].
Code for eval_image_classifier.py:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import math
import six
import tensorflow as tf
from datasets import dataset_factory
from nets import nets_factory
from preprocessing import preprocessing_factory
slim = tf.contrib.slim
tf.app.flags.DEFINE_integer(
'batch_size', 100, 'The number of samples in each batch.')
tf.app.flags.DEFINE_integer(
'max_num_batches', None,
'Max number of batches to evaluate by default use all.')
tf.app.flags.DEFINE_string(
'master', '', 'The address of the TensorFlow master to use.')
tf.app.flags.DEFINE_string(
'checkpoint_path', '/tmp/tfmodel/',
'The directory where the model was written to or an absolute path to a '
'checkpoint file.')
tf.app.flags.DEFINE_string(
'eval_dir', '/tmp/tfmodel/', 'Directory where the results are saved to.')
tf.app.flags.DEFINE_integer(
'num_preprocessing_threads', 4,
'The number of threads used to create the batches.')
tf.app.flags.DEFINE_string(
'dataset_name', 'imagenet', 'The name of the dataset to load.')
tf.app.flags.DEFINE_string(
'dataset_split_name', 'test', 'The name of the train/test split.')
tf.app.flags.DEFINE_string(
'dataset_dir', None, 'The directory where the dataset files are stored.')
tf.app.flags.DEFINE_integer(
'labels_offset', 0,
'An offset for the labels in the dataset. This flag is primarily used to '
'evaluate the VGG and ResNet architectures which do not use a background '
'class for the ImageNet dataset.')
tf.app.flags.DEFINE_string(
'model_name', 'inception_v3', 'The name of the architecture to evaluate.')
tf.app.flags.DEFINE_string(
'preprocessing_name', None, 'The name of the preprocessing to use. If left '
'as `None`, then the model_name flag is used.')
tf.app.flags.DEFINE_float(
'moving_average_decay', None,
'The decay to use for the moving average.'
'If left as None, then moving averages are not used.')
tf.app.flags.DEFINE_integer(
'eval_image_size', None, 'Eval image size')
FLAGS = tf.app.flags.FLAGS
def main(_):
if not FLAGS.dataset_dir:
raise ValueError('You must supply the dataset directory with --dataset_dir')
tf.logging.set_verbosity(tf.logging.INFO)
with tf.Graph().as_default():
tf_global_step = tf.train.get_or_create_global_step()
######################
# Select the dataset #
######################
dataset = dataset_factory.get_dataset(
FLAGS.dataset_name, FLAGS.dataset_split_name, FLAGS.dataset_dir)
####################
# Select the model #
####################
network_fn = nets_factory.get_network_fn(
FLAGS.model_name,
num_classes=(dataset.num_classes - FLAGS.labels_offset),
is_training=False)
##############################################################
# Create a dataset provider that loads data from the dataset #
##############################################################
provider = slim.dataset_data_provider.DatasetDataProvider(
dataset,
shuffle=False,
common_queue_capacity=2 * FLAGS.batch_size,
common_queue_min=FLAGS.batch_size)
[image, label] = provider.get(['image', 'object/label'])
label -= FLAGS.labels_offset
#####################################
# Select the preprocessing function #
#####################################
preprocessing_name = FLAGS.preprocessing_name or FLAGS.model_name
image_preprocessing_fn = preprocessing_factory.get_preprocessing(
preprocessing_name,
is_training=False)
eval_image_size = FLAGS.eval_image_size or network_fn.default_image_size
image, label, _, _ = image_preprocessing_fn(image, label, None, eval_image_size)
images, labels = tf.train.batch([image, label], batch_size=FLAGS.batch_size, num_threads=FLAGS.num_preprocessing_threads, capacity=5 * FLAGS.batch_size, dynamic_pad=True)
####################
# Define the model #
####################
logits, _, _, _ = network_fn(images)
if FLAGS.moving_average_decay:
variable_averages = tf.train.ExponentialMovingAverage(
FLAGS.moving_average_decay, tf_global_step)
variables_to_restore = variable_averages.variables_to_restore(
slim.get_model_variables())
variables_to_restore[tf_global_step.op.name] = tf_global_step
else:
variables_to_restore = slim.get_variables_to_restore()
logits = tf.squeeze(logits)
predictions = tf.argmax(logits, 1)
labels = tf.squeeze(labels)
#reshape(labels, [labels.get_shape()[0], 1])
# Define the metrics:
names_to_values, names_to_updates = slim.metrics.aggregate_metric_map({
'Accuracy': slim.metrics.streaming_accuracy(predictions, labels),
'Recall@5': slim.metrics.streaming_recall_at_k(
logits, labels, 5),
})
# Print the summaries to screen.
for name, value in six.iteritems(names_to_values):
summary_name = 'eval/%s' % name
op = tf.summary.scalar(summary_name, value, collections=[])
op = tf.Print(op, [value], summary_name)
tf.add_to_collection(tf.GraphKeys.SUMMARIES, op)
# TODO(sguada) use num_epochs=1
if FLAGS.max_num_batches:
num_batches = FLAGS.max_num_batches
else:
# This ensures that we make a single pass over all of the data.
num_batches = math.ceil(dataset.num_samples / float(FLAGS.batch_size))
if tf.gfile.IsDirectory(FLAGS.checkpoint_path):
checkpoint_path = tf.train.latest_checkpoint(FLAGS.checkpoint_path)
else:
checkpoint_path = FLAGS.checkpoint_path
# checkpoint_path='logs/model.ckpt-220025.data-00000-of-00001'
tf.logging.info('Evaluating %s' % checkpoint_path)
slim.evaluation.evaluate_once(
master=FLAGS.master,
checkpoint_path=checkpoint_path,
logdir=FLAGS.eval_dir,
num_evals=num_batches,
eval_op=list(names_to_updates.values()),
variables_to_restore=variables_to_restore)
if __name__ == '__main__':
tf.app.run()
Hi,
is this working for fine-tune with other dataset?
when I run this command:
jupyter notebook notebooks/ssd_kitti_tests.ipynb
I met a problem when I run the following code:
`# with queues.QueueRunners(sess):
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)`
and the error information is:
INFO:tensorflow:Error reported to Coordinator: <class 'tensorflow.python.framework.errors_impl.NotFoundError'>, tfrecords/kitti_train.tfrecord [[Node: parallel_read/ReaderReadV2 = ReaderReadV2[_device="/job:localhost/replica:0/task:0/cpu:0"](parallel_read/TFRecordReaderV2, parallel_read/filenames)]]
Can anyone help me?
Hello! I am attempting to train the network using the KITTI dataset. I'm experiencing AttributeError: module 'tensorflow' has no attribute 'select'
. See the full stacktrace below. I think this might be related to my dev environment. I am using a conda virtual environment with Anaconda python 3.6.1 and Tensorflow 1.0.1 with GPU support. What versions of python and TensorFlow do you use in your implementation? Thank you.
File "train_ssd_network.py", line 540, in <module>
tf.app.run()
File "/home/blanca/miniconda2/envs/python3/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 44, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "train_ssd_network.py", line 402, in main
ssd_net.bboxes_encode(glabels, gbboxes, ssd_anchors)
File "/home/blanca/ml-experiments/SDC-Vehicle-Detection/nets/ssd_vgg_300.py", line 174, in bboxes_encode
scope=scope)
File "/home/blanca/ml-experiments/SDC-Vehicle-Detection/nets/ssd_common.py", line 191, in tf_ssd_bboxes_encode
prior_scaling, dtype)
File "/home/blanca/ml-experiments/SDC-Vehicle-Detection/nets/ssd_common.py", line 142, in tf_ssd_bboxes_encode_layer
feat_ymax, feat_xmax])
File "/home/blanca/miniconda2/envs/python3/lib/python3.6/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2605, in while_loop
result = context.BuildLoop(cond, body, loop_vars, shape_invariants)
File "/home/blanca/miniconda2/envs/python3/lib/python3.6/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2438, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "/home/blanca/miniconda2/envs/python3/lib/python3.6/site-packages/tensorflow/python/ops/control_flow_ops.py", line 2388, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "/home/blanca/ml-experiments/SDC-Vehicle-Detection/nets/ssd_common.py", line 119, in body
feat_scores = tf.select(mask, jaccard, feat_scores)
AttributeError: module 'tensorflow' has no attribute 'select'
Hi .
Q1: i want to modify the base net of ssd for my purpose . is this possible for your code ? i want to examine iception v1 , densenet , mobilenet , ... instead of vgg . is this possible ? what do i do ? where do i define your base model ?
Q2 : dose your ssd model different from the original model ?
Q3: what's your os , cuda , cudnn , tensorflow , GTX ?
Q4: if i want to fine-tune this code for detection Pedestrian , car , cyclist , what do i do ?
please help me . thanks.
Hi, Balancap,
It is a good project. The detection results on the provided test images are good.
But, when I test it on KITTI dataset, the detection results are poor. Most of the cars are missed.
Is there something wrong?
Plz anyone let me know about what should be the directory tree /path. my project is on desktop. when I execute tf_convert_data.py it does not take dataset from the given path
Hi,
I followed your instruction, and trained with kitti dataset and ssd_300_vgg base.
I could run training, but cannot run evaluation.
I tried evaluation with eval_image_classifier:
python eval_image_classifier.py --alsologtostderr --checkpoint_path=checkpoints\ssd_300_vgg.ckpt --dataset_dir=datasets\kitti --dataset_name=kitti --labels_offset=1 --dataset_split_name=train --model_name=ssd_300_vgg
But, it shows this error:
ValueError: Shape must be rank 2 but is rank 0 for 'ssd_preprocessing_train/concat' (op: 'ConcatV2') with input shapes: [1,4], [], [].
Could you please tell me how to solve it?
Please show me evaluation or inference command with trained ssd model.
Thank you
reuse = True if 'ssd' in locals() else None
ssd = ssd_vgg_300.SSDNet(params)
with slim.arg_scope(ssd.arg_scope(weight_decay=0.0005)):
predictions, localisations, logits, end_points = ssd.net(image_4d, is_training=False, reuse=reuse)
When running the above command line on the ipython notebook, the following error occurs.
What should I fix?
TypeError Traceback (most recent call last)
in ()
13 ssd = ssd_vgg_300.SSDNet(params)
14 with slim.arg_scope(ssd.arg_scope(weight_decay=0.0005)):
---> 15 predictions, localisations, logits, end_points = ssd.net(image_4d, is_training=False, reuse=reuse)
/home/nwkim/TF-Sample/SDC-Vehicle-Detection/nets/ssd_vgg_300.py in net(self, inputs, is_training, update_feat_shapes, dropout_keep_prob, prediction_fn, reuse, scope)
126 prediction_fn=prediction_fn,
127 reuse=reuse,
--> 128 scope=scope)
129 # Update feature shapes (try at least!)
130 if update_feat_shapes:
/home/nwkim/TF-Sample/SDC-Vehicle-Detection/nets/ssd_vgg_300.py in ssd_net(inputs, num_classes, feat_layers, anchor_sizes, anchor_ratios, normalizations, is_training, dropout_keep_prob, prediction_fn, reuse, scope)
392 with tf.variable_scope(scope, 'ssd_300_vgg', [inputs], reuse=reuse):
393 # Original VGG-16 blocks.
--> 394 net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1')
395 end_points['block1'] = net
396 net = slim.max_pool2d(net, [2, 2], scope='pool1')
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.pyc in repeat(inputs, repetitions, layer, *args, **kwargs)
1718 for i in range(repetitions):
1719 kwargs['scope'] = scope + '_' + str(i+1)
-> 1720 outputs = layer(outputs, *args, **kwargs)
1721 return outputs
1722
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/arg_scope.pyc in func_with_args(*args, **kwargs)
175 current_args = current_scope[key_func].copy()
176 current_args.update(kwargs)
--> 177 return func(*args, **current_args)
178 _add_op(func)
179 setattr(func_with_args, '_key_op', _key_op(func))
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.pyc in convolution(inputs, num_outputs, kernel_size, stride, padding, data_format, rate, activation_fn, normalizer_fn, normalizer_params, weights_initializer, weights_regularizer, biases_initializer, biases_regularizer, reuse, variables_collections, outputs_collections, trainable, scope)
905 _scope=sc,
906 _reuse=reuse)
--> 907 outputs = layer.apply(inputs)
908
909 # Add variables to collections.
/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.pyc in apply(self, inputs, **kwargs)
301 Output tensor(s).
302 """
--> 303 return self.call(inputs, **kwargs)
304
305
/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.pyc in call(self, inputs, **kwargs)
267 input_shapes = [x.get_shape() for x in input_list]
268 if len(input_shapes) == 1:
--> 269 self.build(input_shapes[0])
270 else:
271 self.build(input_shapes)
/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/convolutional.pyc in build(self, input_shape)
143 regularizer=self.bias_regularizer,
144 trainable=True,
--> 145 dtype=self.dtype)
146 else:
147 self.bias = None
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.pyc in get_variable(name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, partitioner, validate_shape, custom_getter)
986 collections=collections, caching_device=caching_device,
987 partitioner=partitioner, validate_shape=validate_shape,
--> 988 custom_getter=custom_getter)
989 get_variable_or_local_docstring = (
990 """%s
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.pyc in get_variable(self, var_store, name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, partitioner, validate_shape, custom_getter)
888 collections=collections, caching_device=caching_device,
889 partitioner=partitioner, validate_shape=validate_shape,
--> 890 custom_getter=custom_getter)
891
892 def _get_partitioned_variable(self,
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.pyc in get_variable(self, name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape, custom_getter)
339 reuse=reuse, trainable=trainable, collections=collections,
340 caching_device=caching_device, partitioner=partitioner,
--> 341 validate_shape=validate_shape)
342 else:
343 return _true_getter(
/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.pyc in variable_getter(getter, name, shape, dtype, initializer, regularizer, trainable, **kwargs)
256 name, shape, initializer=initializer, regularizer=regularizer,
257 dtype=dtype, trainable=trainable,
--> 258 variable_getter=functools.partial(getter, **kwargs))
259
260 # Build (if necessary) and call the layer, inside a variable scope.
/usr/local/lib/python2.7/dist-packages/tensorflow/python/layers/base.pyc in _add_variable(self, name, shape, dtype, initializer, regularizer, trainable, variable_getter)
206 initializer=initializer,
207 dtype=dtype,
--> 208 trainable=trainable and self.trainable)
209 # TODO(sguada) fix name = variable.op.name
210 if variable in existing_variables:
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.pyc in layer_variable_getter(getter, *args, **kwargs)
1308 getter = functools.partial(current_custom_getter, getter)
1309 kwargs['rename'] = rename
-> 1310 return _model_variable_getter(getter, *args, **kwargs)
1311 return layer_variable_getter
1312
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/layers/python/layers/layers.pyc in model_variable_getter(getter, name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, partitioner, rename, **)
1297 regularizer=regularizer, collections=collections, trainable=trainable,
1298 caching_device=caching_device, partitioner=partitioner,
-> 1299 custom_getter=getter)
1300
1301
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/arg_scope.pyc in func_with_args(*args, **kwargs)
175 current_args = current_scope[key_func].copy()
176 current_args.update(kwargs)
--> 177 return func(*args, **current_args)
178 _add_op(func)
179 setattr(func_with_args, '_key_op', _key_op(func))
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/variables.pyc in model_variable(name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, device, partitioner, custom_getter)
266 trainable=trainable, collections=collections,
267 caching_device=caching_device, device=device,
--> 268 partitioner=partitioner, custom_getter=custom_getter)
269 return var
270
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/arg_scope.pyc in func_with_args(*args, **kwargs)
175 current_args = current_scope[key_func].copy()
176 current_args.update(kwargs)
--> 177 return func(*args, **current_args)
178 _add_op(func)
179 setattr(func_with_args, '_key_op', _key_op(func))
/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/framework/python/ops/variables.pyc in variable(name, shape, dtype, initializer, regularizer, trainable, collections, caching_device, device, partitioner, custom_getter)
223 collections=collections,
224 caching_device=caching_device,
--> 225 partitioner=partitioner)
226
227
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.pyc in _true_getter(name, shape, dtype, initializer, regularizer, reuse, trainable, collections, caching_device, partitioner, validate_shape)
331 initializer=initializer, regularizer=regularizer, reuse=reuse,
332 trainable=trainable, collections=collections,
--> 333 caching_device=caching_device, validate_shape=validate_shape)
334
335 if custom_getter is not None:
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.pyc in _get_single_variable(self, name, shape, dtype, initializer, regularizer, partition_info, reuse, trainable, collections, caching_device, validate_shape)
682 caching_device=caching_device,
683 dtype=variable_dtype,
--> 684 validate_shape=validate_shape)
685 self._vars[name] = v
686 logging.vlog(1, "Created variable %s with shape %s and init %s", v.name,
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variables.pyc in init(self, initial_value, trainable, collections, validate_shape, caching_device, name, variable_def, dtype, expected_shape, import_scope)
195 name=name,
196 dtype=dtype,
--> 197 expected_shape=expected_shape)
198
199 def str(self):
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variables.pyc in _init_from_args(self, initial_value, trainable, collections, validate_shape, caching_device, name, dtype, expected_shape)
272 with ops.name_scope("Initializer"), ops.device(None):
273 self._initial_value = ops.convert_to_tensor(
--> 274 initial_value(), name="initial_value", dtype=dtype)
275 shape = (self._initial_value.get_shape()
276 if validate_shape else tensor_shape.unknown_shape())
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.pyc in ()
671 else:
672 init_val = lambda: initializer(
--> 673 shape.as_list(), dtype=dtype, partition_info=partition_info)
674 variable_dtype = dtype.base_dtype
675
TypeError: init() got multiple values for keyword argument 'dtype'
Hi,Thanks for your excellent implementation !
There are some errors when I run the project,so I want to kown what version of tensorflow and python do you use
i run your code with widerface dataset for face detection. after creating tfrecords and write train command i got this :
INFO: tensorflow: starting Sessions
INFO: tensorflow: starting Queues
INFO: tensorflow: global_step/sec : 0
INFO: tensorflow: global_step/sec : 0
INFO: tensorflow: global_step/sec : 0.0172539
INFO: tensorflow: global_step/sec : 0
INFO: tensorflow: global_step/sec : 0
INFO: tensorflow: global_step/sec : 0.0167292
....
Is there any problem? where is loss? Is the network training wrong?
NotFoundError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to find any matching files for /home/yuyijie/SSD-Tensorflow/checkpoints/ssd_300_vgg.ckpt
When I use these codes I found this error,there is my file structure below,I don't what is wrong,can you help me ? Thanks a lot.
/home/yuyijie/2018-07-13 10-31-05屏幕截图.png
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.