matpalm / bnn Goto Github PK
View Code? Open in Web Editor NEWbee detection tensorflow conv net for a rasp pi on side of a hive
Home Page: http://matpalm.com/blog/counting_bees/
License: MIT License
bee detection tensorflow conv net for a rasp pi on side of a hive
Home Page: http://matpalm.com/blog/counting_bees/
License: MIT License
Hi,
I was wondering if you could help me out with getting started on using this program. If I am starting with new images, which parts should I delete from a fresh download of yours (i.e. should I delete the existing labels.db file and place my new pictures into 'training' 'test' and 'unlabelled' folders? I tried following your README file but I am having some issues making it work. Any assistance that you could provide would be greatly appreciated.
Thank you,
./merge_dbs.py --from-db a.db --to-db b.db
should be
./merge_dbs.py --from-db a.db --into-db b.db
having to include default flags across different scripts is annoying
e.g. --base-filter-size 4 --no-use-batch-norm --width 1024 height 768
would make sense to move these into a config.json
and standardise mixing the contents of this with the use of argparse
Hi,
I applied this process to an image sequence from a video of hornet attacking my hives. But in the end, nothing is detected in the "predict_example" series:
I can give a link to the training files I used:
https://rogerlambda.info/nextcloud/index.php/s/oH7Ck8CGBDojg78
and the test files :
https://rogerlambda.info/nextcloud/index.php/s/KKWZxBeYS8LMGAP
What do you think? Too few hornets in the image (one or 2 visible in the same time) ? Bad background? Too few images (70 and 90) labelled?
Thanks!
Sometimes you might have an image in your dataset with no bees present. It would be nice if data.py and train.py could automatically skip unlabeled files, assuming that they don't have any bees in them. Or, alternatively, if we could make an image as containing no bees.
Hi,
I'm trying to use bnn to count bees but I have an error at the training step.
I have one image file in training and test directories.
Is there something wrong with my image ?
[picture,](url
)
Thank you for your help,
Loic
PS: let me know if you need the output of the previous steps
I ran:
./label_ui.py \
--image-dir sample_data/training/ \
--label-db sample_data/labels.db \
--width 1365 --height 1024
./materialise_label_db.py \
--label-db sample_data/labels.db \
--directory sample_data/labels/ \
--width 1365 --height 1024
./data.py \
--image-dir sample_data/training/ \
--label-dir sample_data/labels/ \
--rotate --distort \
--patch-width-height 256
./train.py \
--run r12 \
--steps 2 \
--train-steps 2 \
--batch-size 4 \
--train-image-dir sample_data/training/ \
--test-image-dir sample_data/test/ \
--label-dir sample_data/labels/ \
--pos-weight 5 \
--patch-width-height 256 \
--width 1365 --height 1024
The output of train.py
is:
opts Namespace(base_filter_size=8, batch_size=4, connected_components_threshold=0.05, flip_left_right=False, height=1024, label_db='label.201802_sample.db', label_dir='sample_data/labels/', learning_rate=0.001, no_use_batch_norm=False, no_use_skip_connections=False, patch_width_height=256, pos_weight=5.0, random_rotate=False, run='r12', secs=None, steps=2, test_image_dir='sample_data/test/', train_image_dir='sample_data/training/', train_steps=2, width=1365)
WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/control_flow_ops.py:423: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
len(rgb_filenames) 1 CACHE
WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.
For more information, please see:
* https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md
* https://github.com/tensorflow/addons
If you depend on functionality not listed there, please file an issue.
num_test_files= 1 batch_size= 4 => num_test_steps= 0
TRAIN MODEL
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
inputs (InputLayer) (None, 256, 256, 3) 0
__________________________________________________________________________________________________
conv2d (Conv2D) (None, 128, 128, 8) 224 inputs[0][0]
__________________________________________________________________________________________________
batch_normalization_v1 (BatchNo (None, 128, 128, 8) 32 conv2d[0][0]
__________________________________________________________________________________________________
re_lu (ReLU) (None, 128, 128, 8) 0 batch_normalization_v1[0][0]
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 64, 64, 16) 1168 re_lu[0][0]
__________________________________________________________________________________________________
batch_normalization_v1_1 (Batch (None, 64, 64, 16) 64 conv2d_1[0][0]
__________________________________________________________________________________________________
re_lu_1 (ReLU) (None, 64, 64, 16) 0 batch_normalization_v1_1[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, 32, 32, 32) 4640 re_lu_1[0][0]
__________________________________________________________________________________________________
batch_normalization_v1_2 (Batch (None, 32, 32, 32) 128 conv2d_2[0][0]
__________________________________________________________________________________________________
re_lu_2 (ReLU) (None, 32, 32, 32) 0 batch_normalization_v1_2[0][0]
__________________________________________________________________________________________________
conv2d_3 (Conv2D) (None, 16, 16, 64) 18496 re_lu_2[0][0]
__________________________________________________________________________________________________
batch_normalization_v1_3 (Batch (None, 16, 16, 64) 256 conv2d_3[0][0]
__________________________________________________________________________________________________
re_lu_3 (ReLU) (None, 16, 16, 64) 0 batch_normalization_v1_3[0][0]
__________________________________________________________________________________________________
e4nn (UpSampling2D) (None, 32, 32, 64) 0 re_lu_3[0][0]
__________________________________________________________________________________________________
d1_e3 (Concatenate) (None, 32, 32, 96) 0 e4nn[0][0]
re_lu_2[0][0]
__________________________________________________________________________________________________
conv2d_4 (Conv2D) (None, 32, 32, 32) 27680 d1_e3[0][0]
__________________________________________________________________________________________________
batch_normalization_v1_4 (Batch (None, 32, 32, 32) 128 conv2d_4[0][0]
__________________________________________________________________________________________________
re_lu_4 (ReLU) (None, 32, 32, 32) 0 batch_normalization_v1_4[0][0]
__________________________________________________________________________________________________
d1nn (UpSampling2D) (None, 64, 64, 32) 0 re_lu_4[0][0]
__________________________________________________________________________________________________
d2_e2 (Concatenate) (None, 64, 64, 48) 0 d1nn[0][0]
re_lu_1[0][0]
__________________________________________________________________________________________________
conv2d_5 (Conv2D) (None, 64, 64, 16) 6928 d2_e2[0][0]
__________________________________________________________________________________________________
batch_normalization_v1_5 (Batch (None, 64, 64, 16) 64 conv2d_5[0][0]
__________________________________________________________________________________________________
re_lu_5 (ReLU) (None, 64, 64, 16) 0 batch_normalization_v1_5[0][0]
__________________________________________________________________________________________________
d2nn (UpSampling2D) (None, 128, 128, 16) 0 re_lu_5[0][0]
__________________________________________________________________________________________________
d3_e1 (Concatenate) (None, 128, 128, 24) 0 d2nn[0][0]
re_lu[0][0]
__________________________________________________________________________________________________
conv2d_6 (Conv2D) (None, 128, 128, 8) 1736 d3_e1[0][0]
__________________________________________________________________________________________________
batch_normalization_v1_6 (Batch (None, 128, 128, 8) 32 conv2d_6[0][0]
__________________________________________________________________________________________________
re_lu_6 (ReLU) (None, 128, 128, 8) 0 batch_normalization_v1_6[0][0]
__________________________________________________________________________________________________
logits (Conv2D) (None, 128, 128, 1) 9 re_lu_6[0][0]
==================================================================================================
Total params: 61,585
Trainable params: 61,233
Non-trainable params: 352
__________________________________________________________________________________________________
None
Traceback (most recent call last):
File "./train.py", line 103, in <module>
use_batch_norm=not opts.no_use_batch_norm)
File "/home/ponger/Apis/monitor/toBorNot2B/bnn/model.py", line 57, in construct_model
d1 = Concatenate(name='d1_e3')([d1, e3])
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py", line 538, in __call__
self._maybe_build(inputs)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/base_layer.py", line 1603, in _maybe_build
self.build(input_shapes)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/utils/tf_utils.py", line 151, in wrapper
output_shape = fn(instance, input_shape)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/layers/merge.py", line 392, in build
'Got inputs shapes: %s' % (input_shape))
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 128, 172, 64), (None, 128, 171, 32)]
Labeled as
~pi/capture/images/YMD/YMD_HMS.jpg
when images are really saved to
~/pi/images/YMDHMS.jpg
All macOS directories contain a hidden .DS_Store. All scripts now assume that the directories with training data, test data, and label data only contain images, and they read in all files in those directories. This causes the python scripts to crash when it tries to read in a .DS_Store file.
Hi @matpalm ,
that is an awesome project you have here. I struggle a bit to get it running. I did the following (on my windows 11 machine):
create a virtual environment with python -m venv
install the requirements.txt in the virtual environement
run the run_sample_training_pipeline.sh
The labeling tool opens and works fine with the sample images from you. When it then comes to the materialise_label_db.py the following error appears:
So I tried to manually install skimage as it was reported missing. Then it said install scikit-image instead of skimage, but that is already satisfied.
(beeProject) C:\Users\Chrizzl\Documents\ObjectDetection\BeeProject\bnn>pip install skimage
Collecting skimage
Downloading skimage-0.0.tar.gz (757 bytes)
Preparing metadata (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: 'C:\Users\Chrizzl\Documents\ObjectDetection\BeeProject\beeProject\Scripts\python.exe' -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Chrizzl\\AppData\\Local\\Temp\\pip-install-pu5o48n4\\skimage_31623e2a30784bacaced383f1d540476\\setup.py'"'"'; __file__='"'"'C:\\Users\\Chrizzl\\AppData\\Local\\Temp\\pip-install-pu5o48n4\\skimage_31623e2a30784bacaced383f1d540476\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\Chrizzl\AppData\Local\Temp\pip-pip-egg-info-6acej1f8'
cwd: C:\Users\Chrizzl\AppData\Local\Temp\pip-install-pu5o48n4\skimage_31623e2a30784bacaced383f1d540476\
Complete output (3 lines):
*** Please install the `scikit-image` package (instead of `skimage`) ***
----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/3b/ee/edbfa69ba7b7d9726e634bfbeefd04b5a1764e9e74867ec916113eeaf4a1/skimage-0.0.tar.gz#sha256=6c96a11d9deea68489c9b80b38fad1dcdab582c36d4fa093b99b24a3b30c38ec (from https://pypi.org/simple/skimage/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
ERROR: Could not find a version that satisfies the requirement skimage (from versions: 0.0)
ERROR: No matching distribution found for skimage
(beeProject) C:\Users\Chrizzl\Documents\ObjectDetection\BeeProject\bnn>pip install scikit-image
Requirement already satisfied: scikit-image in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (0.18.3)
Requirement already satisfied: tifffile>=2019.7.26 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (2021.11.2)
Requirement already satisfied: PyWavelets>=1.1.1 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (1.2.0)
Requirement already satisfied: numpy>=1.16.5 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (1.21.4)
Requirement already satisfied: scipy>=1.0.1 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (1.7.2)
Requirement already satisfied: imageio>=2.3.0 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (2.10.3)
Requirement already satisfied: pillow!=7.1.0,!=7.1.1,>=4.3.0 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (8.4.0)
Requirement already satisfied: matplotlib!=3.0.0,>=2.0.0 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (3.4.3)
Requirement already satisfied: networkx>=2.0 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from scikit-image) (2.6.3)
Requirement already satisfied: python-dateutil>=2.7 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (2.8.2)
Requirement already satisfied: pyparsing>=2.2.1 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (3.0.5)
Requirement already satisfied: cycler>=0.10 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (0.11.0)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from matplotlib!=3.0.0,>=2.0.0->scikit-image) (1.3.2)
Requirement already satisfied: six>=1.5 in c:\users\chrizzl\documents\objectdetection\beeproject\beeproject\lib\site-packages (from python-dateutil>=2.7->matplotlib!=3.0.0,>=2.0.0->scikit-image) (1.16.0)
Hence the script stops and I cannot start the training. I feel like I am doing something rather obvious wrong. Maybe you can help me here.
Best regards and thank you!
Hello,
I'm in the training step. I've put some
python3.6 ./train.py --run r12 --steps 300 --train-steps 50 --train-image-dir sample_data/training/ --test-image-dir sample_data/test/ --label-dir sample_data/labels/ --width 720 --height 480
and I got an error like it is looking for the same files in the test directory as in the train directory:
Exception: label bitmap img [sample_data/labels//frelons17.png] doesn't exist for training example [sample_data/test//frelons17.jpg]. did you run materialise_label_db.py?
If it is a training, shouldn't be new images? And in your dataset, they are different, so... what kind of pictures should be in this directory?
Thanks!
Hello! I've found a performance issue in /data.py: batch()
should be called before map()
, which could make your program more efficient. Here is the tensorflow document to support it.
Detailed description is listed below:
dataset.batch(batch_size)
(here) should be called before dataset.map(decode_images, num_parallel_calls=8)
(here), dataset.map(random_crop, num_parallel_calls=8)
(here), dataset.map(set_explicit_size, num_parallel_calls=8)
(here) and dataset.map(augment, num_parallel_calls=8)
(here).Besides, you need to check the function called in map()
(e.g., augment
called in dataset.map(augment, num_parallel_calls=8)
) whether to be affected or not to make the changed code work properly. For example, if augment
needs data with shape (x, y, z) as its input before fix, it would require data with shape (batch_size, x, y, z).
Looking forward to your reply. Btw, I am very glad to create a PR to fix it if you are too busy.
flake8 testing of https://github.com/matpalm/bnn on Python 3.6.3
$ flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
./sample.py:35:47: F821 undefined name 'from_files'
(opts.n, src_directory, len(from_files)))
^
1 F821 undefined name 'from_files'
1
Hello,
First of all, thank you for your work !
I will use your work for a school project but when I launch ./run_sample_training_pipeline.sh but i have a Python error : ValueError: too many values to unpack (expected 2)
The program seems to work on other, so that can be a Python version error.
On my computer i have got the Python 3.7.2 version can you give me yours ?
Thank you in advance.
I'm running into issues where the train script fills up my memory (16GB RAM) with even 900 training examples. I am attempting to utilize the semi-supervised approach described in the blog bost, but capping out on RAM before even using thousands of images.
Is there something I am doing wrong to be able to utilize more images for training? I can't seem to find others struggling with this issue so I assume I have missed a detail somewhere in the blog or the README, but I am unable to find it.
Hello when I merge two databases with your script, only the imgs table are merged not the labels table.
How can we label a set of data with several peoples and merge all the labelisation datas ?
Do I have to create an unique Id by image with uuid for exemple to avoid merge error ?
Thank you in advance for your help.
One you label images using
./label_ui.py \
--image-dir sample_data/training/ \
--label-db sample_data/labels.db \
--width 768 --height 1024
How do you save those label in .db? It just quits there's no db file created in sample_data
I'm interested your project.
I would like to try this. May I teach me how to use...
I ready sample images (size is 768x1024).
./train ... training images
./test ... test images
labeling
lebeling by label_ui.py and materialise_label_db.py
./label ... label train and test images
training <-- Occur Error
I tried to traning by train.py, but it occurred error.
$ python train.py --train-image-dir ./bee/data/train --test-image-dir ./bee/data/test --label-dir ./bee/data/label --run ./bee/bnn/ckpts
opts Namespace(base_filter_size=8, batch_size=32, flip_left_right=False, label_dir='./bee/data/label', learning_rate=0.001, no_use_batch_norm=False, no_use_skip_connections=False, patch_fraction=2, random_rotate=False, run='./bee/bnn/ckpts', secs=None, steps=100000, test_image_dir='.bee/data/test', train_image_dir='./bee/data/train', train_steps=100)
len(rgb_filenames) 8 CACHE
len(rgb_filenames) 2 CACHE
(?, 1024, 768, 3)
(?, 512, 384, 1)
patch train model...
input (?, 512, 384, 3) #589824
e1 (?, 256, 192, 8) #393216
e2 (?, 128, 96, 16) #196608
e3 (?, 64, 48, 32) #98304
e4 (?, 32, 24, 64) #49152
d1 (?, 64, 48, 32) #98304
d1+e3 (?, 64, 48, 64) #196608
d2 (?, 128, 96, 16) #196608
d2+e2 (?, 128, 96, 32) #393216
d3 (?, 256, 192, 8) #393216
d3+e1 (?, 256, 192, 16) #786432
logits (?, 256, 192, 1) #49152
full res test model...
input (?, 1024, 768, 3) #2359296
e1 (?, 512, 384, 8) #1572864
e2 (?, 256, 192, 16) #786432
e3 (?, 128, 96, 32) #393216
e4 (?, 64, 48, 64) #196608
d1 (?, 128, 96, 32) #393216
d1+e3 (?, 128, 96, 64) #786432
d2 (?, 256, 192, 16) #786432
d2+e2 (?, 256, 192, 32) #1572864
d3 (?, 512, 384, 8) #1572864
d3+e1 (?, 512, 384, 16) #3145728
logits (?, 512, 384, 1) #196608
Traceback (most recent call last):
File "/home/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1322, in _do_call
return fn(*args)
File "/home/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1307, in _run_fn
options, feed_dict, fetch_list, target_list, run_metadata)
File "/home/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1409, in _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 3145728 values, but the requested shape has 2359296
[[Node: Reshape = Reshape[T=DT_UINT8, Tshape=DT_INT32](decode_image/cond_jpeg/Merge, Reshape/shape)]]
[[Node: IteratorGetNext = IteratorGetNextoutput_shapes=[[?,512,384,3], [?,256,192,1]], output_types=[DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"]]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "train.py", line 101, in
_, xl, dl = sess.run([train_op, train_model.xent_loss, train_model.dice_loss])
File "/home/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 900, in run
run_metadata_ptr)
File "/home/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1135, in _run
feed_dict_tensor, options, run_metadata)
File "/home/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1316, in _do_run
run_metadata)
File "/home/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1335, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Input to reshape is a tensor with 3145728 values, but the requested shape has 2359296
[[Node: Reshape = Reshape[T=DT_UINT8, Tshape=DT_INT32](decode_image/cond_jpeg/Merge, Reshape/shape)]]
[[Node: IteratorGetNext = IteratorGetNextoutput_shapes=[[?,512,384,3], [?,256,192,1]], output_types=[DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"]]
You mentioned
"first round of trained models hadn't seen this and when it appeared it was a constant false positive
most of this was solved already by data augmentation and none of it was a show stopper. in general the data doesn't have much variation, which is great since that allows us to get away with a simple network and training scheme.
"
How did you took the last trained model & augmented new data on it? Instead of training all of it from scratch?
The project is very cool, I have an idea to improve bnn v3 ( RGB -> Bee count ) and i would like to try it.
The Idea is using the trained v2 as base of v3, roughly i'm thinking of removing the softmax and argmax of v2 and adding classification layer, and maybe some skip connection from the bottleneck.
I've tried adding a DHT22 sensor to my Raspberry Pi, but I can't Hivetool to recognize / read it. Enabled the sensor in Settings, selected DHT22, specified GPIO 4 (I've tried a dozen GPIOs actually), set intercept to 0 and slope to 1. When I click reread I get: Temp F, Humidity%, Dew F, Temp C
null null null null
When I use the example.py script from Adafruit to read the sensor I get:
Last valid input: 2020-04-29 15:30:40.326392
Temperature: 21.8 C
Humidity: 19.5 %
So the sensor is obviously working. What am I doing wrong with Hivetool?
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.