20 februari 2018 • februari 1, 2021 at 9:37 am Qdraw

Tensorflow objectherkenning en Microsoft .NET Core

Met Tensorflow en Artificial Intelligence het is mogelijk om afbeeldingen realtime te analyseren. In deze blogpost ga ik objecten detecteren in afbeeldingen met Tensorflow en C#. TensorFlow is een open source library voor wiskundige berekeningen. Door gebruik te maken van TensorFlow, het meest populaire deep learning framework, is het mogelijk om dit framework in te zetten voor verschillende doeleinden. In dit voorbeeld gebruik ik Tensorflow in combinatie met .NET Core 2



Hoe werkt Tensorflow samen met Microsoft Technologie Detecteer twee auto’s en een persoon; Detecteer twee auto’s en een persoon

Een Artificial Intelligence project

In Theiacore gebruik ik twee Visual Studio projecten in één solution. Theiacore wordt gebruikt voor het genereren van webpagina’s. Ik heb gebruik het MVC Framework voor het genereren van webpagina’s. ObjectDetect wordt gebruikt voor het Artificial Intelligence gedeelte. Voor Tensorflow zijn er bindings (een koppeling tussen twee frameworks) beschikbaar voor verschillende programmeertalen. Python is de meest populaire binding en hiervoor zijn de meeste online voorbeelden beschikbaar. Voor de programmeertaal C# is er TensorflowSharp, dit is een onofficiële binding die goed werkt voor object detection. In dit voorbeeld focus ik mij op het gebruiken van een Machine learning model voor object herkenning. Dit model is getraind op Microsoft COCO. Deze dataset wordt gebruikt voor het herkennen van objecten in 90 verschillende categorieën.

ObjectDetect-project

Ik gebruik het ObjectDetect-project om door middel van Artificial Intelligence data te verzamelen over de afbeeldingen. In de volgende code snippets zal ik toelichten hoe dit werkt.

Laten we beginnen met een blank canvas. In Tensorflow is dit een leeg TFGraph(). In een TFGraph() worden er twee dingen opgeslagen. Het eerste item is een structuur en het tweede is de graph zelf. Een graph zijn de learnings van het deeplearing framework. In Train een tensorflow gezicht object detectie model ligt ik toe hoe het beste zelf een model kunt trainen en deze kan opslaan als frozen-model. Dit model wordt geladen in de graph. De graph is het geheugen van je computer.

public static ImageHolder GetJsonFormat(string input) {

    var list = new List<string>();

Een Catalog is een geindexeerd bestand waarin de namen van de objecten staan uitgeschreven. Het bestand heet: mscoco_label_map.pbtxt

    _catalog = CatalogUtil.ReadCatalogItems(_catalogPath);
    string modelFile = _modelPath;

    using (var graph = new TFGraph()) {

Het frozen model wordt ingeladen in het geheugen. Ik gebruik TFGraph() om de data en de metadata van het model in het geheugen te laden.

        var model = File.ReadAllBytes(modelFile);
        graph.Import(new TFBuffer(model));

Start een nieuwe sessie om de wiskundige berekeningen uit te voeren. In deze sessie worden de objecten herkenend.

        using (var session = new TFSession(graph)) {

De variable input in een string met de locatie van de afbeelding
Deze wordt geïmporteerd als multidimensionale array, wat ook wel een Tensor wordt genoemd.

            var tensor = ImageUtil.CreateTensorFromImageFile(input, TFDataType.UInt8);

Met de runner wordt het mogelijk om het algoritme te tweaken. Zo is het mogelijk om de inputs, outputs en te configureren.

            var runner = session.GetRunner();
            runner
                .AddInput(graph["image_tensor"][0], tensor)
                .Fetch(
                    graph["detection_boxes"][0],
                    graph["detection_scores"][0],
                    graph["detection_classes"][0],
                    graph["num_detections"][0]);
            var output = runner.Run();

            var boxes = (float[,,])output[0].GetValue(jagged: false);
            var scores = (float[,])output[1].GetValue(jagged: false);
            var classes = (float[,])output[2].GetValue(jagged: false);
            var num = (float[])output[3].GetValue(jagged: false);

De boxes, scores and classes zijn arrays en ik gebruik GetBoxes om de waardes over de objecten uit deze arrays te krijgen.

            var getBoxes = GetBoxes(boxes, scores, classes, input, 0.5);
            return getBoxes;
        }
    }
}

 

Krijg de complete solution werkend.

De broncode van het complete project is publiek beschikbaar, zo kun je exact zien hoe ik het opgelost heb. De volgende stappen ben je nodig om dit project werkend te krijgen. De tekst gaat verder na de afbeelding

 

Whoop, whoop, dit is het resultaat

Installation steps

Tensorflow vereist dat je een x64 runtime gebruikt. De NET Core SDK is standaard x64. Wanneer je een x86 (32-bits) version gebruikt switch s.v.p. eerst naar een 64-bits versie. Als je van plan bent om Azure webapps te gebruiken, deze zijn bij default 32-bits.

 

1. Clone repository

De eerste stap om de repository te downloaden vanuit GitHub.

$ git clone "https://github.com/qdraw/theiacore"

 

2. Download de Pretrained Tensorflow Model en labels

De frozen-models zijn niet ingesloten in de Github repository. Download en plaats deze bestanden in de map: theiacore/ObjectDetect:

En kopieer deze bestanden naar de map: theiacore/ObjectDetect

 

3. Download Reference assemblies

De Libtensorflow is platform afhankelijk en voor het draaien op bijvoorbeeld een Azure is het nodig dat deze assemblies los worden toegevoegd in de map: theiacore/theiacore

Een overzicht van url’s:

 

Azure web apps

Als je van plan bent om dit project binnen een Azure webapp te gebruiken. Azure webapp draaien .Net Core standaard in x86 mode. In de repository is build-for-azure-x64.sh te vinden. Draai het buildscript en de truck is om de bestanden binnen /theiacore/theiacore/theiacore/bin/release/netcoreapp2.0/win-x64/publish te kopieren naar de wwwroot binnen de Azure webapp.

 

4. Start Theiacore

$ cd theiacore/theiacore
$ dotnet run
Now listening on: http://localhost:63884

Mocht de wereld van Computer Vision je interesse hebben gewekt, maar weet je nog niet hoe je dit kunt toepassen en heb je de nodige vragen? Stuur mij dan een mailtje dan kunnen we een kopje koffie drinken.

Dit bericht is geschreven door: Dion

Tags: , , ,

Gecategoriseerd in:

26 september 2017 • maart 26, 2024 at 4:08 pm Qdraw

Train een tensorflow gezicht object detectie model

Met Artificial Intelligence wordt het mogelijk om beelden slim te analysen en dit slim toe te passen. Dit artikel is een follow-up van Objectherkenning met de Computer Vision library Tensorflow.
In het vorige deel zet ik een getraind model in om 80 objecten, te vinden en te identificeren en de locatie in het beeld te bepalen. Ik ga nu nog een stap verder want ik ga een eigen model trainen dat gezichten kan vinden in een afbeelding. In deze tutorial wordt technisch stap voor stap uitgelicht hoe het proces verloopt. In de stap ‘Gebruik van het frozen model’ staat toegelicht hoe het mogelijk is om het model snel te testen.

There is a english version of How to train a Tensorflow face object detection model available at Medium.com



Train een tensorflow gezicht object detectie model MS COCO Tensorflow Nürburgring example (own picture); Car, motorcycle, box, common objects in context

Setup van de slim en object_detection module

De eerste stap is het clonen van de Tensorflow models. In deze repository staan Machine Leaning-modelen die getraind zijn met Tensorflow. Voor deze tutorial gebruiken we alleen de slim module en object_detection.

$ nano .profile
export PYTHONPATH=$PYTHONPATH:/home/dion/tensorflow_models/research:/home/dion/tensorflow_models/research/slim

Vervolgens zorg je ervoor dat de protobuf libraries zijn gecompiled

$ protoc object_detection/protos/*.proto --python_out=.

Clone de tutorial repository en install dependencies

In een losse repository heb ik alle inhoud verzameld van deze tutorial. Met de onderstaande opdracht kopieer je de map vanuit Github.

$ git clone https://github.com/qdraw/tensorflow-face-object-detector-tutorial.git

Mocht je snel even het model willen proberen er is een protobuf en de checkpoint files staan in deze repository.

Het volgende deel van de uitleg voeren we uit vanuit de onderstaande map:

$ cd tensorflow-face-object-detector-tutorial/

De benodigdheden het trainen moeten nog worden geïnstalleerd. Denk eraan dat OpenCV ook geïnstalleerd staat met Python bindings

$ pip install -r requirements.txt

Downloaden van de training en validatie data

De Chinese Universiteit van Hongkong (CUHK) heeft een grote dataset van foto’s met mensen met daarbij exact aangegeven waar het gezicht zich bevindt in de afbeelding. In het onderstaande voorbeeld is staat in het kladblok de coördinaten van de afbeelding geselecteerd. Op de achtergrond heb ik labelImg geopend en is dezelfde foto te zien met annotaties.



Train een tensorflow gezicht object detectie model MS COCO Tensorflow Nürburgring example (own picture); WIDER, example

WIDER example using labelImg (credits: http://shuoyang1213.me/WIDERFACE/

Met het script 001_down_data.py wordt WIDERFace en ssd_mobilenet_v1_coco_11_06_2017 gedownload. WIDERFace is de dataset die ik hiervoor gebruik. Daarnaast maak ik ook nog gebruik van ‘pre-trained’ model om de trainingstijd te versnellen. Wanneer je zelf gaat trainen zorg er dan voor dat er voldoende schijfruimte beschikbaar is. Er komt al minimaal 6GB in de map data/ te staan.

$ python 001_down_data.py

WIDERFace omzetten naar Pascal XML

Er komt eerst nog een conversieslag. De dataset die de universiteit beschikbaar heeft gesteld is in een ander formaat dan bruikbaar is in een labelImg en Tensorflow. Met een script gaan we deze data omzetten. De afbeeldingen die gedownload zijn staan in de map WIDER_train, eerst maakt 002_data-to-pascal-xml.py een los xml-bestand in dezelfde map met de annotatie data gestructureerd opgeslagen. Nadat alle afbeeldingen met een goede tag voorzien zijn van een los xml bestand wordt de inhoud gekopieerd naar een losse map (tf_wider_train). Met het onderstaande script wordt de WIDERFace data omgezet in Pascal XML en worden er losse mappen aangemaakt. Op mijn computer duurt dit 5 minuten aangezien er 9263 afbeeldingen worden verwerkt.

$ python 002_data-to-pascal-xml.py



Train een tensorflow gezicht object detectie model WIDER example using labelImg (credits: http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/); WIDER, example

Pascal XML naar Tensorflow CSV index

Wanneer de data is omgezet naar Pascal XML wordt er een index gemaakt. Met het trainen en valideren van de dataset gebruiken we deze bestanden als input om TFRecords van te maken. Het is echter ook mogelijk om met een tool als labelImg handmatig afbeeldingen te labelen en deze stap te gebruiken om hier een index van te maken.



Train een tensorflow gezicht object detectie model WIDER example using labelImg (credits: http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/); Excel, finder

$ python 003_xml-to-csv.py

Maak een TFRecord file

Een TFRecords file is een groot binair bestand dat uit gelezen kan worden om het Machine Learning model te trainen. Het bestand wordt in de volgende stap sequentieel uitgelezen door Tensorflow. De training en validatie data wordt omgezet d.m.v. onderstaande commando opdrachten omgezet in binaire blobs

Trainingsdata naar TFRecord (847.6 MB)

$ python 004_generate_tfrecord.py --images_path=data/tf_wider_train/images --csv_input=data/tf_wider_train/train.csv --output_path=data/train.record

Validatiedata naar TFRecord (213.1MB)

$ python 004_generate_tfrecord.py --images_path=data/tf_wider_val/images --csv_input=data/tf_wider_val/val.csv --output_path=data/val.record

Prepareren van het config bestand

In de repository staat ssd_mobilenet_v1_face.config, dit is een configuratiebestand dat gebruikt wordt om een Artificial Neural Network te trainen. Dit bestand is gebaseerd op een huisdieren detector.
Het aantal num_classes blijft in dit geval één omdat er alleen gezichten zullen worden herkend.
De variabel fine_tune_checkpoint wordt gebruikt om het pad naar een eerder model aan te geven om learnings te halen. Deze locatie pas je aan in dit bestand. Het finetune checkpoint bestand wordt gebruikt om transfer learning toe te passen. Transfer learning is een methode in Machine Learning dat gefocust is om kennis wat opgedaan van één context toe te passen op een andere context.
In de class train_input_reader wordt een link gelegd met de TFRecord bestanden voor het trainen van het model. In het config-bestand moet je deze aanpassen naar de juiste locatie.
De variabel label_map_path bevat een index id’s en namen. Bij dit bestand wordt nul als placeholder gebruikt en beginnen we dus met nummeren vanaf één.


item {
    id: 1
    name: "face"
}

Voor het valideren zijn er twee variabelen belangrijk. De variabel num_examples binnen de class eval_config wordt gebruikt om het aantal voorbeelden in te stellen.
In de class eval_input_reader staat de locatie van de validatie data beschreven. Op deze locatie staat ook een pad.
Verder is het nog mogelijk om learning rate, batch size en nog meer instellingen te veranderen. Voor nu heb ik de standaard instellingen aangehouden.

Let’s train 😉

Nu gaat het echte werk beginnen. De computer gaat learnings halen uit de dataset en hier een Neural Network van maken. Aangezien ik het model train op een CPU gaat dit een aantal dagen kosten om een goed resultaat te krijgen. Met krachtige Nvidia grafische kaart is het mogelijk om dit te verkorten naar enkele uren.

$ python ~/tensorflow_models/object_detection/train.py --logtostderr --pipeline_config_path=ssd_mobilenet_v1_face.config --train_dir=model_output

Omzetten van checkpoint naar protobuf

Om het model te kunnen gebruiken in Objectherkenning met de Computer Vision library Tensorflow. Het onderstaande commando staat een locatie naar de models repository en naar het laatste checkpoint. In de map model komt frozen_inference_graph.pb te staan.

$ python ~/tensorflow_models/object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path ssd_mobilenet_v1_face.config \
--trained_checkpoint_prefix model_output/model.ckpt-12262 \
--output_directory model/

TL;DR;

In de map model/frozen_inference_graph.pb op de github repository staat een frozen model van het Artificial Neural Network. De Chinese Universiteit van Hongkong heeft WIDERFace beschikbaar gesteld. In deze tutorial wordt deze dataset gebruikt om een gezichtsherkenings Machine Learning model te trainen.

Evaluatie

Naast de data die gebruikt wordt voor het trainen is er ook een evaluatie-dataset. Op basis van deze evaluatie-dataset is het mogelijk om de nauwkeurigheid uit te rekenen. Voor mijn model heb ik de nauwkeurigheid (Mean Average Precision) uitgerekend. Ik kwam op een score van 83.80% bij 14337 stappen (epochs). Voor dit proces heeft Tensorflow een los script en wordt het mogelijk om in Tensorboard te zien wat de score is. Er wordt aangeraden om naast het trainen ook een evaluatieproces te draaien. Je kunt dan het proces monitoren met Tensorboard.

$ python ~/tensorflow_models/object_detection/eval.py --logtostderr --pipeline_config_path=ssd_mobilenet_v1_face.config --checkpoint_dir=model_output --eval_dir=eval

$ tensorboard --logdir=eval --port=6010

Conclusie en het gebruik van het frozen model

Het is gelukt om een gezichtsherkenning model te trainen. Het frozen model model/frozen_inference_graph.pb kan ingezet worden in bijvoorbeeld Objectherkenning met de Computer Vision library Tensorflow.
Mocht de wereld van Computer Vision je interesse hebben gewekt, maar weet je nog niet hoe je dit kunt toepassen en heb je de nodige vragen? Stuur mij dan een mailtje dan kunnen we een kopje koffie drinken.



Train een tensorflow gezicht object detectie model Uit de dataset WIDERFace en de film Marching Band (2009) met XML en LabelImg interface zichtbaar ; faces, tensorflow

Deze blogpost verscheen op Qdraw. Er is een Engelse vertaling beschikbaar op: Towards Data Science – Medium

Dit bericht is geschreven door: Dion van Velde

Tags: , , ,

Gecategoriseerd in:

25 augustus 2017 • november 12, 2019 at 9:16 pm Qdraw

Supersnel foto’s analyseren dankzij Computer Vision

Je hebt de term vast al voorbij horen komen: Computer Vision. Maar wat is het precies? En nog belangrijker, wat kun je er mee? In deze blogpost nemen we je mee in de wereld van Computer Vision. En je kunt het gelijk zelf testen! (1)(Op dit moment is dit helaas niet meer beschikbaar)

Wat is Computer Vision?

Zoek je weleens op Google naar afbeeldingen? Dan maak je indirect gebruik van Artificial Intelligence (AI)-technologieën zoals Computer Vision. Misschien klinkt dit abstract, maar jij gebruikt ze dagelijks. Met computer vision is het mogelijk om beelden automatisch te analyseren. Zo is het mogelijk om objecten te herkennen. Je kunt emotie, objecten, gezichten en teksten in afbeeldingen uit een beeld halen. En dus herkennen. Deze data is erg waardevol en voor van alles te gebruiken.  

Voorbeeld: Analyseren van een foto

Maar hoe is die data dan waardevol? Stel, je verkoopt sportfoto’s. Dan ben je natuurlijk benieuwd welke foto’s wel en niet verkopen. Maar hoe test je dat? Met Computer Vision kun je een groot aantal foto’s analyseren. Stel, je wilt weten of foto’s van vrouwen met merkkleding beter verkopen dan vrouwen met merkloze kleding. Je kunt dan natuurlijk los alle foto’s gaan labelen. Of de computer het werk laten doen.

Als voorbeeld gebruiken we deze onderstaande afbeelding. Wanneer je alleen deze afbeelding hebt, en geen context, kost het je zeker een paar minuten om tot dezelfde conclusie te komen. Terwijl je dit met Computer Vision in een seconde klaar bent.

Gezicht/emotie-herkenning:

  • Detecteert het gezicht op de foto zelf tot op detail, oog, neus mond en oren.
  • Toont dat emotie blij is.
  • Heeft een grote vorm van zelf vertrouwen.

 

Classificatie van de afbeelding:

  • Persoon
  • Sport
  • Atletisch
  • Hardlopen
  • Marathon
  • Langeafstand lopen

 

Optische tekenherkenning (OCR):

  • Mizuno
  • 2012 U.S. Olympic Trials Women’s
  • Marathon
  • PEYTON
  • Mizuno

 


Voorbeeld van: Gezicht-emotie-herkenning, Classificatie van de afbeelding en Optische tekenherkenning Bron: https://www.flickr.com/photos/born_hiker/ 6752685015/

“A picture is worth a thousand words”

Voorbeeld: Analyseren van video

De mogelijkheden gaan verder dan alleen foto’s. Video analyseren kan namelijk ook met Computer Vision. Zo is het mogelijk om objecten te herkennen die aanwezig zijn in het beeld.  Door grote datasets te gebruiken en hier de computer learnings uit te trekken, wordt het mogelijk om objecten, emoties en gezichten te herkennen.

Een toepassing zou kunnen zijn, een slimme camera die de gezichtsuitdrukking volgt van grote groepen mensen: kijken ze verrast, verveeld, opgewonden.

Een kort gifje waarin ik verschillende objecten realtime voor de camera beweeg

Benieuwd hoe het werkt?

Open dan de gezicht en emotie herkenning demo (niet meer beschikbaar)(1) op je smartphone. Maak een foto, de computer verwerkt de foto gelijk voor je. De computer schat je leeftijd, je emotie, of je make up op hebt en welke voorwerpen op de foto staan. Wij hadden in ieder geval een hoop lol met het testen, de computer had het verrassend vaak goed.

Wanneer Computer Vision inzetten binnen je organisatie?

Gaaf he, al die mogelijkheden. Maar wanneer kan computer vision bijdragen aan jouw business of organisatie? Bijvoorbeeld:

  • Als een organisatie veel gebruik maakt van afbeeldingen, foto’s, video;
  • Als geen gebruik wordt gemaakt van de beschikbare informatie op de foto’s, afbeeldingen en video’s;
  • Als grote hoeveelheden data nu met de hand worden geanalyseerd;
  • Als jouw organisatie data gedreven is .

 

Mocht de wereld van Computer Vision je interesse hebben gewekt, maar weet je nog niet hoe je dit kunt toepassen en heb je de nodige vragen? Stuur mij dan een mailtje dan kunnen we een kopje koffiedrinken.

Deze blogpost is geschreven door Dion van Velde en Jeroen Beks en verscheen op Colours.nl en Qdraw.nl

1) Gezicht en emotie herkenning is een vorm van Computer Vision. In de demo wordt alleen het gezicht en de emotie gescand, er worden geen objecten herkend.

Dit bericht is geschreven door: Dion

Tags: , ,

Gecategoriseerd in:

25 juli 2017 • mei 16, 2018 at 3:51 pm Qdraw

Objectherkenning met de Computer Vision library Tensorflow

Met computer vision wordt het mogelijk om foto’s en video’s op intelligente wijze te analyseren om onze steden slimmer en veiliger te maken, nieuwe soorten robots te ondersteunen die productie optimaliseren. In dit artikel ligt een onderdeel van Computer Vision uit, namelijk Object Detection

Tensorflow object detection api

Een belangrijke functionaliteit van Tensorflow is het ‘image recognition’. Tensorflow is een open source library dat door Google in 2015 voor het grote publiek beschikbaar is gemaakt. Het wordt gebruikt om deep learningmodels te bouwen, ontwerpen en te trainen.

Met Tensorflow is het mogelijk met de object detection API  wat het toegankelijk maakt voor onderzoekers en softwareontwikkelaars om objecten te identificeren in een 2d beeld. Het doel van Google van de object detection API  is om een evenwicht te hebben tussen simplicity en performance. Er zijn een aantal voorgetrainde modellen welke door wetenschappers worden gebruikt om algoritmes te trainen.

En nu gaan we het gewoon zelf gebruiken!

Tensorflow is een library die beschikbaar is vanuit Python. Al het zware werk wordt buiten Python gedaan. Python is een programmeertaal die veel wordt gebruikt voor Machine Learning en data-analyse.

In deze tutorial ga ik ervan uit dat je een Ubuntu (Virtuele) machine tot je beschikking hebt. Buiten scope is het inrichten van Nvidia grafische kaarten en met CUDA. Ik heb deze code werkend op Ubuntu 16.04 en Mac OS Siera.

De tekst gaat verder na de onderstaande afbeelding


Objectherkenning met de Computer Vision library Tensorflow Uitzicht met Object Detection; object detection, uitzicht

PIP

Een Python package manager is PIP. Voor het gemak maak ik gebruik van Python 2.7, de code werkt ook met Python 3.6. Voor deze tutorial gebruiken we deze en met het onderstaande commando installeer je deze op je systeem: Het dollarteken geeft aan dat een bash-commando is die als normale gebruiker moet worden uitgevoerd. Dit dollarteken hoeft niet mee te worden gekopieerd.

Ubuntu – $ sudo apt-get install python-pip git -y

Mac OS – $ brew install python

Ik clone de github responsories naar mijn home folder.

$ cd

Tensorflow models

Clone the Tensorflow models van de officiële repository. In deze repository staan Machine Leaning-modelen die getraind zijn met Tensorflow. Voor deze tutorial gebruiken we alleen de slim module en object_detection.

Met dit commando kopieer je de inhoud van de repository. De model map is 167,4 MB groot.

$ git clone https://github.com/tensorflow/models.git

Het het pwd commando wordt het absolute path van de huidige map getoond.

$ pwd

/home/dion

Voeg onderaan toe waar ‘/home/dion’ de naam van je gebruiker is. Dit is om alle bestanden die in de map staan in python in het path laden.

$ nano .profile

export PYTHONPATH=$PYTHONPATH:/home/dion/models/research:/home/dion/models/research/slim

Laad de inhoud van .profile of herstart alle terminal vensters om de inhoud van het bestand te laden.

$ source .profile

Protobuf

Google heeft een manier ontwikkeld om frozen models op te slaan. Een frozen model is Neural Network dat is opgeslagen en in het geheugen kan worden ingeladen.

Dit protocol moet eerst worden geïnstalleerd.

Ubuntu – $ sudo apt-get install protobuf-compiler -y

Mac OS – $ brew install protobuf

De Protobuf libraries moeten eerst worden gecompiled. Dit moet je doen vanuit de model-map:

$ cd models/research/

$ protoc object_detection/protos/*.proto --python_out=.

En ik ga terug naar mijn home folder:
$ cd

OpenCV

Met het onderstaande commando laad ik een bash script van een externe website waarbij OpenCV automatisch wordt gecompileerd en geïnstalleerd in /usr/local. Dit script installeert OpenCV 3.2 en werkt met Ubuntu 16.04.

$ curl -L https://raw.githubusercontent.com/qdraw/tensorflow-object-detection-tutorial/master/install.opencv.ubuntu.sh | bash

Op mijn Macbook maak ik gebruik van OpenCV 3.3.0 en Python 2.7.13. Ik heb hier OpenCV 3.2 en 3.3 proberen te installeren alleen dit werkt niet in combinatie met Python 3.6 terwijl dit op Linux wel werkt.

$ brew install homebrew/science/opencv

De tekst gaat verder na de onderstaande afbeelding


Objectherkenning met de Computer Vision library Tensorflow Compiling OpenCV @Ubuntu 16.04; OpenCV, Ubuntu

Tensorflow-object-detection-tutorial repository

In deze repository heb ik alle inhoud verzameld. Er zijn twee voorbeelden, het eerste voorbeeld wordt een afbeelding geanalyseerd en het tweede voorbeeld laat een livebeeld zien van de webcam. Met de onderstaande opdracht kopieer je de map van Github.

$ git clone https://github.com/qdraw/tensorflow-object-detection-tutorial.git

Het volgende deel van de uitleg voeren we uit vanuit de onderstaande map:
$ cd tensorflow-object-detection-tutorial/

De benodigdheden van de demo moeten nog worden geïnstalleerd.

$ pip install -r requirements.txt

Het analyseren van een afbeelding

Voor deze demonstratie analyseren we een foto die gemaakt is bij Colours op het kantoor in Den Bosch. We zoeken naar alle objecten in deze foto. Het algoritme kan een aantal auto’s al vinden.

$ python image_object_detection.py

Druk ‘ctrl + C’  binnen het terminalvenster om het programma af te sluiten

De tekst gaat verder na de onderstaande afbeelding


Objectherkenning met de Computer Vision library Tensorflow Herkennen van een Appel en Banaan; appel, banaan, object detection

Het analyseren van het beeld van je webcam

Met OpenCV wordt het mogelijk om webcambeelden in Python in te laden. In dit script draaien meerdere processen tegelijk waardoor het afsluiten lastig is.

$ python webcam_object_detection.py

De snelste en makkelijkste manier om af te sluiten is in een ander terminalvenster het proces te killen.

Ubuntu – $ pkill python

Mac OS – $ pkill Python

Het analyseren van het beeld van je webcam.

 

Mocht de wereld van Computer Vision je interesse hebben gewekt, maar weet je nog niet hoe je dit kunt toepassen en heb je de nodige vragen? Stuur mij dan een mailtje dan kunnen we een kopje koffie drinken.

25 september 2017: De tensorflow/models git repository heeft de paden veranderd, deze heb ik in deze tutorial gewijzigd.

Dit bericht is geschreven door: Dion

Tags: , , ,

Gecategoriseerd in:

13 februari 2017 • maart 25, 2024 at 6:35 pm Qdraw

De vijf dingen die je niet wist over Artificial Intelligence

In deze blog ga ik het hebben over vijf verschillende thema’s binnen kunstmatige intelligentie. Deze thema’s gaan van de geschiedenis tot zelfrijdende auto’s.

  1. Er bestaat een test om te bepalen of een machine ‘sociale intelligentie’ vertoond;
  2. A.I. is ook de ‘dame’ in je telefoon die handige zaken handsfree regelt;
  3. Artificial Intelligence leert dankzij jou;
  4. Zelfrijdende auto’s heeft A.I. nodig om succesvol te zijn;
  5. Zelfs huisdieren hebben Artificial Intelligence.

 

1. Er bestaat een test om te bepalen of een machine ‘sociale intelligentie’ vertoond

De test om te bepalen of een machine ‘menselijke intelligentie’ kan vertonen is voor het eerst geïntroduceerd door de computerpioneer Alan Turing in 1950. “Kunnen machines denken?” is de hoofdvraag in de paper ‘Computing Machinery and Intelligence’ uit 1950. Sociale intelligentie wordt gemeten, niet de feitelijke kennis. Inmiddels is het de computers allang gelukt om beter te zijn in feitelijke kennis, neem als bijvoorbeeld IBM Watson met Jeopardy. Jeopardy draait om het antwoorden van triviant-vragen. In 2011 wist Jeopardy de all-time highscores te verbeteren.

De turingtest houdt in dat drie deelnemers afzonderlijk de test uitvoeren. De deelnemers zijn: Een computer, een mens en een mens die moet beoordelen wie de computer is. De computer en de mens proberen de beoordelaar te overtuigen dat zij mensen zijn.
Na een aantal vragen is duidelijk wat de status is van de sociale intelligentie van de computer. Deze status wordt vastgesteld door aan de beoordelaar te vragen wie de computer is. Wanneer de beoordelaar het niet goed inschat heeft de computer gewonnen.

80’s computer

2. A.I. is ook de ‘dame’ in je telefoon die handige zaken handsfree regelt

Wanneer je je telefoon vraagt om iets te doen door de spraak-assistent te activeren, dan wordt je stem doorgestuurd naar een clouddienst waar je stem door middel van Artificial Intelligence wordt vertaald naar geschreven tekst. Vervolgens wordt er een antwoord geformuleerd en deze wordt uitgesproken door een vriendelijke stem, wat in werkelijkheid gecombineerde woordklanken zijn die een geheel vormen. Op deze manier is het mogelijk om taken uit te voeren zonder gebruik te maken van een interface.

Er is daarnaast nog een andere vraag; Is een vrouwenstem minder eng is dan een mannenstem? Voor veel mensen is een spraak assistent toch de eerste kennismaking met A.I. Er is veel onderzoek gedaan naar of een vrouwenstem in combinatie met A.I., minder eng is dan een mannenstem. Uit onderzoek blijkt dat de verschillen klein zijn maar dat een vrouwenstem toch beter is. Vergelijk ‘Samantha’ in de film ‘Her’ maar eens met de Terminator machines.

Siri, maar nog in de tijd van iOS6.


De vijf dingen die je niet wist over Artificial Intelligence ; | foto 2, ‘reCAPTCHA’ in gebruik

3. Artificial Intelligence leert dankzij jou

Wanneer je een formulier invult, dan wordt er nog weleens gevraagd om iets over te typen. In het verleden werden hier huisnummers getoond. Wist je dat deze nummers gebruikt werden door Google om de software uit te dagen en zo beter te worden in het herkennen van schrift? Het tonen van deze ‘CAPTCHA’-vragen is om te voorkomen dat er nieuwe spamgebruikers zich toevoegen.

Google had al de streetview-data, een gigantische hoeveelheid afbeeldingen van complete landen. De volgende stap is om hier iets mee te doen. Het was in het verleden lastig om het huisnummer te vinden binnen een straat. Dus heeft Google software ontwikkeld om de huisnummers te vinden, zelf het huisnummer te herkennen. Het vragen aan de massa is een goed middel om door middel van Artificial intelligence een ‘Neural Network’ op te zetten. Vergelijk een Neural Network maar met je hersenen. Er wordt een grote verzameling connecties die gemaakt. Op deze manier is het mogelijk om, op een snelle manier, de gebruikers net iets beter te helpen.

‘reCAPTCHA’ voordat het gebruik ging maken van streetview-data.

4. Zelfrijdende auto’s heeft A.I. nodig om succesvol te zijn

Een zelfrijdende auto heeft veel sensoren, zo wordt er bijvoorbeeld in een Tesla gebruik gemaakt van 8 camera’s die samen 360-graden beelden maken van de omgeving. Om de diepte te kunnen inschatten wordt radar en sonar gecombineerd. Zo kan het systeem ook echt zien hoe de omgeving eruitziet. De data wordt slim gecombineerd en met slimme zelflerende algoritmes wordt de beste route bepaald. Dit allemaal zodat jij veilig aankomt op je bestemming.

Een prototype van een zelfrijdende Google auto

Als een zelfrijdende auto geen zelflerend systeem zou hebben, zou voor elke situatie een losse regel moeten worden uitgeschreven. In een situatie op straat zouden die zo veel regels zijn dat mensen dingen over het hoofd gaan zien. Elke situatie is uniek en door gebruik te maken van een zelflerend systeem worden regels snel toegevoegd. Daarnaast kunnen auto’s onderling deze kennis snel delen. De zelflerende auto kan een andere inschatting kunnen maken en voorkomen dat bijvoorbeeld de onderstaande kat wordt aangereden.

Iets met een kat en een zelfrijdende auto…

5. Zelfs huisdieren hebben Artificial Intelligence

Het bekendste voorbeeld een artificieel huisdier is Aibo. De door Sony geproduceerde hond had als enigste doel om mensen gezelschap te houden. Wanneer een huisdier intelligenter is wordt het makkelijker voor een mens om hier een emotionele band mee te hebben.

Waar een robothond gebruikt voor kan worden is het delen van verhalen, op een interactieve manier lesmateriaal over te brengen. Daarnaast worden zorgrobots ook gebruikt om ouderen te ondersteunen. Een taak van een zorgrobot is het herkennen van ongelukken. Een robot kan je ook helpen herinneren aan een afspraak.


De vijf dingen die je niet wist over Artificial Intelligence ; | foto 1

Het Aibo hondje, wat in het Japans ‘vriend’ of ‘maat’ betekend.

Mocht de wereld van Artificial Intelligence je interesse hebben gewekt, maar weet je nog niet hoe je dit in je organisatie kunt toepassen en heb je de nodige vragen? Stuur mij dan een mailtje dan kunnen we een kopje koffie drinken.

Voor dit blogartikel heb ik gebruikt gemaakt van de volgende bronnen: LiveScience, technologyreview, ieee.org, Flickr, Giphy, Giphy en Giphy

Deze blogpost verscheen op Colours.nl en op de weblog van Dion van Velde.

Dit bericht is geschreven door: Dion

Tags: ,

Gecategoriseerd in:

13 januari 2017 • maart 27, 2024 at 9:01 pm Qdraw

Machine Learning bestaat voor 80% uit data-analyse

Verschillende bedrijven maken actief gebruik van Machine Learning. Een aantal banken zijn bijvoorbeeld met deze vorm van Artificial Intelligence aan de slag gegaan om real-time transacties te analyseren. Zo kan een dergelijk systeem op basis van grote hoeveelheden data voorspellingen doen, die bijvoorbeeld kunnen aantonen of een transactie mogelijk frauduleus is. Erg handig dus!

De trend van geautomatiseerde voorspellingen zal voorlopig nog voortzetten, waarbij new business concepten zullen worden ontwikkeld die van grote waarde kunnen gaan zijn, zoals het voorbeeld van de bancaire sector. Het blijft daarbij noodzaak om met deze technologieën te experimenteren. Voor een mens is het vrijwel onmogelijk om dergelijke voorspellingen met de hand te doen. Daar is de hoeveelheid data te groot voor, toch speelt de mens wel een grote rol in het traject.

Voordat gestart kan worden met het opzetten van een Machine Learning systeem zal eerst een boel data moeten worden geanalyseerd. Uit ervaring blijkt dat data-analyse 80% van de tijd in beslag zal nemen en de laatste 20% zal zitten in het configureren van het Machine Learning algoritme. Dus hoe gaat dat analyseren nu precies in zijn werk? In deze blog leg ik dat in 7 stappen uit.

Allereerst een kleine introductie over wat Machine Learning nu precies doet: het is een systeem dat leert van het gedrag dat een gebruiker vertoont en de data die een gebruiker daarmee achterlaat. In deze data zal het systeem patronen herkennen. Op basis van de patronen ontwikkelt het een algoritme en een model dat de voorspellingen maakt. In het blogartikel ‘Voorspellen of een gebruiker lid blijft‘ vertel ik hoe dat precies in zijn werk gaat. Op basis van het algoritme kan het systeem voorspellingen doen, waarbij het potentie heeft om zelfstandig te kunnen opereren.

Stap 1: Doel bepalen Machine Learning traject

De eerste stap is te bepalen wat er voorspelt moet worden en een doel te koppelen aan het onderzoek. Een doel kan bijvoorbeeld zijn: ‘ik wil kunnen voorspellen of een websitebezoeker een bestelling zal gaan plaatsen.’ Dit geeft richting aan het onderzoek en inzicht in welk probleem er precies opgelost moet worden.

Stap 2: Data verzamelen

In de tweede stap van het Machine Learning traject moet geïnventariseerd worden wat voor data beschikbaar is. Vervolgens is het aan jou om in het systeem aan te geven welke data van belang is en welke data ruis bevat. Dit is een belangrijke stap, omdat op deze wijze het systeem in de juiste richting gestuurd wordt en gaat begrijpen wat de juiste voorspellingen moeten zijn. Om deze stap te kunnen nemen moet de data inzichtelijk worden gemaakt. Samenvatten en visualiseren van de data helpt om daar grip op te krijgen.

Stap 3: Samenvatten van data

Een goede samenvatting van de data kan helpen inzicht te krijgen in verschillende datastructuren en te controleren of de dataset zuiver is. Het is namelijk van belang de dataset zo zuiver mogelijk te krijgen. In feite ga je in deze stap beginnen met de data te analyseren.

Om een goede samenvatting te maken zal je een antwoord moeten krijgen op een aantal vragen zoals: hoe is de data opgebouwd? Wat voor categorieën worden er gebruikt? Wat betekenen de waardes van de data? Gaat het om een getal, of een getal met decimalen? Wat is de hoogste waarde? Wat voor eigenschappen heeft deze waarde nog meer en hoe wordt deze toegepast? Is het mogelijk om gemiddelden te maken? Zijn er belangrijke uitschieters en wat houden deze in?

Wanneer eventuele correlaties en lineaire verbanden onderzocht moeten worden kunnen de waardes gecontroleerd worden aan de hand van de correlatiecoëfficiënt van Pearson. Mocht het gaan om waardes op ordinaal niveau, dus een rangschikking, kan gebruik worden gemaakt van de Spearman’s rang-correlatie, waarbij de data vervangen wordt door rangnummers en alsnog een correlatie kan worden berekend.

Zoeken naar waardevolle data in een zee vol informatie. De tekst gaat verder na de afbeelding


Machine Learning bestaat voor 80 procent uit data-analyse ; | foto 1

Stap 4: Functionele datavisualisatie

Ook is het handig om data visueel te maken. Grafieken en tabellen kunnen inzicht geven in mogelijk interessante structuren. Een mogelijkheid is gebruik te maken van een histogram of scatterplot. Let hierbij op de verschillende groepen en de eventuele verspreiding van deze groepen.

Er zijn verschillende tools om datavisualisaties te maken. Je zou deze visualisaties kunnen maken met R-Studio. R-Studio maakt gebruik van de programeertaal R. De programeertaal R is ontwikkeld voor statistiek en data-analysedoeleinden en wordt ook veel gebruikt voor Machine Learning.

Een histogram kan gebruikt worden om een beter beeld te krijgen bij de getallen. Bij een eenvoudige dataset kun je eventuele verbanden nog aflezen, maar als het complexer wordt is aan te raden om een hulpmiddel, zoals het histogram te gebruiken. De tekst gaat verder na de afbeelding.


Machine Learning bestaat voor 80 procent uit data-analyse ; | foto 2

Een andere methode die gebruikt kan worden om data visueel te maken is het scatter plot. Dit is een twee dimensionele weergave van een structuur, waarin twee variabelen worden weergegeven en het mogelijk maakt om een eerste indruk te krijgen van eventuele correlaties te ontdekken. Op deze manier krijg je een eerste indruk van de data.

Een voorbeeld kan zijn de eruptiedata van de ‘Old Faithful’ geiser in Yellowstone. Waarbij er twee assen zijn: de wachttijd tussen de erupties en de duur van de eruptie. De tekst gaat verder na de afbeelding.


Machine Learning bestaat voor 80 procent uit data-analyse ; | foto 3

Stap 5: Opstellen onderzoeksvraag

Wanneer de data geanalyseerd is en het doel van het onderzoek duidelijk, is de volgende stap om een onderzoeksvraag op te stellen, om vervolgens te bepalen welke data nodig zijn om het model te trainen. In de blogpost ‘De 6 must-know’s voordat je start met Machine Learning’ geef ik een aantal handvaten over het opstellen van een goede onderzoeksvraag, om de juiste inzichten en voorspellingen uit het systeem te krijgen. Hierin staan ook de verschillende vormen van Machine Learing beschreven welke je in de volgende stappen nodig bent.

Stap 6: Traningsdata (Pre-processing modules)

Nu het doel bepaald is, de gegevens klaar staan en een onderzoeksvraag is opgesteld, is het tijd om het voorspellend model te gaan bouwen en te trainen. Het is mogelijk om een algoritme van tevoren te trainen met behulp van een trainingsdataset. In het hypothetische geval dat er voorspeld moet worden of een websitebezoeker een bestelling zal gaan plaatsen kan een dergelijke trainingsdataset bestaan uit het aantal frequenties dat een bepaald type handeling is uitgevoerd.

In mijn eerdere blogpost ‘Voorspellen of een gebruiker lid blijft’ wordt dieper ingegaan op het proces van trainen van het model en hoe we dit precies doen aan de hand van het machine learning itaration model. In het model wordt ‘stap 6’: ‘Pre-processing modules’ genoemd. De tekst gaat verder na de afbeelding.


Machine Learning bestaat voor 80 procent uit data-analyse ; | foto 4

Stap 7: ‘Machine Learning algorithm’ toepassen

Op basis van de trainingsdata wordt het Machine Learning algoritme gevoed. Dit komt omdat het model steeds weer resultaten produceert, die gebruikt worden om oude algoritmes te verbeteren. Oftewel de uitkomst van elke stap leert of alle voorgaande stappen goed zijn uitgevoerd, maar het is aan jou om het juiste algorimte te kiezen en de waardes te tweaken.

Mocht de wereld van toegepaste data-analyse en Machine Learning je interesse hebben gekregen, maar je hebt nog de nodige vragen? Laten we dan eens een kop koffie drinken.

Voor dit blogartikel heb ik gebruikt gemaakt van de volgende bronnen: machinelearningmastery.com/quick-and-dirty-data-analysis-for-your-machine-learning-problem, www.gartner.com/smarterwithgartner/gartners-top-10-technology-trends-2017, R-tutor en Stackoverflow.

Deze blogpost verscheen op Colours.nl en op de weblog van Dion van Velde. Credits voor dit artikel gaan ook naar onze ‎Online Marketeer: Elizabeth Geul, zij heeft bijgedragen aan de tekst door deze te redigeren.

Dit bericht is geschreven door: Dion

Tags: , , ,

Gecategoriseerd in:

25 november 2016 • maart 25, 2024 at 6:34 pm Qdraw

De 6 must-know’s voordat je start met Machine Learning

Het is mogelijk om met Artificial Intelligence de toekomst te voorspellen. Machine Learning is een vorm van Artificial Intelligence waarbij de machine zichzelf patronen aanleert. Bij het implementeren van Machine learning worden er een aantal basis patronen geprogrammeerd. Op basis van nieuwe inputdata leert de computer (d.m.v. Machine Learning) de huidige data (bestaande patronen) te trainen en uit te breiden.
Dit model kunnen we succesvol inzetten om de uitkomsten van nieuwe data te voorspellen. Met dank aan deze voorspellingen kan een organisatie sneller succesvol zijn en de concurrenten een stap voor blijven. In dit proces is het belangrijk om de juiste vragen te stellen en te weten wanneer je succes hebt. In dit artikel ga ik het hebben over de zes must knows om Artificial Intelligence succesvol in te zetten.

Stappen in het Machine Learning proces

Om een beter beeld te geven hoe het proces verloopt, is er een model ontwikkeld: het ‘Machine Learning Iteration Model’. Je begint elk proces altijd met de input van raw data. Deze data moet vervolgens verwerkt worden tot trainingdata. Trainingdata is de data die geschikt is om te voeden aan het Machine Learning algoritme. De Machine Learning algoritme maakt van deze gegevens een model. De eerste versies van zo’n model worden ook wel candidate models genoemd. Het model berekend op basis van de trainingdata de voorspelling. De app maakt vervolgens verbinding met het model om op basis van nieuwe data voorspellingen te doen.

Tekst gaat verder na de afbeelding



Machine Learning iteration model | foto 1

De 6 must knows

  1. Stel de juiste vraag om te voorspellen.

    Het proces van Machine Learning valt of staat bij een goede onderzoeksvraag. Zo’n vraag moet daarom voldoen aan de volgende vier punten:

    • Maak de scope helder: wat gaan we nu voorspellen en wat niet;
    • Maak duidelijk wat het doel van de voorspelling is;
    • Maak inzichtelijk in welke context/situatie de vraag relevant is.

      Er moet een mogelijkheid zijn om te meten of de machine defect is. Dit klink logisch maar dat is het over het algemeen niet.
    • Maak meetbaar wanneer het een succes is.
      En welke manier van Machine Learning hiervoor gebruikt kan worden.
      (In het artikel “Voorspellen of een gebruiker lid blijft” vertel ik iets meer over de verschillende vormen van Machine Learning).
  2. Verwerk de raw data (volledig) tot trainingdata.

    Aan de hand van de trainingdata kan het Machine Learning algoritme voorspellingen doen. Elke stap die hierna komt heeft een toenemende afhankelijkheid van de vorige stap. Als je een belangrijk data-element bent vergeten toe te voegen in de eerste stap, kom je in de volgende stappen in de problemen. Hierdoor zal je opnieuw moeten beginnen;

  3. Verwacht dat je stappen terug moet doen.

    Machine Learning is een itererend proces waarbij je steeds tot nieuwe inzichten komt en steeds meer leert over de data. Hierdoor moet je uitzoeken of die nieuwe inzichten/leerpunten ook toepasbaar zijn op eerder gemaakte stappen;

  4. Check tijdens het proces of je nog data mist.

    In een Machine Learning proces kom je er in veel gevallen achter dat er data mist. Er zijn drie manieren om dit op te lossen:

    • Door data van een andere bron erbij te zoeken, en deze twee databronnen te combineren;
    • Door eerst te bewijzen door middel van zelf gegeneerde nep data dat de data daadwerkelijk antwoord geeft op de vraag. Pas daarna met echte data aan de gang te gaan;
    • Door de data die nodig is om een voorspelling te doen alsnog te verzamelen en daarna opnieuw een model te maken met Machine Learning.
  5. Zorg ervoor dat de data is gestructureerd.

    Wanneer je meer data hebt vergroot je de kans dat het voor de machine makkelijker wordt om patronen te vinden. Het is hierbij wel belangrijk dat de data compleet is en niet vervuild. Machine Learning kan namelijk niet helpen bij het opschonen van vervuilde data.

  6. Ga niet verder met een slechte oplossing.

    Evalueer de data en kijk of je eventuele fouten kunt oplossen. Hierdoor kan je een betere voorspelling maken. Mocht dit niet lukken, beëindig dan de voorspelling en begin opnieuw met een nieuwe voorspelling. Zoals het Duitse automerk zou zeggen “Das beste oder nichts”.

Deze 6 must knows geven je een handvat om Machine Learning in te zetten in echte projecten. Het doel is om altijd beter te kunnen voorspellen dan om zomaar een willekeurige gok te doen. Dit heeft als voordeel dat je een stapje voor bent op de concurrent en wie wil dat nu niet.



Binary Bridge at Georgia tech (Door: Chris McClanahan) | foto 2

Deze blog is geschreven door Dion van Velde en verscheen op Colours.nl en mijn eigen blog Qdraw

Dit bericht is geschreven door: Dion

Tags: , , , ,

Gecategoriseerd in: