-->

Welcome to our Coding with python Page!!! hier you find various code with PHP, Python, AI, Cyber, etc ... Electricity, Energy, Nuclear Power

Thursday 28 October 2021

Real Time Image Segmentation Using 5 Lines of Code

All about Agile, Ansible, DevOps, Docker, EXIN, Git, ICT, Jenkins, Kubernetes, Puppet, Selenium, Python, etc

PixelLib Library is a library created to allow easy integration of object segmentation in images and videos using few lines of python code. PixelLib now provides support for PyTorch backend to perform faster, more accurate segmentation and extraction of objects in images and videos using PointRend segmentation architecture

Demand for Real Time Image Segmentation Applications

 
Image segmentation is an aspect of computer vision that deals with segmenting the contents of objects visualized by a computer into different categories for better analysis. The contributions of image segmentation in solving a lot of computer vision problems such as analysis of medical images, background editing, vision in self driving cars and analysis of satellite images make it an invaluable field in computer vision. One of the greatest challenges in computer vision is keeping the space between accuracy and speed performance for real time applications. In the field of computer vision there is this dilemma of a computer vision solution either being more accurate and slow or less accurate and faster. 

PixelLib Library is a library created to allow easy integration of object segmentation in images and videos using few lines of python code. The previous version of PixelLib uses Tensorflow deep learning as its backend which employs Mask R-CNN to perform instance segmentation. Mask R-CNN is a great object segmentation architecture, but it fails to balance between the accuracy and speed performance for real time applications.  PixelLib provides support for PyTorch backend to perform faster, more accurate segmentation and extraction of objects in images and videos using PointRend segmentation architecture. 

PointRend by Alexander Kirillov et al is used to replace Mask R-CNN for performing instance segmentation of objects. PointRend is an excellent state of the art neural network for implementing object segmentation. It generates accurate segmentation masks and run at high inference speed that matches the increasing demand for an accurate and real time computer vision applications. I integrated PixelLib with the python implementation of PointRend by Detectron2 which supports only Linux OS. I made modifications to the original Detectron2 PointRend implementation to support Windows OS. PointRend implementation used for PixelLib supports both Linux and Windows OS.

Note: This article is based on performing instance segmentation using PyTorch and PointRend. If you want to learn how to perform instance segmentation with Tensorflow and Mask R-CNN read this article

Figure
Original Image Source (left:MASK R-CNN, right:PointRend)

 

Figure
Original Image Source (left:MASK R-CNN, right:PointRend)

 

The images labelled PointRend are obviously better segmentation results than Mask R-CNN.

 

Download & Installation

 
Download Python

PixelLib PyTorch supports python version 3.7 and above. Download a compatible python version.

Install PixelLib and its dependencies

Install PyTorch

PixelLib PyTorch version supports these versions of PyTorch(1.6.0,1.7.1,1.8.0 and 1.90). PyTorch 1.7.0 is not supported and do not use any PyTorch version less than 1.6.0. Install a compatible PyTorch version.

Install Pycocotools

pip3 install pycocotools


Install PixelLib

pip3 install pixellib


If installed, upgrade to the latest version using:

pip3 install pixellib -upgrade


 

Image Segmentation

 
PixelLib uses five lines of python code for performing object segmentation in images and videos with PointRend model. Download the PointRend model. This is the code for image segmentation.

import pixellib
from pixellib.torchbackend.instance import instanceSegmentation

ins = instanceSegmentation()
ins.load_model("pointrend_resnet50.pkl")
ins.segmentImage("image.jpg", show_bboxes=True, output_image_name="output_image.jpg")


Line 1-4: PixelLib package was imported and we also imported the class instanceSegmentation from the module pixellib.torchbackend.instance (importing instance segmentation class from PyTorch support). We created an instance of the class and finally loaded the PointRend model we have downloaded.

Line 5: We called the function segmentImage to perform segmentation of objects in images and added the following parameters to the function:

  • Image_path: This is the path to the image to be segmented.
  • Show_bbox: This is an optional parameter to show the segmented results with bounding boxes.
  • Output_image_name: This is the name of the saved segmented image.

Sample Image for Segmentation

Figure
Original Image Source

 

ins.segmentImage("image.jpg", show_bboxes = True, output_image_name="output.jpg")


Image After Segmentation

Image

The checkpoint state_dict contains keys that are not used by the model:
proposal_generator.anchor_generator.cell_anchors.{0, 1, 2, 3, 4}


This log above may appear if you are running the segmentation code. It is not an error and the code will work fine.

results, output = ins.segmentImage("image.jpg", show_bboxes=True, output_image_name="result.jpg")
print(results)


The segmentation results return a dictionary with values associated with the objects segmented in the image. The results printed will be in the following format:

{'boxes':  array([[ 579,  462, 1105,  704],
       [   1,  486,  321,  734],
       [ 321,  371,  423,  742],
       [ 436,  369,  565,  788],
       [ 191,  397,  270,  532],
       [1138,  357, 1197,  482],
       [ 877,  382,  969,  477],),
'class_ids': array([ 2,  2,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  2, 24, 24,2,  2,2,  0,  0,  0,  0,  0,  0], dtype=int64), 
'class_names': ['car', 'car', 'person', 'person', 'person', 'person', 'person', 'car', 'person', 'person', 'person', 'person', 'car', 'backpack', 'backpack', 'car', 'car', 'car', 'person', 'person', 'person', 'person', 'person', 'person'],
 'object_counts': Counter({'person': 15, 'car': 7, 'backpack': 2}), 
'scores': array([100., 100., 100., 100.,  99.,  99.,  98.,  98.,  97.,  96.,  95.,95.,  95.,  95.,  94.,  94.,  93.,  91.,  90.,  88.,  82.,  72.,69.,  66.], dtype=float32), 
'masks': array([[[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
'extracted_objects': []


Detection Threshold

PixelLib makes it possible to determine the detection threshold of object segmentation.

ins.load_model("pointrend_resnet50.pkl", confidence = 0.3)


confidence: This is a new parameter introduced in the load_model function and it is set to 0.3 to threshold the detections by 30%. The default value I set for detection threshold is 0.5 and it can be increased or decreased using the confidence parameter.

Speed Records

PixelLib makes it possible to perform real time object segmentation and added the ability to adjust the inference speed to suit real time predictions.  The default inference speed for processing a single image using Nvidia GPU with 4GB capacity is about 0.26 seconds.

Speed Adjustments
PixelLib supports speed adjustments and there are two types of speed adjustment modes which are fast and rapid modes:

1. Fast Mode

ins.load_model("pointrend_resnet50.pkl", detection_speed = "fast")


In the load_model function, we added the parameter detection_speed and set the value to fast. The fast mode achieves 0.20 seconds for processing a single image.

Full Code for Fast Mode Detection

import pixellib
from pixellib.torchbackend.instance import instanceSegmentation

ins = instanceSegmentation()
ins.load_model("pointrend_resnet50.pkl", detection_speed = "fast")
ins.segmentImage("image.jpg", show_bboxes=True, output_image_name="output_image.jpg")


2. Rapid Mode

ins.load_model("pointrend_resnet50.pkl", detection_speed = "rapid")


In the load_model function, we added the parameter detection_speed and set the value to rapid. The rapid mode achieves 0.15 seconds for processing a single image.

Full Code for Rapid Mode Detection

import pixellib
from pixellib.torchbackend.instance import instanceSegmentation

ins = instanceSegmentation()
ins.load_model("pointrend_resnet50.pkl", detection_speed = "rapid")
ins.segmentImage("image.jpg", show_bboxes=True, output_image_name="output_image.jpg")


 

PointRend Models

 
There are two types of PointRend models used for object segmentation and they are of resnet50 variant and resnet101 variant. The resnet50 variant is used throughout this article because it is faster and of good accuracy. The resnet101 variant is more accurate but it is slower than resnet50 variant. According to the official reports of the models on Detectron2 the resnet50 variant achieves 38.3 mAP on COCO and resnet101 variant achieves 40.1 mAP on COCO.

Speed Records for Resnet101: The default speed for segmentation is 0.5 seconds, fast mode is 0.3 seconds while the rapid mode is 0.25 seconds.

Code for Resnet101 variant

import pixellib
from pixellib.torchbackend.instance import instanceSegmentation

ins = instanceSegmentation()
ins.load_model("pointrend_resnet101.pkl", network_backbone="resnet101")
ins.segmentImage("sample.jpg",  show_bboxes = True, output_image_name="output.jpg")


The code for performing inference with the resnet101 model is the same, except we loaded the PointRend resnet101 model in the load_model function. Download the resnet101 model from here. We added an extra parameter network_backbone in the load_model function and set the value to resnet101.

Note: If you want to achieve high inference speed and good accuracy, use PointRend resnet50 variant, but if you are more concerned about accuracy, use the PointRend resnet101 variant. All these inference reports are based on using Nvidia GPU with 4GB capacity.

Custom Object Detection in Image Segmentation

The PointRend model used is a pretrained COCO model which supports 80 classes of objects. PixelLib supports custom object detection which makes it possible to filter detections and ensure segmentation of target objects. We can choose out of the 80 classes of objects supported to match our target goal. These are the 80 classes of objects supported:

person, bicycle, car, motorcycle, airplane,
bus, train, truck, boat, traffic_light, fire_hydrant, stop_sign,
parking_meter, bench, bird, cat, dog, horse, sheep, cow, elephant, bear, zebra,
giraffe, backpack, umbrella, handbag, tie, suitcase, frisbee, skis, snowboard,
sports_ball, kite, baseball_bat, baseball_glove, skateboard, surfboard, tennis_racket,
bottle, wine_glass, cup, fork, knife, spoon, bowl, banana, apple, sandwich, orange,
broccoli, carrot, hot_dog, pizza, donut, cake, chair, couch, potted_plant, bed,
dining_table, toilet, tv, laptop, mouse, remote, keyboard, cell_phone, microwave,
oven, toaster, sink, refrigerator, book, clock, vase, scissors, teddy_bear, hair_dryer,
toothbrush.


Code for Segmentation of Target Classes

import pixellib
from pixellib.torchbackend.instance import instanceSegmentation

ins = instanceSegmentation()
ins.load_model("pointrend_resnet50.pkl")
target_classes = ins.select_target_classes(person = True)
ins.segmentImage("image.jpg", show_bboxes=True, segment_target_classes = target_classes, output_image_name="output_image.jpg")


The function select_target_classes was called to select the target objects to be segmented. The function segmentImage got a new parameter segment_target_classes to choose from the target classes and filter the detections based on them. We filter the detections to detect only person in the image. 

Image

 

Object Extractions in Images

 
PixelLib makes it possible to extract and analyse objects segmented in an image.

Code for Object Extraction

import pixellib
from pixellib.torchbackend.instance import instanceSegmentation

ins = instanceSegmentation()
ins.load_model("pointrend_resnet50.pkl")
ins.segmentImage("image.jpg", show_bboxes=True, extract_segmented_objects=True,
save_extracted_objects=True, output_image_name="output_image.jpg" )


The code for image segmentation is the same, except we added extra parameters extract_segmented_objects and save_extracted_objects to extract segmented object and save the extracted objects respectively.  Each of the segmented objects will be saved as segmented_object_index e.g segmented_object_1. The objects are saved based in the order in which they are extracted.

segmented_object_1.jpg
segmented_object_2.jpg
segmented_object_3.jpg
segmented_object_4.jpg
segmented_object_5.jpg
segmented_object_6.jpg


Figure
Note:  All the objects in the image are extracted and I chose to display only three of them.

 

Extraction of Object from Bounding Box Coordinates

import pixellib
from pixellib.torchbackend.instance import instanceSegmentation

ins = instanceSegmentation()
ins.load_model("pointrend_resnet50.pkl")
ins.segmentImage("image.jpg", show_bboxes=True, extract_segmented_objects=True, extract_from_box = True,
save_extracted_objects=True, output_image_name="output_image.jpg" )


We introduced a new parameter extract_from_box to extract the objects segmented from their bounding boxes coordinates. Each of the extracted objects will be saved as object_extract_index e.g object_extract_1. The objects are saved in the order in which they are extracted.

Figure
Extracts from Bounding Box Coordinates

 

Image Segmentation Output Visualization

PixelLib makes it possible to regulate the visualization of images according to their resolutions. 

ins.segmentImage("sample.jpg", show_bboxes=True, output_image_name= "output.jpg")


Figure
Original Image Source

 

The visualization wasn’t visible because the text size, and box thickness are too slim. We can regulate the text sizetext thickness, and box thickness to regulate the visualizations. 

Modifications for Better Visualization.

ins.segmentImage(“sample.jpg”, show_bboxes=True, text_size=5, text_thickness=4, box_thickness=10, output_image_name=”output.jpg”)


The segmentImage function accepted new parameters that regulate the thickness of texts and bounding boxes.

  • text_size: The default text size is 0.6 and it is okay with images with moderate resolutions. It will be too samll for images with high resolutions. I increased it to 5. 
  • text_thickness: The default text thickness is 1. I increased it to 4 to match the image resolution.
  • box_thickness: The default box thickness is 2 and I changed it to 10 to match the image resolution.

Output Image with A Better Visualization

Image

Note: Regulate the parameters according to the resolutions of your images. The values I used for this sample image whose resolution is 5760 x 3840 might be too large if your image resolution is lower. You can increase the values of the parameters beyond the ones I set in this sample code if you have images whose resolutions are very high. text_thickness and box_thickness parameters’ values must be in integers and do not express their values in floating point numbers. text_size value can be expressed in both integers and floating point numbers.

We discussed in detail in this article how to perform accurate and fast image segmentation and extraction of objects in images. We also described the upgrade added to PixelLib using PointRend that makes it possible for the library to match the increasing demand to balance between accuracy and speed performance in computer vision.

Note: Read the full tutorial that includes how to perform object segmentation on a batch of images, videos and live camera feeds using PixelLib.

 
Bio: Ayoola Olafenwa is a self-taught programmer, technical writer, and a deep learning practitioner. Ayoola has developed two open source computer vision projects that are used by many developers across the globe, and presently works as a Machine Learning Engineer at DeepQuest AI building and deploying machine learning applications in the cloud. Ayoola's areas of expertise are in computer vision and machine learning. She has experience working on machine learning systems, using deep learning libraries like PyTorch and Tensorflow to build and deploy machine learning models in production on cloud computing platforms like Azure using DevOp tools such as Docker, Pulumi and Kubernetes. Ayoola also works on deploying machine learning models on edge devices like Nvidia Jetson Nano and Raspberry PI devices using efficient frameworks like PyTorchMobile, TensorflowLite and ONNX Runtime.


Monday 25 October 2021

100+ Data Science, Deep Learning, AI ; Machine Learning Cheat Sheet PDF

All about Agile, Ansible, DevOps, Docker, EXIN, Git, ICT, Jenkins, Kubernetes, Puppet, Selenium, Python, etc Today, 

We'll look after something very big that you might have never seen or rarely seen on the web. We have researched for more than 35 days to find out all the cheatsheets on machine learning, deep learning, data mining, neural networks, big data, artificial intelligence, python, Tensorflow, scikit-learn, etc  from all over the web. To make it easy for all learners, We have zipped over 100+ machine learning cheat sheet, data science cheat sheet, artificial intelligence cheat sheets and more. You can also download the pdf version of this cheat sheets (links are already provided below every images).


How do you discover content from around the web related to AI, ML and Data Science? You may be reading content from different websites to newsletters to RSS feeds to any social media. You increased the diversity but also noise. It's difficult, Right? Let's fix the way you consume content. Stay up-to-date, ahead of the curve, and get smarter every day. Don't wait, Download the app today! Reinvent the way you feed your curiosity!

MACHINE LEARNING (ML) CHEAT SHEETS

👉 Machine Learning Algorithms Python and R Codes Cheatsheet by Analytics Vidhya (PDF)
Machine Learning Algorithms Python and R Codes Cheatsheet
👉 Bias and Variance in Machine Learning Models (15 Pages PDF)
Bias and Variance in Machine Learning Models
👉 Imbalanced data in Machine Learning
Imbalanced data in Machine Learning
👉 Bayes’ Theorem
Bayes’ Theorem
👉 Principal Component Analysis and Dimensionality Reduction
Principal Component Analysis and Dimensionality Reduction

👉 Regression in Machine Learning
Regression in Machine Learning
👉 Regularization in Machine Learning
👉 Basics of Convolutional Neural Network
Basics of Convolutional Neural Network
👉 Famous DNNs in Machine Learning
Famous DNNs in Machine Learning
👉 Ensemble Methods in Machine Learning
👉 Regression Machine Learning Cheat Sheet by Business Science University (PDF)
Regression Machine Learning Cheatsheet PDF
Regression Machine Learning Cheatsheet
👉 Machine Learning Algorithms & Data Science (10 Pages PDF)
Machine Learning Algorithms Cheatsheets PDF
Machine Learning Algorithms PDF
👉 Deep Learning and Big Data 
Deep Learning and Big Data Cheats
👉 Segmentation and Clustering Cheats by BSU (PDF)
Segmentation and Clustering Cheats by BSU
Segmentation and Clustering Cheats PDF
👉 Scikit-Learn & Caret Package for Python & R Cheat Sheet by Analytics Vidhya (PDF)
Scikit-Learn & Caret Package for Python & R Cheat Sheet
👉 Machine Learning with R Cheats (PDF)
Machine Learning with R Cheats
Machine Learning with R Cheats
👉 Machine Learning Modelling in R (PDF)
Machine Learning Modelling in R

APPLICATIONS OF AI IN YOUR HOUSEHOLD: TOP 10 USE OF AI AT HOME

All about Agile, Ansible, DevOps, Docker, EXIN, Git, ICT, Jenkins, Kubernetes, Puppet, Selenium, Python, etc

Read about the top 10 applications of AI in your household

You might think that artificial intelligence is only something the tech giants are focused on and that it doesn’t have any impact on your household or everyday life. But the reality is different. Whether you realize it or not, Artificial Intelligence is everywhere. The application of AI is not only for big sectors or finance or manufacturing, it is also impacting our daily lives. So, let’s find out about the applications of AI in your daily life.

 

Smart Assistants

Perhaps the most popular use of AI comes in the form of digital smart assistants, such as Siri, Alexa, and Google Assistant. These AI-powered personal assistants can take in your voice commands and translate them into actions, such as adding items to your shopping list or calling a friend. There’s no question that voice assistants will continue to grow and become even more capable of assisting us in our daily lives.

 

AI Cleaner

Even though the past nine examples of artificial intelligence are all some sort of service or software, that doesn’t mean that AI doesn’t come in the shape of physical machines as well. And you may have some in your own home. Robot’s Roomba vacuum cleaner uses AI to scan the size of the room it is in, identifies obstacles, and determines the most efficient route to sweep the space.

 

Smart Kitchen Appliance

Smart kitchen appliances and smart speakers are making their way into kitchens all around the world. You may even have one now. Whether it’s a coffee machine or an oven, these tools are evolving, learning your schedules and patterns so that they can provide you with warm food, coffee, etc.

 

Smart Fridge

Your new smart fridge may be able to track when food is low and place orders for you when food is low. Or, better yet, AI could be used to help you create the perfect meal with just the ingredients you have in the refrigerator. Utilizing AI technologies with gastronomical learning, companies like Plant Jammer and Chefling are helping people create delicious food with the ingredients they have on hand.

 

Enhanced Health and Fitness at Home

Being able to monitor patients at home with real-time data remotely, effectively, could be revolutionary. Going far beyond the Apple watch that you have on your wrist right now, healthcare professionals could tap into the predictive powers of AI to determine patients who are potentially at risk for disease or injury. This would give doctors a lot more power but could alleviate some of the pressure placed on the healthcare systems during flu season, saving lives.

 

Home Projects

We all know that home projects are not always the most exciting. Even more so, when something breaks in your home, you want to fix it as soon as possible. Just like a smart medical device, homes can run self-diagnostics predicting potential issues before they occur, contacting the appropriate repairman, who may be a robot.

 

Interconnected Home

5G technology and the IoT are just on the horizon. These technologies will help create a living technological ecosystem by real-time data and will be analyzed using artificial intelligence. Your home or apartment will be a part of this ecosystem interconnected in this complex web. The new smart towns and cities will use your data to improve the quality of life of people around the city in various areas like energy consumption, traffic, and even overcrowding.

 

Facial Recognition

Today almost everyone uses smartphones, right? Facial recognition is not something new. Every app like Snapchat, Facebook, LucidPix, etc uses artificial intelligence in its facial recognition technology.

LucidPix uses facial recognition to detect a user’s face for the “3D Face” feature, which allows users to capture and convert their selfies to 3D photos. Similarly, Snapchat uses Artificial Intelligence. to recognize users’ faces and apply face filters to users’ photos. In Facebook, facial recognition is used to identify faces in photos and invite users to tag themselves or their Facebook friends.

 

Media Recommendations

If you’ve ever finished watching a TV show on Netflix, you’ve probably noticed how Netflix immediately displays other shows you may enjoy watching next. YouTube is another platform that recommends a series of videos you might like next after you’ve finished watching one video. Both these digital media services analyze hundreds of records to suggest films, TV shows, and videos that you might like based on your previous reactions and choices of media.

 

Online Banking

Many banks now offer mobile check deposit services to their customers, which also utilize machine learning. Banking apps can recognize and read your handwriting to translate that to a digital check. So, now you can sit at your home and transfer money. This makes things so easy especially during the pandemic.




Using Data To Make Better Decisions

All about Agile, Ansible, DevOps, Docker, EXIN, Git, ICT, Jenkins, Kubernetes, Puppet, Selenium, Python, etc


How many tennis balls could you fit in all of the skyscrapers in New York City? How many gummy bears could you fit in an airplane? How long would it take to fill the Mariana Trench with peanut butter? 

Like most people, you’d probably need some time and maybe a whiteboard to guess these answers. Not only are the questions difficult to imagine and rationalize, but also there’s a lot of relevant background information needed to be able to make an accurate guess.

Without collecting all relevant data, any answer is a guess.

Imagine watching any sports game where you could only see one team and no scoreboard. You would be able to guess how each team is doing from positioning and reactions, but it would be difficult to say confidently which team is winning or who is more likely to win the entire game. It would be even more difficult to win bets against someone else watching normally on TV being spoon-fed a plethora of statistics and hearing the opinions of professional commentators. 

Despite the unfairness of this competition, this is how many people invest in stocks. Dark Pools can consist of more than half of the overall trade volume for a stock, and yet despite this huge imbalance, many people don’t know they exist let alone monitor their activities. Gaining access and utilizing all the information available before making critical decisions can level the playing field and facilitate educated decisions.
Data can help us make sense of big numbers and simplify complex ideas. Pluto is roughly 3 billion miles away, so how long would it take to walk there? About a billion hours, which is longer than watching all the content on all major streaming sites back to back 20,000 times. While the number and the analogy mean the same thing, one is substantially easier to understand intuitively than the other. 

Data explanation and visualization is a crucial component of understanding complex data points.


Financial data is infamously one of the largest data sets in the world and endlessly complicated, so seeing it in easy-to-process graphs instead of raw metrics helps elucidate. It’s difficult to visualize two numbers of orders of magnitude apart, but it’s easy to see how big one circle is against another.
Likewise, it’s almost impossible to rationalize numbers without context for what they mean. Financial data is rife with jargon and acronyms that require a dictionary to read, let alone understand. Being able to process this information is knowing not just what the words mean, but also how it affects a company and how it compares to other similar companies. 

One of the best ways to use data is not as a standalone item in a complex sheet but as a living, breathing, dynamic guide for making better decisions. Data in isolation is hard to understand intuitively and even worse to try to act upon. Combined with visualizations, it can form a complete picture for faster understanding and superior intuitive answers.

Not all data is created equal.


This paradigm is far from original, with many of the most prominent data sources using citations and best practices to try to eliminate the uncertainty. One of the largest crypto data providers revealed that 65%-95% of all their data was inaccurate and untrustworthy. In the wake of the LIBOR scandal, cracks in the financial system were exposed and the underbelly of market manipulation was revealed. Recently, payment for order flow was popularized, selling people’s trades to big institutions and allowing them to take profit away from investors. Far from novel, these are just several examples of data being difficult to trust. 

The commonality from all three of these is a fundamental agency problem; each of these groups stood to gain financially from manipulating their data or failing to correct incorrect data. The solution is to find data sources that are fundamentally incentivized to provide accurate data. Most brokers provide access to financial data, but often there is a conflict of interest, such as a broker selling their own stock, or fees on trading either explicit or invisible through slippage. 

For this reason, it’s essential to carefully evaluate the trustworthiness of data sources and not take information at face value, especially when critical decisions are being made from it. Healthy skepticism and asking if there is a conflict of interest can expose early on whether a data set is purely analytical or might be inaccurate and skewed.

Data is one of the most valuable resources in the world.


Almost half of the top seven biggest companies in the world use data as their primary product for good reason. Making informed, objective decisions can eliminate uncertainty on correct choices and often guarantee the best possible outcomes. Learning to make these decisions off of comprehensive, well understood and trustworthy data can drastically increase the effectiveness of any decision and bring order to an otherwise chaotic world.

Rank

seo