gliese581gg / yolo_tensorflow Goto Github PK
View Code? Open in Web Editor NEWtensorflow implementation of 'YOLO : Real-Time Object Detection'
License: Other
tensorflow implementation of 'YOLO : Real-Time Object Detection'
License: Other
First, my sincere thanks for making the implementation available in tensorflow framework.
Problem 1: When I run on "small" weight file, I sometimes face the issue sometimes not even for the same image as present in the test folder.
The issue is "OverflowError: signed integer is less than minimum"
My PC specifics have a CPU RAM of 12gb and a GPU TITAN X
Problem 2: When I run on "tiny" weight file, the image after detection shows rectangle made on different parts even when testing multiple times on the same image. Also, the the custom setting seem not to work in my case.
Please do help. Thanks.
Would you release the training code?
I follow the guide and successfully run the code on my computer with a GTX 1060 GPU.I use the test image under test file.It takes about 5 minutes(maybe most of the time is used for loading model weights ).I saw the yolo demo on youtube.It's real-time.What's the difference?How can i achieve the real-time demo result with my computer ? Or is it impossibe with tensorflow?
@gliese581gg hey,
I want to extract weights of yolov2-tiny-voc.weights. But this code supports only yolo1 right ? How can I extract weights of tiny yolov2 ? please guide me.
Thanks in advance!
Hi everyone,
Could anyone please show me how to extract weight values from darknet's (.weight) files to run with YOLO_tensorflow?
Thanks
Hi, I understand YOLO can't make use of multiple cores; is this implementation able to use all of the cores on my machine?
I have a better code about yolo https://github.com/Stinky-Tofu/Stronger-yolo
Hello,
From the code, it seems the YOLO small implementation is the full implementation per the YOLO paper (with 24 Conv layers) and the YOLO tiny is what in the paper they call Fast YOLO.
I probably miss something here as I don't understand why do you call the full YOLO implementation small?
Thanks in advance for the clarification!
I used one class cfg and .weights file like this: ./darknet yolo test cfg/yolo1-tiny-obj.cfg yolo1-tiny-obj_40000.weights. Then error happened in [detection] layer: 15: darknet: ./src/detection_layer.c:25: make_detection_layer: Assertion `sideside((1 + l.coords)*l.n + l.classes) == inputs' failed.
已放弃 (核心已转储)
My cfg file like this:
[net]
batch=64
subdivisions=8
height=448
width=448
channels=3
momentum=0.9
decay=0.0005
saturation=.75
exposure=.75
hue = .1
learning_rate=0.0005
policy=steps
steps=200,400,600,800,20000,30000
scales=2.5,2,2,2,.1,.1
max_batches = 40000
[convolutional]
batch_normalize=1
filters=16
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky
[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=256
activation=leaky
[connected]
output= 1470
activation=linear
[detection]
classes=1
coords=4
rescore=1
side=7
num=2
softmax=0
sqrt=1
jitter=.2
object_scale=1
noobject_scale=.5
class_scale=1
coord_scale=5
Have anyone known how to solve the problem? Thank you.
Can we implement YOLO on an embedded system, like a Raspberry Pi 3 Model B? This repo contains an optimised version of YOLO using TensorFlow. So I wanted help on running this code on RPi.
hi,I try to convert the yolo-tiny.weights
(download form YOLO),and it success to create the yolo-tiny.ckpt
,but when I test that yolo-tiny.ckpt
(python YOLO_tiny_tf.py
):
Detect from person.jpg class : aeroplane , [x,y,w,h]=[168759,167882,13921232896,8060527616], Confidence = 92084104.0 Traceback (most recent call last): File "YOLO_tiny_tf.py", line 237, in <module> main(sys.argv) File "YOLO_tiny_tf.py", line 232, in main yolo = YOLO_TF(argvs) File "YOLO_tiny_tf.py", line 30, in __init__ if self.fromfile is not None: self.detect_from_file(self.fromfile) File "YOLO_tiny_tf.py", line 124, in detect_from_file self.detect_from_cvmat(img) File "YOLO_tiny_tf.py", line 116, in detect_from_cvmat self.show_results(img,self.result) File "YOLO_tiny_tf.py", line 203, in show_results cv2.rectangle(img_cp,(x-w,y-h),(x+w,y+h),(0,255,0),2) OverflowError: signed integer is less than minimum
Hi, would you like to tell me why no softmax function used ? And would you like to share your cfg file ?
@gliese581gg , Hello!when I use this project to run the YOLO_small_tf.py like this picture.return the confiden is 1.1165,could you tell me why the confidence more than 1.this is unreasonable.Thank you very much!
result is
for i in range(len(boxes_filtered)):
if probs_filtered[i] == 0 : continue
for j in range(i+1,len(boxes_filtered)):
if self.iou(boxes_filtered[i],boxes_filtered[j]) > self.iou_threshold :
probs_filtered[j] = 0.0
filter_iou = np.array(probs_filtered>0.0,dtype='bool')
boxes_filtered = boxes_filtered[filter_iou]
probs_filtered = probs_filtered[filter_iou]
classes_num_filtered = classes_num_filtered[filter_iou]
This code indicates that you remove the high iou, but I think you should remove the low.
HI ,
I have extracted the weights for YOLO tiny and try to use your code to predicted the person.jpg... adn the follow error came up.
Loading complete!
Detect from test/person.jpg
class : bird , [x,y,w,h]=[4764318,-2995212,997766463488,135557791744], Confidence = 17189599232.0
Traceback (most recent call last):
File "YOLO_tiny_tf.py", line 237, in
main(sys.argv)
File "YOLO_tiny_tf.py", line 232, in main
yolo = YOLO_TF(argvs)
File "YOLO_tiny_tf.py", line 30, in init
if self.fromfile is not None: self.detect_from_file(self.fromfile)
File "YOLO_tiny_tf.py", line 124, in detect_from_file
self.detect_from_cvmat(img)
File "YOLO_tiny_tf.py", line 116, in detect_from_cvmat
self.show_results(img,self.result)
File "YOLO_tiny_tf.py", line 203, in show_results
cv2.rectangle(img_cp,(x-w,y-h),(x+w,y+h),(0,255,0),2)
OverflowError: signed integer is less than minimum
Any ideas ? ... the confident level looks way too big .
I have also tried to use the yolo_small weights .. and basically I got NANs in everything.
fixed (rewrote all prints for python 3.6)
When trying to load YOLO_small.ckpt
, at line self.fc_32 = self.fc_layer(32,self.fc_30,1470,flat=False,linear=True)
I get the error:
modprobe: ERROR: could not insert 'nvidia_378_uvm': Invalid argument
E tensorflow/stream_executor/cuda/cuda_driver.cc:509] failed call to cuInit: CUDA_ERROR_UNKNOWN
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:158] retrieving CUDA diagnostic information for host: vm-gpu
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:165] hostname: vm-gpu
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:189] libcuda reported version is: 367.57.0
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:363] driver version file contents: """NVRM version: NVIDIA UNIX x86_64 Kernel Module 367.57 Mon Oct 3 20:37:01 PDT 2016
GCC version: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
"""
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:193] kernel reported version is: 367.57.0
I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:300] kernel version seems to match DSO: 367.57.0
Is the driver version hard coded into the checkpoint file? My driver is 367.57.0, as you can tell. I can run other tensorflow code fine. Using tensorflow-gpu=0.12.1. Using the same code on an exact same machine with a newer drive is fine, but this machine cannot have its drivers updated for reasons, so I'm wondering if it's possible to run this file with the older driver. I use CUDA 8.0 and cuDNN 5.1
Hi @gliese581gg , thanks for your contribution. I am trying to use YOLO_tensorflow with my own data. In my case, I have only one class instead of twenty. But the predicted results look wired.
Detect from test/000001.jpg
class : person , [x,y,w,h]=[45369,8647,126158,65567124], Confidence = 244520.609375
class : person , [x,y,w,h]=[-26802,-5398,5088597,19755172], Confidence = 232279.8125
class : person , [x,y,w,h]=[12258,-17517,17608134,1292194], Confidence = 183967.25
class : person , [x,y,w,h]=[1019,22160,96605616,196041040], Confidence = 178907.359375
class : person , [x,y,w,h]=[35851,10878,123235376,17968262], Confidence = 151432.171875
class : person , [x,y,w,h]=[71956,851,852949,11031440], Confidence = 145848.53125
class : person , [x,y,w,h]=[7682,-25236,22954056,538540], Confidence = 132359.234375
class : person , [x,y,w,h]=[-21694,-13725,40971524,1902263], Confidence = 95931.6640625
class : person , [x,y,w,h]=[38253,19276,6859727,48585184], Confidence = 89467.0
class : person , [x,y,w,h]=[13523,-24957,4553577,1423567], Confidence = 74490.46875
class : person , [x,y,w,h]=[3787,-3641,992139,5403050], Confidence = 70976.2265625
class : person , [x,y,w,h]=[-10891,-4916,3603213,13878912], Confidence = 56827.625
class : person , [x,y,w,h]=[-12883,-25800,1299137,83736880], Confidence = 55708.5625
class : person , [x,y,w,h]=[-31738,11437,2519135,274351072], Confidence = 53423.0039062
class : person , [x,y,w,h]=[8397,-37182,2389233,4386721], Confidence = 48881.5351562
class : person , [x,y,w,h]=[34402,-34473,10568053,5177819], Confidence = 41862.3554688
class : person , [x,y,w,h]=[13694,24815,7719035,11419736], Confidence = 40599.4453125
class : person , [x,y,w,h]=[462,-7726,226900816,80183712], Confidence = 38687.9257812
class : person , [x,y,w,h]=[14439,-13202,79316960,99062216], Confidence = 38239.8046875
class : person , [x,y,w,h]=[-14805,-19603,929677,1499569], Confidence = 33585.4882812
class : person , [x,y,w,h]=[3124,-11344,12957400,74425856], Confidence = 22444.0820312
class : person , [x,y,w,h]=[-31926,27449,1705319,7300435], Confidence = 12408.9472656
class : person , [x,y,w,h]=[-12145,7537,1114292,19094782], Confidence = 11941.6816406
class : person , [x,y,w,h]=[-53315,-8329,277749888,34554292], Confidence = 10963.9599609
class : person , [x,y,w,h]=[1253,30142,157998,660307], Confidence = 10302.4365234
class : person , [x,y,w,h]=[19752,21742,146969440,2590379], Confidence = 7036.48242188
class : person , [x,y,w,h]=[-18835,18027,3787717,6480133], Confidence = 3276.29248047
class : person , [x,y,w,h]=[15692,-2958,2396650,2175370], Confidence = 3019.89477539
class : person , [x,y,w,h]=[-63202,-22727,1383302,37817744], Confidence = 2815.88476562
class : person , [x,y,w,h]=[-22326,-14030,19698512,30643840], Confidence = 2545.984375
class : person , [x,y,w,h]=[-29970,-8228,3057553,373867], Confidence = 2258.04638672
class : person , [x,y,w,h]=[51746,8662,122952992,5934942], Confidence = 1335.06506348
class : person , [x,y,w,h]=[-18909,27509,15886056,11232379], Confidence = 1284.54443359
class : person , [x,y,w,h]=[2639,-4647,236642752,14768430], Confidence = 404.019073486
init done
opengl support available
Elapsed time : 0.811434030533 secs
I am using yolo-tiny network. How to implement my own data, when I have few classes?
you can just merge bounding boxes when both of them are the same classes,otherwise it seems not suitable
I have read your code about tensorflow-yolo implementation, which is awesome. I am just wordering when could you release the the training function of yolo? Thx
Hi, i'd like to know and understand the structure of the code,
so i can try to implement the summary and see the graph of the model
with tensorboard.
Best
Andrea
I followed the weight_extractor doc for converting yolov2-tiny.cfg
and yolov2-tiny.weights
using the following command
./darknet yolo test cfg/yolov2-tiny.cfg yolov2-tiny.weights
However, there were no text file written to cjy
folder. The output was this :
First section must be [net] or [network]: Success
Any ideas on this ? @gliese581gg
I tried to write a script to extract weight values from darknet's file.But I failed.The darknet's yolo-tiny.weight file is 172M.While I extracted weights referring to the structure of the yolo-tiny network ,I only got 123M's weights.Anything I missed? Is there something else in the yolo-tiny.weight file?
Any instruction is appreciated!
PS:Thank you for your great work!
I know this implementation is only for testing. But I went through the paper got to know the loss function and all. But what I could't understand is how to obtain above values for training images ? There is no clear explanation for that in their paper.
I think that the 'classes_num_filtered' variant should be derived from 'probs', not 'filter_mat_probs' in interpret_output function.Could you tell me if it is the right thing to do?
Hi everyone!
I'm doing this project and I integrate in it YOLO.
As you can read, I'm developing a model to partecipate to ImageNET VID Challenge,
here is my code:
https://github.com/DrewNF/Tensorflow_Object_Tracking_Video
How do I detect the faces realtime ?
Good morning! I have trained my own model with the darknet framework from the official web and I get the .weights file as the result. I want to know how to tranform the .weights file into .ckpt file and to use your program to detect pictures. Thanks a lot!
Why not use .pb format weights? (https://github.com/thtrieu/darkflow)
I tried to use YOLO_weight_extractor by "yolo.weights" and have made a "YOLO_full.ckpt" successfully. After then, I refered "YOLO_small_tf.py" to make a new "YOLO_full_tf.py" by myself for detection based on "YOLO_full.ckpt", but the parameters (x, y, w, h) of detected bounding boxes were very strange (some very big integers). I think there should be some problems in "YOLO_full_tf.py". If possible, could you please tell me about difference between "YOLO_small_tf.py" and "YOLO_full_tf.py" ?
I will appreciate your guidance.
I have a question. How to use this code to detect object in my own video? Or whether does your code can only deal with image?
I've trained yolov3 on mobilenet backend and get a good MAP(about 90M and 2 times faster than keras yolov3).I upload my code for mobilenet-yolov3 on https://github.com/Adamdad/keras-YOLOv3-mobilenet.git
use it as you wish
download & tar YOLO_face.tar
python ./YOLO_face_tf.py -fromfile ./data/person.jpg
error:
W tensorflow/core/framework/op_kernel.cc:993] Data loss: Unable to open table file weights/YOLO_face: Failed precondition: weights/YOLO_face: perhaps your file is in a different file format and you need to use a different restore operator?
W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open weights/YOLO_face: Failed precondition: weights/YOLO_face: perhaps your file is in a different file format and you need to use a different restore operator?
W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open weights/YOLO_face: Failed precondition: weights/YOLO_face: perhaps your file is in a different file format and you need to use a different restore operator?
W tensorflow/core/framework/op_kernel.cc:993] Data loss: Unable to open table file weights/YOLO_face: Failed precondition: weights/YOLO_face: perhaps your file is in a different file format and you need to use a different restore operator?
I want to run this project on windows10 tensorflow. How to achieve?
Could you please explain what is happening in the below lines.
The final fc layer of 1470 values are split into 3 branches for class prob--scales--and boxes
But how it is used to predict the exact boxes and the dimensions are confusing me.
class_probs = np.reshape(output[0:980],(7,7,20))
scales = np.reshape(output[980:1078],(7,7,2))
boxes = np.reshape(output[1078:],(7,7,2,4))
offset = np.transpose(np.reshape(np.array([np.arange(7)]*14),(2,7,7)),(1,2,0))
boxes[:,:,:,0] += offset
boxes[:,:,:,1] += np.transpose(offset,(1,0,2))
boxes[:,:,:,0:2] = boxes[:,:,:,0:2] / 7.0
boxes[:,:,:,2] = np.multiply(boxes[:,:,:,2],boxes[:,:,:,2])
boxes[:,:,:,3] = np.multiply(boxes[:,:,:,3],boxes[:,:,:,3])
run: python YOLO_tiny_tf.py -test.jpg
error shows up as follow:
C:\Users\Max\Anaconda3\envs\tensorflow\python.exe E:/condaDev/YOLO_tensorflow-master/YOLO_tiny_tf.py
Building YOLO_tiny graph...
Layer 1 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 16, Input channels = 3
Layer 2 : Type = Pool, Size = 2 * 2, Stride = 2
Layer 3 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 32, Input channels = 16
Layer 4 : Type = Pool, Size = 2 * 2, Stride = 2
Layer 5 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 64, Input channels = 32
Layer 6 : Type = Pool, Size = 2 * 2, Stride = 2
Layer 7 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 128, Input channels = 64
Layer 8 : Type = Pool, Size = 2 * 2, Stride = 2
Layer 9 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 256, Input channels = 128
Layer 10 : Type = Pool, Size = 2 * 2, Stride = 2
Layer 11 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 512, Input channels = 256
Layer 12 : Type = Pool, Size = 2 * 2, Stride = 2
Layer 13 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 1024, Input channels = 512
Layer 14 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 1024, Input channels = 1024
Layer 15 : Type = Conv, Size = 3 * 3, Stride = 1, Filters = 1024, Input channels = 1024
Layer 16 : Type = Full, Hidden = 256, Input dimension = 50176, Flat = 1, Activation = 1
Layer 17 : Type = Full, Hidden = 4096, Input dimension = 256, Flat = 0, Activation = 1
Layer 19 : Type = Full, Hidden = 1470, Input dimension = 4096, Flat = 0, Activation = 0
2018-08-24 13:26:27.092913: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
WARNING:tensorflow:From C:\Users\Max\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\util\tf_should_use.py:118: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.
Instructions for updating:
Use tf.global_variables_initializer
instead.
Loading complete!
seems run partly, outputs some info, but the rest part disappeared
Hi,
I come across an error when I run the demo.
Here is what I type:
python YOLO_tiny_tf.py -fromfile /home/kang/Documents/work_code_PC1/online_code/YOLO_tensorflow/test/person.jpg
And It shows:
Detect from /home/kang/Documents/work_code_PC1/online_code/YOLO_tensorflow/test/person.jpg
Traceback (most recent call last):
File "YOLO_tiny_tf.py", line 237, in <module>
main(sys.argv)
File "YOLO_tiny_tf.py", line 232, in main
yolo = YOLO_TF(argvs)
File "YOLO_tiny_tf.py", line 30, in __init__
if self.fromfile is not None: self.detect_from_file(self.fromfile)
File "YOLO_tiny_tf.py", line 124, in detect_from_file
self.detect_from_cvmat(img)
File "YOLO_tiny_tf.py", line 107, in detect_from_cvmat
self.h_img,self.w_img,_ = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'
I do not know where the error comes out. Because I have already input the image with
-fromfile /home/kang/Documents/work_code_PC1/online_code/YOLO_tensorflow/test/person.jpg
Can anyone help? Thank you.
When I run
python YOLO_small_tf.py -fromfile /Users/yashajain/Downloads/yolotf-master/test/person.jpg
It builds the network , but fails with :
ValueError: Restore called with invalid save path: 'weights/YOLO_small.ckpt'. File path is: 'weights/YOLO_small.ckpt'
I have the YOLO_small.ckpt file in weights/YOLO_small.ckpt'
When I conducted sudo ./darknet yolo test ./cfg/yolo-tiny.cfg ./yolo-tiny.weights to get yolo-tiny.ckpt. Error was ./darknet:找不到命令? Have you run into? Thank you.
Hi there, sorry about that to post this here, i was trying to write yolo in torch but struggled the backward function for so many days, but the gradients are always exploding slowly, could you kindly shed a light on my codes? Thank you so much.
gradInput[{ {}, {}, 1, {}, {} }] = self.mse:backward(torch.cmul(self.x_buffer, x, coord_mask), tx)
gradInput[{ {}, {}, 2, {}, {} }] = self.mse:backward(torch.cmul(self.y_buffer, y, coord_mask), ty)
gradInput[{ {}, {}, 3, {}, {} }] = self.mse:backward(torch.cmul(self.w_buffer, w, coord_mask), tw)
gradInput[{ {}, {}, 4, {}, {} }] = self.mse:backward(torch.cmul(self.h_buffer, h, coord_mask), th)
gradInput[{ {}, {}, 5, {}, {} }] = self.mse:backward(torch.cmul(self.conf_buffer, conf, coord_mask), tconf)
gradInput[{ {}, {}, { 6, 5 + nC }, {}, {} }][self.cls_mask] = self.ce:backward(torch.cmul(self.cls_buffer, cls), tcls)
Hi! There is a way to compile this detector with the mobile version for android of tensorflow?
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
Thanks in advance.
Hi gliese581gg,
I follow this YOLO paper to write the detection layer,
but the output is not convergent.
I wonder if fc layer output values would influence the convergence status.
I tried to transform all the element in fc layer output to the range[0~1] with tensorflow API "tf.nn.sigmoid",
but the detection layer out is still not convergent.
In your opinion, does the fc layer output (or other factors) matter to the convergence status?
Could you give some suggestions for me?
Thank you very much!
Tried to use this YOLO implementation to detect cars in a video. Have modified YOLO_small to include return marked image, and am also including a Jupyter Notebook template to try the model over a video.
The weights seem to be off. Also, usually when a graph s saved, there are either three files or just one '*.ckpt' file. For the face network the weights have only two files. Nevertheless, it doesn't show an error on restoring form those files. But it is unable to detect even one face.
For example, I want to detect more than one person on my image, how could I use it?
Hi, I use my own .weights file from the training of the darknet, and I use your code to test. I modified the network structure and it loads weights successfully. But the outputs of the last layer are very very large numbers about 70000+ instead of smaller than 1. Would you like to tell me why, I have been traped in it for several days.Thank you very very much!!
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.