Git Product home page Git Product logo

super-resolution-using-generative-adversarial-networks's Introduction

Super Resolution using Generative Adversarial Networks

This is an implementation of the SRGAN model proposed in the paper Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network in Keras. Note that this project is a work in progress.

A simplified view of the model can be seen as below:

Implementation Details

The SRGAN model is built in stages within models.py. Initially, only the SR-ResNet model is created, to which the VGG network is appended to create the pre-training model. The VGG weights are freezed as we will not update these weights.

In the pre-train mode:

  1. The discriminator model is not attached to the entire network. Therefore it is only the SR + VGG model that will be pretrained first.

  2. During pretraining, the VGG perceptual losses will be used to train (using the ContentVGGRegularizer) and TotalVariation loss (using TVRegularizer). No other loss (MSE, Binary crosss entropy, Discriminator) will be applied.

  3. Content Regularizer loss will be applied to the VGG Convolution 2-2 layer

  4. After pre training the SR + VGG model, we will pretrain the discriminator model.

  5. During discriminator pretraining, model is Generaor + Discriminator. Only binary cross entropy loss is used to train the Discriminator network.

In the full train mode:

  1. The discriminator model is attached to the entire network. Therefore it creates the SR + GAN + VGG model (SRGAN)
  2. Discriminator loss is also added to the VGGContentLoss and TVLoss.
  3. Content regularizer loss is applied to the VGG Convolution 5-3 layer. (VGG 16 is used instead of 19 for now)

Usage

Currently, models.py contains most of the code to train and create the models. To use different modes, uncomment the parts of the code that you need.

Note the difference between the *_network objects and *_model objects.

  • The *_network objects refer to the helper classes which create and manage the Keras models, load and save weights and set whether the model can be trained or not.
  • The *_models objects refer to the underlying Keras model.

Note: The training images need to be stored in a subdirectory. Assume the path to the images is /path-to-dir/path-to-sub-dir/*.png, then simply write the path as coco_path = /path-to-dir. If this does not work, try coco_path = /path-to-dir/ with a trailing slash (/)

To just create the pretrain model:

srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1)
srgan_model = srgan_network.build_srgan_pretrain_model()

# Plot the model
from keras.utils.visualize_util import plot
plot(srgan_model, to_file='SRGAN.png', show_shapes=True)

To pretrain the SR network:

srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1)
srgan_network.pre_train_srgan(iamges_path, nb_epochs=1, nb_images=50000)

** NOTE **: There may be many cases where generator initializations may lead to completely solid validation images. Please check the first few iterations to see if the validation images are not solid images.

To counteract this, a pretrained generator model has been provided, from which you can restart training. Therefore the model can continue learning without hitting a bad initialization.

To pretrain the Discriminator network:

srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1)
srgan_network.pre_train_discriminator(iamges_path, nb_epochs=1, nb_images=50000, batchsize=16)

To train the full network (Does NOT work properly right now, Discriminator is not correctly trained):

srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1)
srgan_network.train_full_model(coco_path, nb_images=80000, nb_epochs=10)

Benchmarks

Currently supports validation agains Set5, Set14 and BSD 100 dataset images. To download the images, each of the 3 dataset have scripts called download_*.py which must be run before running benchmark_test.py test.

Current Scores (Due to RGB grid and Blurred restoration):

SR ResNet:

  • Set5 : Average PSNR of Set5 validation images : 22.1211430348
  • Set14 : Average PSNR of Set5 validation images : 20.3971611357
  • BSD100 : Average PSNR of BSD100 validation images : 20.9544390316

Drawbacks:

  • Since keras has internal checks for batch size, we have to bypass an internal keras check called check_array_length(), which checks the input and output batch sizes. As we provide the original images to Input 2, batch size doubles. This causes an assertion error in internal keras code. For now, we rewrite the fit logic of keras in keras_training_ops.py and use the bypass fit functions.
  • For some reason, the Deconvolution networks are not learning the upscaling function properly. This causes grids to form throughout the upscaled image. This is possibly due to the large (4x) upscaling procedure, but the Twitter team was able to do it.

Plans

The codebase is currently very chaotic, since I am focusing on correct implementation before making the project better. Therefore, expect the code to drastically change over commits.

Some things I am currently trying out:

  • Training the discriminator model separately properly.
  • Training the discriminator using soft labels and adversarial loss.
  • Properly train SRGAN (SR ResNet + VGG + Discriminator) model.
  • Fix the pixel grid formation when upscaling the image. (With Nearest Neighbour Upscaling).
  • Replacing the 2 deconv layers for a nearest neighbour upsampling layers.
  • Improve docs & instructions

Discussion

There is an ongoing discussion at keras-team/keras#3940 where I detail some of the outputs and attempts to correct the errors.

Requirements

  • Theano (master branch)
  • Keras 1.2.0 +

super-resolution-using-generative-adversarial-networks's People

Contributors

titu1994 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

super-resolution-using-generative-adversarial-networks's Issues

An error in keras_op.py

Line 5:
from keras.engine.training import objectives, standardize_input_data, slice_X,
standardize_sample_weights, standardize_class_weights, standardize_weights, check_loss_and_target_compatibility

There has not objectives function in keras/engine/training.py
Please check it.

Error when checking : expected x_generator to have shape (None, 3, 32, 32) but got array with shape (1, 3, 128, 128)

Traceback (most recent call last):
File "models.py", line 720, in
srgan_network.train_full_model(coco_path, nb_images=80000, nb_epochs=10)
File "models.py", line 432, in train_full_model
self._train_model(image_dir, nb_images, nb_epochs, load_generative_weights=True, load_discriminator_weights=True)
File "models.py", line 612, in train_model
X_pred = self.generative_model
.predict(x, self.batch_size)
File "/usr/local/lib/python2.7/dist-packages/Keras-1.1.1-py2.7.egg/keras/engine/training.py", line 1179, in predict
check_batch_dim=False)
File "/usr/local/lib/python2.7/dist-packages/Keras-1.1.1-py2.7.egg/keras/engine/training.py", line 111, in standardize_input_data
str(array.shape))

Exception: Error when checking : expected x_generator to have shape (None, 3, 32, 32) but got array with shape (1, 3, 128, 128)

That contradicts Scaling 3232 in srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1) in 711th line, downscale to 6464 and upscale to 256256?
So that is modified 64
64 in srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1), isn't it?

how to ready for training data?

1.Training Details and Parameters is as the paper: Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, is it?

2.the bicubic kernel is for bicubic interpolation when making the training data, does it?

how to run your code?

Hi, I'm glad to appreciate your code, but I don't know that how to implement it.
Such as benchmark_test.py, it occurs error, that is no module named 'models'. SRGAN model isn't provided, is it?

A problem occured when I execute the model.py

Hello titu1994,When I execute the model.py to plot the pretrain_model and an error occur, just as "ValueError: Dimension size must be evenly divisible by 3 but is 32
Number of ways to split should evenly divide the split dimension"
I think it is caused by the input size but I have no idea how to fix it,I wonder if you could give me some suggestion? THX

Still error when checking : (None, 3, 32, 32) but got array with shape (1, 3, 128, 128)

Yes, I have use a new version, but it occurs still error following,
Exception: Error when checking : expected x_generator to have shape (None, 3, 32, 32) but got array with shape (1, 3, 128, 128)

That contradicts Scaling 32x32 in srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1) in 711th line, downscale to 96x96 and upscale to 384x384 in model.py?
So that is modified 6464 in srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1), isn't it?

Why the shape is (3,125,125) or not (3,128,128)

Code:

G = GenerativeNetwork()
ip = Input(shape=(3,32,32))
out = G.create_sr_model(ip)
gener = Model(ip, out)
gener.summary()

I get

sr_res_merge_15 (Merge)          (None, 64, 32, 32)    0           sr_res_batchnorm_15_2[0][0]      
                                                                   sr_res_merge_14[0][0]            
____________________________________________________________________________________________________
sr_res_deconv1 (Deconvolution2D) (None, 64, 63, 63)    36928       sr_res_merge_15[0][0]            
____________________________________________________________________________________________________
sr_res_deconv2 (Deconvolution2D) (None, 64, 125, 125)  36928       sr_res_deconv1[0][0]             
____________________________________________________________________________________________________
sr_res_conv_final (Convolution2D)(None, 3, 125, 125)   1731        sr_res_deconv2[0][0]  

keras-1.1.0,Windows 10
Could you give me some advice?

Using new modle.py it occurs error to theano.gof.fg.MissingInputError

--Traceback (most recent call last):
File "models.py", line 729, in
srgan_network.train_full_model(coco_path, nb_images=4400, nb_epochs=5)
File "models.py", line 437, in train_full_model
self._train_model(image_dir, nb_images, nb_epochs, load_generative_weights=True, load_discriminator_weights=True)
File "models.py", line 635, in _train_model
batch_size=self.batch_size, nb_epoch=1, verbose=0)
File "/home/yq/work/Super-Resolution-using-Generative-Adversarial-Networks-master/keras_training_ops.py", line 158, in fit
model._make_train_function()
File "/usr/local/lib/python2.7/dist-packages/Keras-1.1.1-py2.7.egg/keras/engine/training.py", line 721, in _make_train_function
**self._function_kwargs)
File "/usr/local/lib/python2.7/dist-packages/Keras-1.1.1-py2.7.egg/keras/backend/theano_backend.py", line 821, in function
return Function(inputs, outputs, updates=updates, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Keras-1.1.1-py2.7.egg/keras/backend/theano_backend.py", line 807, in init
**kwargs)
File "/usr/local/lib/python2.7/dist-packages/theano/compile/function.py", line 320, in function
output_keys=output_keys)
File "/usr/local/lib/python2.7/dist-packages/theano/compile/pfunc.py", line 479, in pfunc
output_keys=output_keys)
File "/usr/local/lib/python2.7/dist-packages/theano/compile/function_module.py", line 1776, in orig_function
output_keys=output_keys).create(
File "/usr/local/lib/python2.7/dist-packages/theano/compile/function_module.py", line 1428, in init
accept_inplace)
File "/usr/local/lib/python2.7/dist-packages/theano/compile/function_module.py", line 177, in std_fgraph
update_mapping=update_mapping)
File "/usr/local/lib/python2.7/dist-packages/theano/gof/fg.py", line 171, in init
self.import_r(output, reason="init")
File "/usr/local/lib/python2.7/dist-packages/theano/gof/fg.py", line 360, in import_r
self.import(variable.owner, reason=reason)
File "/usr/local/lib/python2.7/dist-packages/theano/gof/fg.py", line 474, in import
r)
theano.gof.fg.MissingInputError: ("An input of the graph, used to compute Elemwise{true_div,no_inplace}(x_discriminator, DimShuffle{x,x,x,x}.0), was not provided and not given a value.Use the Theano flag exception_verbosity='high',for more information on this error.", x_discriminator)

--There is a same error to delete 719th and (or) 720th line, why?

Something wrong when I train the full-model

I can pre-train the Generator and Discriminator separately but When I train the full-model ,Something wrong,just says:
theano.gof.fg.MissingInputError: ("An input of the graph, used to compute Elemwise{true_div,no_inplace}(x_discriminator, DimShuffle{x,x,x,x}.0), was not provided and not given a value.Use the Theano flag exception_verbosity='high',for more information on this error.", x_discriminator)
Someone else maybe have the same problem, I wonder if you have any idea to fix it or may be I train the full-model in a wrong way.

The image quality is not good as expected

I am not sure if the issue is caused by weight or implementation. Currently, I use pretrained weight weights/SRGAN.h5 for testing. However, the image is blurred and color is different from original image. I wonder if you can share the weight file you are using now?
Generated image
image
Original image
image

AttributeError: 'module' object has no attribute 'find_graphviz'

rzai@rzai00:~/prj/Super-Resolution-using-Generative-Adversarial-Networks/tests$ CUDA_VISIBLE_DEVICES=1 python3 benchmark_test.py
Using Theano backend.
Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/theano/printing.py", line 28, in
import pydot_ng as pd
ImportError: No module named 'pydot_ng'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "benchmark_test.py", line 1, in
from keras.layers import Input
File "/usr/local/lib/python3.4/dist-packages/keras/init.py", line 2, in
from . import backend
File "/usr/local/lib/python3.4/dist-packages/keras/backend/init.py", line 61, in
from .theano_backend import *
File "/usr/local/lib/python3.4/dist-packages/keras/backend/theano_backend.py", line 1, in
import theano
File "/usr/local/lib/python3.4/dist-packages/theano/init.py", line 74, in
from theano.printing import pprint, pp
File "/usr/local/lib/python3.4/dist-packages/theano/printing.py", line 35, in
if pd.find_graphviz():
AttributeError: 'module' object has no attribute 'find_graphviz'
rzai@rzai00:~/prj/Super-Resolution-using-Generative-Adversarial-Networks/tests$

Could not import standardize_input_data

Traceback (most recent call last):
File "models.py", line 10, in
from keras_ops import fit as bypass_fit, smooth_gan_labels
File "/tmp3/queenie/keras_ops.py", line 5, in
from keras.engine.training import losses,standardize_input_data, slice_X,
ImportError: cannot import name standardize_input_data

Error when train the full model

Thank you for your work.

When I try to train the full model, I get an error:
"theano.gradient.DisconnectedInputError: grad method was asked to compute the gradient with respect to a variable that is not part of the computational graph of the cost, or is used only by a non-differentiable operator: gan_batchnorm1_1_beta".

Could you show me how to train the full model?

Thank you very much!

missing "sr_resnet_weights.h5" weights h5 files

In the benchmark_test.py line 146, the network want to load the sr_resnet_weights.h5 file, but cannot find it in weights/ document, can you please release the pre-trained weights? I want to test the model with some of my images. Thanks a lot.

Traceback (most recent call last):

Traceback (most recent call last):
File "D:/python file/Super-Resolution-using-Generative-Adversarial-Networks-master/models.py", line 10, in
from keras_ops import fit as bypass_fit, smooth_gan_labels
File "D:\python file\Super-Resolution-using-Generative-Adversarial-Networks-master\keras_ops.py", line 5, in
from keras.engine.training import objectives, standardize_input_data, slice_X,
ImportError: cannot import name 'objectives'

py version

what is the version of python you used and
what is the operating system

Which version of Theano and Keras are you using?

Hi,

Firstly, thanks for open source your work. I am trying to run benchmark.py with the provided weights, however I keep running into this error of
ValueError: could not broadcast input array from shape (1,256,64,1,64) into shape (1,128,64,2,64)
at the line of
output_image_batch = model.predict_on_batch(x_generator)

it seems to be a problem with the input output shape matching at
x = UpSampling2D(name='sr_res_upscale_%d' % id)(x)
in function
`
def _upscale_block(self, ip, id):

    init = ip

    x = Convolution2D(128, 3, 3, activation="linear", border_mode='same', name='sr_res_upconv1_%d' % id,
                      init=self.init)(init)
    x = LeakyReLU(alpha=0.25, name='sr_res_up_lr_%d_1_1' % id)(x)
    x = UpSampling2D(name='sr_res_upscale_%d' % id)(x)
    print('UpSampling2D id:', id, ", shape:", x._keras_shape)
    #x = SubPixelUpscaling(r=2, channels=32)(x)
    x = Convolution2D(128, 3, 3, activation="linear", border_mode='same', name='sr_res_filter1_%d' % id,
                      init=self.init)(x)
    x = LeakyReLU(alpha=0.3, name='sr_res_up_lr_%d_1_2' % id)(x)

    return x`

I am suspecting that this might an issue with the Theano backend version I am using? I have tested on both 0.9.0 and 0.8.2 with Keras 1.2.1 but in both cases, the error preserves. Thus, may I know which version of Theano and Keras are you currently using? Thanks!

how to run test?

--python benchmark_test.py

Using Theano backend.
Using gpu device 0: GeForce GTX 980 Ti (CNMeM is disabled, cuDNN 4007)
SR ResNet model weights loaded.
Testing model on Set 5 Validation images
Traceback (most recent call last):
File "benchmark_test.py", line 299, in
test_set5(sr_resnet_test.model, img_width=img_width, img_height=img_height)
File "benchmark_test.py", line 45, in test_set5
model, total_psnr, "set5", 5)

NameError: global name 'model' is not defined

getting benchmarks to run

Hi - thanks for publishing this work in progress. I'd like to try to get some of your examples working, but can't get the code in the README or benchmark tests to run. Are you using a special version of keras, or just 1.1.0? Here's what I get when running the benchmark:

$ KERAS_BACKEND=tensorflow PYTHONPATH=.. python benchmark_test.py
Using TensorFlow backend.
Traceback (most recent call last):
...
ValueError: Incompatible shapes for broadcasting: (1, 64, 192, 192) and (1, 1, 1, 64)

$ KERAS_BACKEND=theano PYTHONPATH=.. python benchmark_test.py Using Theano backend.
SR ResNet model weights loaded.
Testing model on Set 5 Validation images
Found 5 images belonging to 1 classes.
...
ValueError: GpuDnnConv images and kernel must have the same stack size
Inputs shapes: [(1, 96, 3, 96), (3, 3, 64, 3), (1, 3, 4, 96), 'No shapes', (), ()]
Inputs strides: [(0, 288, 96, 1), (576, 192, 3, 1), (0, 384, 96, 1), 'No strides', (), ()]

And similarly for the code in the README

srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1)
srgan_model = srgan_network.build_srgan_pretrain_model()
...
ValueError: Incompatible shapes for broadcasting: (1, 64, 128, 128) and (1, 1, 1, 64)

Would be interested in getting this working and potentially contributing to this project.

when using tensorflow it has some errors

Firstly, when I use theano, I can successfully run your benchmark_test.py.
When I am trying tensorflow, in the layers.py, the function depth_to_scale_tf(), tf.split(3,3,input) has some errors listed as follows:
Number of ways to split should evenly divide the split dimension for 'split' (op: 'Split') with input shapes: [], [?,3,64,256].
The images are used in Set5.
What's more, i just change the ./keras/keras.json when I am trying tensorflow

Benchmark

Hey, great work.

Did you measure your SRResNet PSNR/SSIM ?
And compare with the paper?

What's the turn of train models?

Thank you for this great work. but I have a doubt when I using your model.py to train:
Should I pretrain the SR network at first,then pretrain the Discriminator network. And at last, train the full network?

or just directly train the full network?

@titu1994

ValueError: "concat" mode can only merge layers with matching output shapes except for the concat axis.

I passed all the problem about packages. But when I come to the line of building the model. I got and error about the size of matrices. Please help.

Thank you very much!

`ValueError Traceback (most recent call last)
in ()
17 srgan_network = SRGANNetwork(img_width=32, img_height=32, batch_size=1)
18 # srgan_network.build_srgan_model()
---> 19 srgan_network.build_srgan_pretrain_model()
20
21 # plot(srgan_network.srgan_model_, 'SRGAN.png', show_shapes=True)

in build_srgan_pretrain_model(self, use_small_srgan)
322 self.generative_model_ = Model(ip, sr_output)
323
--> 324 vgg_output = self.vgg_network.append_vgg_network(sr_output, ip_vgg, pre_train=True)
325
326 self.srgan_model_ = Model(input=[ip, ip_vgg],

in append_vgg_network(self, x_in, true_X_input, pre_train)
30
31 # Append the initial inputs to the outputs of the SRResNet
---> 32 x = merge([x_in, true_X_input], mode='concat', concat_axis=0)
33
34 # Normalize the inputs via custom VGG Normalization layer

/users/taitien.doan/anaconda3/envs/TheanoKerasPy27/lib/python2.7/site-packages/keras/engine/topology.pyc in merge(inputs, mode, concat_axis, dot_axes, output_shape, output_mask, arguments, name)
1672 node_indices=node_indices,
1673 tensor_indices=tensor_indices,
-> 1674 name=name)
1675 return merge_layer.inbound_nodes[0].output_tensors[0]
1676 else:

/users/taitien.doan/anaconda3/envs/TheanoKerasPy27/lib/python2.7/site-packages/keras/engine/topology.pyc in init(self, layers, mode, concat_axis, dot_axes, output_shape, output_mask, arguments, node_indices, tensor_indices, name)
1291 self._arguments_validation(layers, mode,
1292 concat_axis, dot_axes,
-> 1293 node_indices, tensor_indices)
1294 self.built = True
1295 self.add_inbound_node(layers, node_indices, tensor_indices)

/users/taitien.doan/anaconda3/envs/TheanoKerasPy27/lib/python2.7/site-packages/keras/engine/topology.pyc in _arguments_validation(self, layers, mode, concat_axis, dot_axes, node_indices, tensor_indices)
1363 'layers with matching '
1364 'output shapes except for the concat axis. '
-> 1365 'Layer shapes: %s' % (input_shapes))
1366
1367 def call(self, inputs, mask=None):

ValueError: "concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 12, 128, 3), (None, 3, 128, 128)]`

AssertionError: "assert K.ndim(x) == 4"

Thank you very much for your work. It is great!

When I tried to run your code, I met the assert error "assert K.ndim(x) == 4".
It seems that the dimension of the input to the activity regularizer is not 4.

I couldn't figure out the reason. Could you please give me some suggestions?

Thank you very much!

A Simple Confusion Regarding the Description Provided for Training the Full Model

Hey @titu1994

Much much thanks for this great implementation.

I am slightly confused with following two lines.

To train the full network (Does NOT work properly right now, Discriminator is not correctly trained):

(Last lines in USAGE)
and

Properly train SRGAN (SR ResNet + VGG + Discriminator) model.

(Right marked in PLANS)

Can you please let me know the current situation of full training?
Is there any implementation fault for full training or just it doesn't work properly after following everything correctly?

Thanks.

About the code (enviroment)

Hi, professor:

Sorry to bother you. There is a running error about the code. So I want to know which is the right version of Python you used (not running successfully on Python 2.7 ). Thank you very much.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.