<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Karol Majek on Medium]]></title>
        <description><![CDATA[Stories by Karol Majek on Medium]]></description>
        <link>https://medium.com/@karol_majek?source=rss-9d443df5713e------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*5P2Z_mK91lDOb0RGLG7mIw.jpeg</url>
            <title>Stories by Karol Majek on Medium</title>
            <link>https://medium.com/@karol_majek?source=rss-9d443df5713e------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 16:25:56 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@karol_majek/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[10 simple steps to Tensorflow Object Detection API]]></title>
            <link>https://medium.com/@karol_majek/10-simple-steps-to-tensorflow-object-detection-api-aa2e9b96dc94?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/aa2e9b96dc94</guid>
            <category><![CDATA[tensorflow]]></category>
            <category><![CDATA[object-detection]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Fri, 20 Jul 2018 06:58:05 GMT</pubDate>
            <atom:updated>2019-09-04T15:05:47.088Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*HQjY47mdEQi3Ur5P.jpg" /></figure><p>Don’t know how to run Tensorflow Object Detection? In this tutorial, I will show you 10 simple steps to run it on your own machine! We will use Tensorflow version 1.8. Are you ready to start detecting objects?</p><p>This guide will help you install Tensorflow on GPU enabled host. You will need Nvidia GPU with Compute Capability equal to 3.0 or greater. You can <a href="https://developer.nvidia.com/cuda-gpus">check CC here</a>. If you don’t have such GPU you can omit CUDA and CUDNN installation and just install tensorflow without GPU support.</p><p>You can try to use these steps to install Tensorflow on Windows, but you will probably need some additional steps to accomplish it.</p><h3>0. Operating system</h3><p>I recommend <strong>Ubuntu 16.04 / 18.04</strong>. You can try Windows but Tensorflow doesn’t provide GPU enabled version for this OS. In Apple, there is no GPU anymore. In this tutorial, I will focus on Ubuntu and I will show you some tricks which will help to install.</p><h3>1. Install CUDA Toolkit 9.0</h3><p>Wow, why should I install 9.0 and not 9.1 or 9.2? Because Tensorflow 1.8 is built with 9.0, so you can just download the prebuild version. If you really need the bleeding edge not-stable version you can waste few days and compile it.</p><p>From the CUDA Toolkit Archive download version specific for your OS. In case of Ubuntu <strong>don’t use run-file</strong> installer — it destroys graphics driver and you will <a href="https://ubuntuforums.org/showthread.php?t=2367755">be stuck in the login loop</a>. <strong>Use deb remote or local</strong>.</p><p>Download from here: <a href="https://developer.nvidia.com/cuda-90-download-archive">https://developer.nvidia.com/cuda-90-download-archive</a></p><h3>2. Install CUDNN 7.0.5 for CUDA 9.0</h3><p>CUDNN provides functions specific to neural networks that are used by Tensorflow. It is extremely important to download the correct version for your CUDA and OS.</p><p>You will need to register. Registration is free.</p><p><a href="https://developer.nvidia.com/rdp/cudnn-archive">https://developer.nvidia.com/rdp/cudnn-archive</a></p><h3>3. Install python</h3><p>If you are already using python just go to next step. There are many ways to install python. I will show you three of them, namely Anaconda, Virtualenv and native.</p><p>Anaconda and Virtualenv allow you to have multiple environments with different sets of libraries.</p><h3>Anaconda</h3><p>You can download it from here: <a href="https://www.anaconda.com/download/">https://www.anaconda.com/download/</a></p><h3>Virtualenv</h3><p>Here you will find instructions to download Virtualenv: <a href="https://virtualenv.pypa.io/en/stable/installation/">https://virtualenv.pypa.io/en/stable/installation/</a></p><h3>Native python</h3><p>You will need to install python and package management system <em>pip</em>. Here is simple way to install python3 on Ubuntu.</p><pre>sudo apt-get update<br>sudo apt-get install -y build-essential libssl-dev libffi-dev python3-dev python3 python3-pip</pre><h3>4. Install Tensorflow</h3><p>When you prepared your python environment, you are ready to install Tensorflow:</p><p>Install Tensorflow <strong>with GPU</strong> support:</p><pre>pip install tensorflow-gpu</pre><p>Install Tensorflow <strong>without GPU</strong> support:</p><pre>pip install tensorflow</pre><h3>5. Download Tensorflow repository</h3><p>If you don’t have <strong>git</strong> installed, install git with following command:</p><pre>sudo apt install -y git</pre><p>Now we will clone Tensorflow and Tensorflow models repositories:</p><pre>git clone <a href="https://github.com/tensorflow/tensorflow">https://github.com/tensorflow/tensorflow</a><br>cd tensorflow<br>git clone <a href="https://github.com/tensorflow/models">https://github.com/tensorflow/models</a></pre><p>These repositories have tags matching versions of Tensorflow. You can checkout to a particular version, but from my experience you can leave it on branch master with latest commit.</p><h3>6. Install Object Detection API</h3><p>Now we will install the APU using this guide:<a href="https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md">https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md</a></p><p>So let’s install necessary libraries:</p><pre>sudo apt-get install protobuf-compiler python-pil python-lxml python-tk<br>pip install --user Cython<br>pip install --user contextlib2<br>pip install --user jupyter<br>pip install --user matplotlib</pre><h3>7. Install COCO API</h3><p>We will need to for model evaluation, but it is a good idea to install it just now. <strong>Change &lt;path_to_tensorflow&gt; to path to your Tensorflow repository.</strong></p><pre>git clone <a href="https://github.com/cocodataset/cocoapi.git">https://github.com/cocodataset/cocoapi.git</a><br>cd cocoapi/PythonAPI<br>make<br>cp -r pycocotools &lt;path_to_tensorflow&gt;/models/research/</pre><h3>8. Install Protoc</h3><p>You can download it here: <a href="https://github.com/google/protobuf/releases">https://github.com/google/protobuf/releases</a></p><p>For 64-bit Ubuntu you will need: <strong>protoc-3.6.0-linux-x86_64.zip</strong></p><p>After downloading run following command:</p><pre># From tensorflow/models/research/<br>protoc object_detection/protos/*.proto --python_out=.</pre><p><strong>Troubleshooting</strong></p><ol><li><strong>protoc</strong> not found</li><li>Install protoc in /usr/bin/local</li><li>Run protoc by providing the absolute path to protoc executable</li><li>Protoc returns anything (shouldn’t print any message)</li><li>Install the newest protoc</li><li>Make sure that you haven’t installed protoc from Ubuntu repository using <em>apt</em>.</li></ol><h3>9. Install object detection</h3><p>If you want to run object detection from any directory, I guess you want, you will need to add the path to your ~/.bashrc file. Obviously change <strong>&lt;path_to_tensorflow&gt;</strong> , replace ~with $HOME.</p><pre>export PYTHONPATH=$PYTHONPATH:&lt;path_to_tensorflow&gt;/models/research/:&lt;path_to_tensorflow&gt;/models/research/slim</pre><h3>10. Install Jupyter Notebook</h3><p>This is a powerful tool! With the notebook, you can write your code interactively in your web browser. You will be able to run code cells step by step or all at once. Give it a try!</p><p>Here you will find installation instructions: <a href="http://jupyter.org/install">http://jupyter.org/install</a></p><p>If you are new to jupyter notebook:</p><ul><li>Yes, you can download your code as .py file</li><li>The notebook is good to create a rapid demo</li><li>You can also run system commands using exclamation mark e.g.!ls -la</li><li>Give it a try!</li></ul><h3>11. Run the demo now!</h3><p>Now you are ready to run following demo in jupyter notebook <a href="https://github.com/tensorflow/models/blob/master/research/object_detection/object_detection_tutorial.ipynb">object_detection_tutorial.ipynb</a>.</p><pre>cd tensorflow/models/research/object_detection<br>jupyter-notebook object_detection_tutorial.ipynb</pre><p>Now you can run each cell or all at once. The result will show up after the very last code cell. You will see detections on all of two images from test_images directory.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OWijmty1uz6fegxu.jpg" /></figure><h3>Other models</h3><p>In this notebook, you can check different models by changing the MODEL_NAME.</p><pre>MODEL_NAME = &#39;mask_rcnn_inception_v2_coco_2018_01_28&#39;</pre><p>Here you will find a list of available models: <a href="https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md">Model ZOO</a></p><p>If you want to use models trained on datasets other than MS COCO you will need to chage PATH_TO_LABELS respectively.</p><p>Using other models you can detect object masks!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Ia5D26FZHWyxhPce.jpg" /></figure><h3>What’s next?</h3><p>Now you know how to run object detection for single images. You can try one of these ideas:</p><ul><li>Test nets on your images by copying them toobject_detection/test_images</li><li>Check other models with bounding boxes and masks!</li><li>Run object detection for the video — <a href="https://www.youtube.com/watch?v=ECzSUCJdwco">like here</a></li><li>Try to track objects in following frames</li><li>Run it on your android phone — <a href="https://www.youtube.com/watch?v=PcCc_wROVPE">like here</a></li></ul><p>Do you have any other ideas?<br>Any questions or problems?<br>Write your comment below!</p><p>I will try to write about all these ideas in future posts!</p><h3>Conclusion</h3><p>Now you know how to install Tensorflow in simple steps. You prepared your environment to run object detection, and you ran object detection using one or more models.</p><p>Did you like this post?<br>What can be improved?<br>Please provide your feedback!</p><h3>Links</h3><ul><li><a href="https://github.com/tensorflow/tensorflow">Repozytorium Tensorflow</a></li><li><a href="https://github.com/tensorflow/models">Repozytorium Tensorflow models</a></li><li><a href="https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md">ZOO</a></li><li><a href="https://pythonprogramming.net/introduction-use-tensorflow-object-detection-api-tutorial/">TF Object Detection API Tutorial by Sentdex</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aa2e9b96dc94" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BDD100K Dataset]]></title>
            <link>https://medium.com/@karol_majek/bdd100k-dataset-25e83e09ebf8?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/25e83e09ebf8</guid>
            <category><![CDATA[object-detection]]></category>
            <category><![CDATA[dataset]]></category>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Fri, 20 Jul 2018 06:54:50 GMT</pubDate>
            <atom:updated>2018-07-20T06:54:50.311Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5anE4ZuGcS94XoOU.jpg" /></figure><p>Instance segmentation, object detection, drivable areas and lane markings — all you can find in Berkley DeepDrive 100K Dataset. It consists of more than 100 000 HD videos recorded at various times, seasons and weather. The dataset includes localization, timestamp and IMU data.</p><p>Data were collected in 4 locations which 3 are close to each other (SF, Berkeley and Bay Area), and the last one is New York.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*k5NDU-gmjL0q4OD6.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*xfpEfcC4l-Cn_QXh.jpg" /></figure><p>Distribution across various weather conditions is not uniform — plots are in log scale!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*3BFY2-qCDqrSaDN-.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*gZ-0xuut4si1IjVm.jpg" /></figure><p>In this dataset, there are only 10 object categories:</p><ol><li>bike</li><li>bus</li><li>car</li><li>motor</li><li>person</li><li>rider</li><li>traffic light</li><li>traffic sign</li><li>train</li><li>truck</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*FqYidsWaEe1oARrv.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5tmkUUQ_iiE-LLCB.jpg" /></figure><p>Instance Segmentation Instances [4]Instance segmentation categories:</p><ol><li>banner</li><li>billboard</li><li>lane divider</li><li>parking sign</li><li>pole</li><li>polegroup</li><li>street light</li><li>traffic cone</li><li>traffic device</li><li>traffic light</li><li>traffic sign</li><li>sign frame</li><li>person</li><li>rider</li><li>bicycle</li><li>bus</li><li>car</li><li>caravan</li><li>motorcycle</li><li>trailer</li><li>train</li><li>truck</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*EvzjnJlAg7NLrokE.png" /></figure><p>Drivable area categories:</p><ul><li>area/alternative</li><li>area/drivable</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*tMo7UTrSXajkbvzT.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*4sRdmt9Y6sVhYlD9.jpg" /></figure><p>Lane marking categories:</p><ul><li>lane/crosswalk</li><li>lane/double other</li><li>lane/double white</li><li>lane/double yellow</li><li>lane/road curb</li><li>lane/single other</li><li>lane/single white</li><li>lane/single yellow</li></ul><p>To sum up, we get a new dataset with the relatively low number of categories. These categories focused on road object detection.</p><p>I highly recommend training your own neural network using this dataset!<br>If you need any help — please contact me!</p><h3>Links</h3><ol><li><a href="https://github.com/ucbdrive/bdd-data">Source Code on Github</a></li><li><a href="http://bdd-data.berkeley.edu/">BDD100K Page</a></li><li><a href="http://bair.berkeley.edu/blog/2018/05/30/bdd/">BAIR Post</a></li><li><a href="https://arxiv.org/pdf/1805.04687.pdf">arXiv Paper</a></li></ol><p>If you like this work show me your support!<br>Follow me on:</p><ul><li><strong>YouTube</strong>: <a href="https://www.youtube.com/karolmajek">https://www.youtube.com/karolmajek</a></li><li><strong>Twitter</strong>: <a href="https://twitter.com/karol_majek">https://twitter.com/karol_majek</a></li><li><strong>Medium</strong>: <a href="https://medium.com/@karol_majek">https://medium.com/@karol_majek</a></li><li><strong>My personal page</strong>: <a href="http://karolmajek.pl/">http://karolmajek.pl/</a></li><li><strong>Deep Drive PL blog</strong>: <a href="https://deepdrive.pl/en/">https://deepdrive.pl/</a></li></ul><p>Originally published on: <a href="https://deepdrive.pl/bdd100k-dataset/">https://deepdrive.pl/bdd100k-dataset/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=25e83e09ebf8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Open Images Dataset V4]]></title>
            <link>https://medium.com/@karol_majek/open-images-dataset-v4-237fc006b094?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/237fc006b094</guid>
            <category><![CDATA[neural-networks]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[dataset]]></category>
            <category><![CDATA[object-detection]]></category>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Fri, 20 Jul 2018 06:50:43 GMT</pubDate>
            <atom:updated>2018-07-20T06:54:09.162Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Z39Qk5Urx6A_IJfp.png" /></figure><p>30th April 2018 new version of Open Images Dataset V4 is released. There is also announced a challenge for best object detection results using this dataset.</p><p>Here you can see data examples: <a href="https://storage.googleapis.com/openimages/web/visualizer/index.html">Open Images Dataset V4</a></p><h3>ECCV 2018 Open Images Challenge</h3><p>During <a href="https://eccv2018.org/">ECCV 2018</a> conference there will be a workshop dedicated Open Images Challenge (presented by Vittorio Ferrari, Alina Kuznetsova, Jasper Uijlings, Rodrigo Benenson, Victor Gomes, Matteo Malloci). They will announce challenge results.</p><p><a href="https://storage.googleapis.com/openimages/web/challenge.html">The Challenge</a> has two tracks:</p><ol><li>Object Class Detection: predicting a tight bounding box around all instances of the 500 classes.</li><li>Visual Relationship Detection: detecting pairs of objects in particular relations, e.g. “woman playing guitar”.</li></ol><h3>Dataset</h3><p>There are image-level labels (table 1) and bounding boxes for object detection (table 2). Labels where generated automatically by machine and then checked by humans thanks to <a href="https://crowdsource.google.com/imagelabeler">Crowdsource labeler</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5ladbklv5gMNTe_adGsm8A.png" /><figcaption>Table 1: Image-level labels</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1021/1*tRUK2i2jFXq1qXxuD08Zeg.png" /><figcaption>Table 2: Object Detection track annotations on training set</figcaption></figure><h3>Examples</h3><p>Here are some examples, more you can find here: <a href="https://storage.googleapis.com/openimages/web/visualizer/index.html">Open Images Dataset V4</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/580/0*nfDJCyo-pNaplOby.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*yZ79ABggbyCAtPeU.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1006/0*gtSUmCVA0eeqT7Eo.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Y9gZLzqrA6EBG6BD.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/775/0*8mwBNTT9vvCEpp3X.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/583/0*sC2a_kRVbVYd_p5N.png" /></figure><h3>Dates</h3><ul><li>April 30th 2018: training set for object detection track released (with bounding box annotations).</li><li>May 10 2018: visual relationship detection annotations on the training set will be released.</li><li>May 31 2018: evaluation metric protocols and implementation will be released (as a part of the <a href="https://github.com/tensorflow/models/tree/master/research/object_detection">TF Object Detection API</a>).</li><li>July 1st 2018: a test set of 100k images will be released by Kaggle.</li><li>September 1st 2018: deadline for submission of results.</li><li>September 8th 2018: <a href="https://eccv2018.org/program/workshops_tutorials/">Open Images Challenge Workshop</a></li></ul><h3>Links</h3><ul><li><a href="https://storage.googleapis.com/openimages/web/index.html">Open Images Dataset V4</a></li><li><a href="https://crowdsource.google.com/imagelabeler">Crowdsource labeler</a></li></ul><p>If you like this work show me your support!<br>Follow me on:</p><ul><li><strong>YouTube</strong>: <a href="https://www.youtube.com/karolmajek">https://www.youtube.com/karolmajek</a></li><li><strong>Twitter</strong>: <a href="https://twitter.com/karol_majek">https://twitter.com/karol_majek</a></li><li><strong>Medium</strong>: <a href="https://medium.com/@karol_majek">https://medium.com/@karol_majek</a></li><li><strong>My personal page</strong>: <a href="http://karolmajek.pl/">http://karolmajek.pl/</a></li><li><strong>Deep Drive PL blog</strong>: <a href="https://deepdrive.pl/en/">https://deepdrive.pl/</a></li></ul><p>Originally published on: <a href="https://deepdrive.pl/open-images-dataset-v4-en/">https://deepdrive.pl/open-images-dataset-v4-en/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=237fc006b094" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Object Detection in 4K Dashcam Videos]]></title>
            <link>https://medium.com/@karol_majek/object-detection-in-4k-dashcam-videos-237c30ade356?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/237c30ade356</guid>
            <category><![CDATA[object-detection]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[dataset]]></category>
            <category><![CDATA[tensorflow]]></category>
            <category><![CDATA[yolo]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Mon, 18 Dec 2017 15:31:02 GMT</pubDate>
            <atom:updated>2019-09-04T15:10:48.505Z</atom:updated>
            <content:encoded><![CDATA[<p>4K dashcam videos versus State of The Art object detection deep nets such as YOLO, SSD or Mask RCNN.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FgH5BeOXSw9s%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DgH5BeOXSw9s&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FgH5BeOXSw9s%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/d49bcf040cc92367f979182e89548318/href">https://medium.com/media/d49bcf040cc92367f979182e89548318/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GQqw6hu-M-74SdmAM2Ljzg.png" /><figcaption>Mask RCNN result for video #2</figcaption></figure><p>I want to share my datasets I use for testing deep neural networks. I have already tested on 4k videos:</p><ul><li>Darknet YOLO</li><li>Tensorflow Object Detection API: SSD, Faster RCNN</li><li>Segmentation</li><li>Mask RCNN</li></ul><h3>YOLO</h3><p>I am using original implementation (<a href="https://pjreddie.com/darknet/yolo/">Darknet by Joseph Redmon</a>) with 4 different trained weights files. These weights are:</p><ul><li><strong>Tiny YOLO VOC </strong>[<a href="https://pjreddie.com/media/files/tiny-yolo-voc.weights">https://pjreddie.com/media/files/tiny-yolo-voc.weights</a>]</li><li><strong>YOLO VOC</strong> [<a href="https://pjreddie.com/media/files/yolo-voc.weights">https://pjreddie.com/media/files/yolo-voc.weights</a>]</li><li><strong>YOLO COCO</strong> [<a href="https://pjreddie.com/media/files/yolo.weights">https://pjreddie.com/media/files/yolo.weights</a>]</li><li><strong>YOLO 9000</strong> [<a href="https://pjreddie.com/media/files/yolo9000.weights">https://pjreddie.com/media/files/yolo9000.weights</a>]</li></ul><blockquote>Weights are downloaded from: <a href="https://pjreddie.com/darknet/yolo/">pjreddie.com/darknet/yolo</a><br>Source code: <a href="https://github.com/karolmajek/darknet">https://github.com/karolmajek/darknet</a></blockquote><h3>SSD</h3><p>I was using SSD Keras by Andrey Rykov:</p><p><a href="https://github.com/rykov8/ssd_keras">rykov8/ssd_keras</a></p><p>This was easiest/fastest [for me] to run and get results. But now I switched to Tensorflow Object Detection API. Special thanks to Harrison Kinsley for great tutorial on using TF object detection API. I recommend this for everyone who wants to start training SSD:</p><p><a href="https://pythonprogramming.net/introduction-use-tensorflow-object-detection-api-tutorial/">Python Programming Tutorials</a></p><p>You can find results for models from TF model zoo:</p><ul><li>ssd_mobilenet_v1_coco</li><li>ssd_inception_v2_coco</li><li>faster_rcnn_nas</li><li>[more coming soon]</li></ul><p><a href="https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md">tensorflow/models</a></p><h3>Datasets — DOWNLOAD 4K</h3><p>Need 4k dashcam vids? Download and make awesome things!</p><p>Datasets were recorded with Samsung S7 in 4K resolution.</p><p>Here is one of the videos:</p><p><a href="https://archive.org/details/0002201705192">Deep Drive PL Warsaw 0002 sequence - 4K dataset : Karol Majek : Free Download, Borrow, and Streaming : Internet Archive</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gC0uU00V2SGrxZvn_qh4HA.jpeg" /><figcaption>Dataset #1</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NA0f7Nc10zEEHgBmOe8qSg.jpeg" /><figcaption>Dataset #2</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*H6jpwi9zBIo4kjfymWUy9Q.jpeg" /><figcaption>Dataset #3</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vHfiTO4i0ojrDeC0iBnjpA.jpeg" /><figcaption>Dataset #4</figcaption></figure><h3>Results</h3><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fvideoseries%3Flist%3DPLki8NgAAjqCaH3jaSk-JOgtZpnkMq2orU&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOOT3UIXZztE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FOOT3UIXZztE%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b850dde10fcbc548ad957045e3e6a1d6/href">https://medium.com/media/b850dde10fcbc548ad957045e3e6a1d6/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=237c30ade356" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to use Google Cloud Vision API]]></title>
            <link>https://becominghuman.ai/how-to-use-google-cloud-vision-api-4fbd800641f9?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/4fbd800641f9</guid>
            <category><![CDATA[object-detection]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[api]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Thu, 14 Dec 2017 15:31:00 GMT</pubDate>
            <atom:updated>2017-12-15T14:21:29.277Z</atom:updated>
            <content:encoded><![CDATA[<p>Google offers machine learning REST API for image content understanding.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*73VutAQEbjHfbiy3PWGrrw.gif" /><figcaption>Recognize place, faces, category, web entities, text and more [source image: <a href="https://www.sevendaysvt.com/vermont/vermont-law-school-professor-and-middlebury-scholar-arrested-at-white-house-protest/Content?oid=2176213">https://www.sevendaysvt.com/vermont/vermont-law-school-professor-and-middlebury-scholar-arrested-at-white-house-protest/Content?oid=2176213</a>]</figcaption></figure><p>In this post I would like to show how to easily run image recognition in the cloud with a little help of powerful deep learning models. Several models are accessible using one REST API interface. You can upload your image and get specified insights. You can choose from following:</p><ul><li><strong>Face detection</strong> [33 landmarks, emotional state, wearing headwear, <strong>Facial Recognition is NOT supported</strong>]</li><li><strong>Landmark detection</strong> [detect popular structures, predicts location]</li><li><strong>logo detection</strong> [detect popular product logos]</li><li><strong>label detection</strong> [image category]</li><li><strong>OCR</strong> [Optical Character Recognition, detect text, automatic language identification]</li><li><strong>document text</strong> [text and structure of document]</li><li><strong>safe search</strong> [detect explicit content such as adult or violent content]</li><li><strong>image properties</strong> [dominant colors, crop hints]</li><li><strong>web detection</strong> [relevant information from the Internet]</li></ul><p>API have examples to run in following languages: <strong>C#</strong>, <strong>Go</strong>, <strong>Java</strong>, <strong>Node.js</strong>, <strong>PHP</strong>, <strong>Python</strong> and <strong>Ruby</strong>. There is also example how to use <strong>Curl</strong> to get results from the cloud.</p><p>You will need to register to Google Cloud Platform (you can try for free), install GCP client for your OS, login in using client.</p><p>Code for this post can be found here:</p><p><a href="https://github.com/karolmajek/GCP-Vision-API">karolmajek/GCP-Vision-API</a></p><h3>Face detection</h3><p>Vision API can detect faces and localize features. The online demo is limited to detect up to 50 faces per image, but using API you can limit the maximum number of detections by yourself.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vq0od_Y5Uyaxnc_OaN29Cg.gif" /><figcaption>Google VIsion API Demo [source image: <a href="http://chenlab.ece.cornell.edu/projects/KinshipVerification/">http://chenlab.ece.cornell.edu/projects/KinshipVerification/</a>]</figcaption></figure><h4>Face landmarks</h4><p>Landmark detection can find <strong>33 face landmarks</strong>: eyes (19), nose(4), mouth(5), chin(3), … You can find the list here: <a href="https://cloud.google.com/vision/docs/reference/rest/v1/images/annotate#Type_1">https://cloud.google.com/vision/docs/reference/rest/v1/images/annotate#Type_1</a></p><h4>Curl</h4><p>Here you can access Google tutorial for Curl:</p><p><a href="https://cloud.google.com/vision/docs/using-curl">Using curl to send requests | Google Cloud Vision API Documentation | Google Cloud Platform</a></p><p>Yeah! With curl you can get results in few seconds, let’s go! You will need:</p><ul><li><strong>API Key</strong> — You need access to GCP Console; To create key go to <a href="https://console.cloud.google.com/apis/credentials">https://console.cloud.google.com/apis/credentials</a></li><li><strong>input image — URI</strong> to input image; Google Cloud Storage can be used; link will be stored in request</li><li><strong>request.json </strong>— file which defines input image and the results we want to get</li><li><strong>Curl</strong> — library can help with this task</li></ul><p>This is example <strong>request.json</strong> file which I used in this tutorial [<strong><em>imageUri</em></strong> — stores the link to input image]:</p><pre>{<br>  &quot;requests&quot;: [<br>    {<br>      &quot;image&quot;: {<br>        &quot;source&quot;: {<br>          &quot;imageUri&quot;: &quot;<a href="https://raw.githubusercontent.com/karolmajek/GCP-Vision-API/master/images/kinship.jpg">https://raw.githubusercontent.com/karolmajek/GCP-Vision-API/master/images/kinship.jpg</a>&quot;<br>        }<br>      },<br>      &quot;features&quot;: [<br>        {<br>          &quot;type&quot;: &quot;FACE_DETECTION&quot;,<br>          &quot;maxResults&quot;: 1000<br>        }<br>      ]<br>    }<br>  ]<br>}</pre><p>Now we can use API with Curl [replace <strong><em>API_KEY</em></strong> with key you defined in GCP Console:</p><pre>curl -v -s -H &quot;Content-Type: application/json&quot; \<br>    https://vision.googleapis.com/v1/images:annotate?key=API_KEY \<br>    --data-binary @request.json</pre><p><strong>Et voilà</strong></p><p>The result is send as json string. You should receive response which can look like this one below. You can see the values, it can work with your production software, but you need to see what is really detected!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/452/1*F-v87xH2TNeHT57yAyJ7Yg.png" /><figcaption>Full response here: <a href="https://gist.github.com/karolmajek/92a8e9916c54cf01142cd7cfc032f358">https://gist.github.com/karolmajek/92a8e9916c54cf01142cd7cfc032f358</a> [visualization: <a href="http://jsoneditoronline.org/">http://jsoneditoronline.org/</a>]</figcaption></figure><h4>Ruby — I need to see detections!</h4><p>Getting json string is really good too have, but we need to see the result and check if it looks good or not. So here is the Ruby example which will display the results:</p><p><a href="https://github.com/GoogleCloudPlatform/ruby-docs-samples/blob/master/vision/draw_box_around_faces.rb">GoogleCloudPlatform/ruby-docs-samples</a></p><p>To run this example you will need to:</p><ol><li>Install Ruby on your machine — here you can find tutorial how to do it on different platforms: <a href="https://gorails.com/setup/ubuntu/16.04">https://gorails.com/setup</a></li><li>You will need to install <strong>ImageMagick</strong> and <strong>rmagick</strong>. Type gem install rmagick to install rmagick for ruby.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WNki3qtF20FjRJ_jbIeT5w.jpeg" /><figcaption>GCP Vision API detections with Ruby example</figcaption></figure><h4>Python — easy to integrate!</h4><p>You will need to install Google Cloud for python:</p><pre>pip install — upgrade google-cloud</pre><p>I am using python sample code which I added to my repo. Original code can be found here: <a href="https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/vision/cloud-client/detect">https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/vision/cloud-client/detect</a></p><pre>python detect.py faces-uri <a href="https://raw.githubusercontent.com/karolmajek/GCP-Vision-API/master/images/kinship.jpg">https://raw.githubusercontent.com/karolmajek/GCP-Vision-API/master/images/kinship.jpg</a></pre><p><strong>This code limits the maximum number of detection to default value of 10.</strong> The output should look similarly to this:</p><pre>Faces:<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (939,209),(996,209),(996,276),(939,276)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (401,844),(458,844),(458,910),(401,910)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (666,60),(823,60),(823,243),(666,243)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (501,582),(555,582),(555,644),(501,644)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (1349,281),(1406,281),(1406,347),(1349,347)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (1450,581),(1499,581),(1499,644),(1450,644)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (1350,843),(1407,843),(1407,910),(1350,910)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (1033,338),(1096,338),(1096,411),(1033,411)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (434,839),(498,839),(498,912),(434,912)<br>anger: VERY_UNLIKELY<br>joy: VERY_LIKELY<br>surprise: VERY_UNLIKELY<br>face bounds: (1033,901),(1096,901),(1096,974),(1033,974)</pre><p><strong>Visualization with Python</strong></p><p>In this example the parameter max-results is available but it is not used, so there is hard limit for 10 results in this example. I reported this issue to GCP.</p><pre>python faces.py --out out.jpg --max-results 1000 images/kinship.jpg</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Er6zRlpWNN-gbpjZhcUo4Q.jpeg" /><figcaption>The result obtained with python example — number of faces is limited to 1000. Strange… Yeah the parameter is ignored and we can see only 10 faces (default maximum)</figcaption></figure><h3>OCR, documents</h3><p>Cloud Vision is able to detect text and the structure of documents as shown below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lsfsZOaPnTb4OePIbbpnZA.png" /><figcaption>Reading books [source image: <a href="https://mathematica.stackexchange.com/questions/80742/removing-gutter-shadows-from-scanned-pages">https://mathematica.stackexchange.com/questions/80742/removing-gutter-shadows-from-scanned-pages</a>]</figcaption></figure><h3>Links</h3><ul><li><strong>CLOUD VISION API</strong> <a href="https://cloud.google.com/vision/">https://cloud.google.com/vision/</a></li><li><strong>How to Use the Google Cloud Vision API in Android Apps </strong><a href="https://code.tutsplus.com/tutorials/how-to-use-the-google-cloud-vision-api-in-android-apps--cms-29009">https://code.tutsplus.com/tutorials/how-to-use-the-google-cloud-vision-api-in-android-apps--cms-29009</a></li></ul><p>If you like this work show me your support!<br>Follow me on:</p><ul><li><strong>YouTube</strong>: <a href="https://www.youtube.com/karolmajek">https://www.youtube.com/karolmajek</a></li><li><strong>Twitter</strong>: <a href="https://twitter.com/karol_majek">https://twitter.com/karol_majek</a></li><li><strong>Medium</strong>: <a href="https://medium.com/@karol_majek">https://medium.com/@karol_majek</a></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F8f5f8b%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F8f5f8b&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/c43026df6fee7cdb1aab8aaf916125ea/href">https://medium.com/media/c43026df6fee7cdb1aab8aaf916125ea/href</a></iframe><figure><a href="https://becominghuman.ai/artificial-intelligence-communities-c305f28e674c"><img alt="" src="https://cdn-images-1.medium.com/max/255/1*2f7OqE2AJK1KSrhkmD9ZMw.png" /></a></figure><figure><a href="https://upscri.be/8f5f8b"><img alt="" src="https://cdn-images-1.medium.com/max/255/1*v-PpfkSWHbvlWWamSVHHWg.png" /></a></figure><figure><a href="https://becominghuman.ai/write-for-us-48270209de63"><img alt="" src="https://cdn-images-1.medium.com/max/255/1*Wt2auqISiEAOZxJ-I7brDQ.png" /></a></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4fbd800641f9" width="1" height="1" alt=""><hr><p><a href="https://becominghuman.ai/how-to-use-google-cloud-vision-api-4fbd800641f9">How to use Google Cloud Vision API</a> was originally published in <a href="https://becominghuman.ai/">Becoming Human: Artificial Intelligence Magazine</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[MooseFS: Multinode cluster using docker]]></title>
            <link>https://medium.com/@karol_majek/moosefs-multinode-cluster-using-docker-512d0619360a?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/512d0619360a</guid>
            <category><![CDATA[storage-solutions]]></category>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[distributed-file-systems]]></category>
            <category><![CDATA[big-data]]></category>
            <category><![CDATA[storage]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Mon, 11 Dec 2017 15:31:01 GMT</pubDate>
            <atom:updated>2017-12-11T15:31:01.296Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Distributed file system demo using docker containers.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sJxyvLTa_U6eDM6WnXBeJw.png" /><figcaption>MooseFS CGI</figcaption></figure><h3>What is MooseFS?</h3><p>MooseFS is a distributed file system. It spreads data over several physical commodity servers, which are visible to the user as one resource. For standard file operations MooseFS acts like any other Unix-like file system:</p><ul><li>A hierarchical structure (<strong>directory tree</strong>)</li><li>Stores <strong>POSIX</strong> file attributes (permissions, last access and modification times)</li><li>Supports <strong>special files</strong> (block and character devices, pipes and sockets)</li><li><strong>Symbolic links</strong> (file names pointing to target files, not necessarily on MooseFS) and <strong>hard links</strong> (different names of files which refer to the same data on MooseFS)</li></ul><h4>Distinctive features of MooseFS</h4><ul><li><strong>High availability</strong> (i.e. redundant metadata servers)</li><li><strong>High reliability</strong> (several copies of the data can be stored on separate computers)</li><li>Capacity is <strong>dynamically expandable</strong> by simply adding new computers/disks</li><li>Deleted files are retained for a configurable period of time (a file system level “<strong>trash bin</strong>”)</li><li><strong>Coherent snapshots</strong> of files, even while the file is being written/accessed</li><li><strong>Erasure coding</strong> support, for corrupted data recovery</li></ul><h3>Why use distributed file system to store data?</h3><p>Exabytes of data are created every day. We have more and more tools to process those data, we are using deep neural networks for data analytics which requires reliable, large, highly available storage. Deep learning or machine learning in general is only a small part of the Big Data Landscape. The main reason to use distributed storage is requirement of high reliability and this goal can be achieved by using multiple machines. Another reason is high availability which is achieved by storing several copies of files. It is also easier to achieve higher capacities using many machines.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yJ9kg44GdSt-LMC7jp1V5w.png" /></figure><h3>MooseFS Docker Cluster</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/286/1*jb-61JwWieNudwGevbJ1vQ.png" /><figcaption><a href="https://www.docker.com/">https://www.docker.com</a></figcaption></figure><p>In this tutorial we will use images from <a href="https://hub.docker.com/u/moosefs/">MooseFS Docker Hub</a> to run cluster with 5 chunkservers, master and client machine. There is also another configuration available on <a href="https://github.com/moosefs/moosefs-docker-cluster">GitHub repository</a> — one master and 5 chunkserver/client machines. After a successful installation you will have a fully working MooseFS cluster!</p><h3>Requirements</h3><ul><li>Host machine with 64-bit operating system (Windows / Linux / Mac) compatible with <a href="https://docs.docker.com/engine/installation/linux/docker-ce/binaries/">Docker</a></li><li>Git</li></ul><h4>Docker and Docker Compose installation</h4><p>To install Docker with Docker compose on your Ubuntu machine please use:</p><ul><li><a href="https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-16-04">DigitalOcean tutorial (Ubuntu 16.04)</a></li><li><a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-14-04">DigitalOcean tutorial (Ubuntu 14.04)</a></li><li><a href="https://docs.docker.com/docker-for-windows/">Windows</a></li><li><a href="https://docs.docker.com/docker-for-mac/">Mac</a></li></ul><h3>Setup</h3><p>If you already installed Docker and Docker Compose on your host machine you can download repository with code for running the cluster:</p><pre>git clone <a href="https://github.com/moosefs/moosefs-docker-cluster">https://github.com/moosefs/moosefs-docker-cluster</a></pre><pre>cd moosefs-docker-cluster</pre><h4>Start cluster</h4><p>Build default cluster and run in the background:</p><pre>docker-compose build<br>docker-compose up -d</pre><h4>Cluster is running!</h4><p>Let us check if instances are running with:</p><pre>docker ps</pre><p>You should have 1 master, 5 chunkservers and 1 client running. Expected output should be similar to:</p><pre>CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS              PORTS                     NAMES<br>2fe620447b37        dockermoosefscluster_client         &quot;/home/start-clien...&quot;   5 minutes ago       Up 5 minutes                                  client<br>1951d867c078        dockermoosefscluster_chunkserver5   &quot;/home/start-chunk...&quot;   5 minutes ago       Up 5 minutes        9419-9420/tcp, 9422/tcp   chunkserver5<br>204c115cd8ad        dockermoosefscluster_chunkserver2   &quot;/home/start-chunk...&quot;   5 minutes ago       Up 5 minutes        9419-9420/tcp, 9422/tcp   chunkserver2<br>48343721de4f        dockermoosefscluster_chunkserver4   &quot;/home/start-chunk...&quot;   5 minutes ago       Up 5 minutes        9419-9420/tcp, 9422/tcp   chunkserver4<br>30ca217fa862        dockermoosefscluster_master         &quot;/home/start.sh -d&quot;      5 minutes ago       Up 5 minutes        9420-9425/tcp             master<br>28e2a64d0fb9        dockermoosefscluster_chunkserver1   &quot;/home/start-chunk...&quot;   5 minutes ago       Up 5 minutes        9419-9420/tcp, 9422/tcp   chunkserver1<br>c83c70580795        dockermoosefscluster_chunkserver3   &quot;/home/start-chunk...&quot;   5 minutes ago       Up 5 minutes        9419-9420/tcp, 9422/tcp   chunkserver3</pre><p>You can attach to the client node (press “Enter” twice):</p><pre>docker container attach mfsclient  #press the &quot;Enter&quot; key twice</pre><blockquote>To detach from container use the escape sequence Ctrl + p, Ctrl + q.<br>Don’t use <em>Ctrl + d</em> or <em>exit</em> command because it will kill container.</blockquote><p>Now MooseFS filesystem is mounted as /mnt/mfs. If everything is ok you should see our welcome message with:</p><pre>cd /mnt/mfs</pre><pre>cat welcome_to_moosefs.txt</pre><h4>CGI Monitor</h4><p>The CGI Monitor is available here:</p><blockquote><a href="http://172.20.0.2:9425/">http://172.20.0.2:9425</a></blockquote><p>Just open the link in your favorite browser and you should see status page similar to this one:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sJxyvLTa_U6eDM6WnXBeJw.png" /></figure><p>To stop all (all means ALL, not just MooseFS’s) your Docker containers:</p><pre>docker stop $(docker ps -aq)</pre><p>Your MooseFS Docker cluster is persistent. It means all files you created in the /mnt/mfs folder will remain unchanged even after restarting containers. However if you remove containers you will lose all your data.</p><h4>Cluster configurations</h4><p><strong>Default</strong> configuration (file <em>docker-compose.yml</em>):</p><ul><li><strong>master</strong> with management GUI <a href="http://172.20.0.2:9425/">http://172.20.0.2:9425</a></li><li><strong>chunkserver1</strong> <em>172.20.0.11</em> with 10 GiB of storage</li><li><strong>chunkserver2</strong> <em>172.20.0.12</em> with 10 GiB of storage</li><li><strong>chunkserver3</strong> <em>172.20.0.13</em> with 10 GiB of storage</li><li><strong>chunkserver4</strong> <em>172.20.0.14</em> with 10 GiB of storage</li><li><strong>chunkserver5</strong> <em>172.20.0.15</em> with 10 GiB of storage</li><li><strong>client</strong> <em>172.168.20.0.5</em></li></ul><p>File <em>docker-compose-chunkserver-client.yml</em></p><ul><li><strong>master</strong> with CGI <a href="http://172.20.0.2:9425/">http://172.20.0.2:9425</a></li><li><strong>chunkserver1</strong> <em>172.20.0.11</em> with 10 GiB of storage and <strong>client</strong> (mount point: /mnt/mfs)</li><li><strong>chunkserver2</strong> <em>172.20.0.12</em> with 10 GiB of storage and <strong>client</strong> (mount point: /mnt/mfs)</li><li><strong>chunkserver3</strong> <em>172.20.0.13</em> with 10 GiB of storage and <strong>client</strong> (mount point: /mnt/mfs)</li><li><strong>chunkserver4</strong> <em>172.20.0.14</em> with 10 GiB of storage and <strong>client</strong> (mount point: /mnt/mfs)</li><li><strong>chunkserver5</strong> <em>172.20.0.15</em> with 10 GiB of storage and <strong>client</strong> (mount point: /mnt/mfs)</li></ul><p>If you want to change storage size modify the chunkserver start script <a href="https://github.com/moosefs/moosefs-docker-cluster/blob/master/moosefs-chunkserver/start-chunkserver.sh">moosefs-chunkserver/start-chunkserver.sh</a></p><p>Default configuration is stored in <a href="https://github.com/moosefs/moosefs-docker-cluster/blob/master/docker-compose.yml">docker-compose.yml</a></p><h4>Other configurations</h4><p>If you want to use other than default compose yml file (docker-compose.yml) use following commands:</p><pre>docker-compose -f docker-compose-chunkserver-client.yml build<br>docker-compose -f docker-compose-chunkserver-client.yml up -d</pre><p>When using docker-compose-chunkserver-client.yml you will have 5 chunkserver/client machines so you can attach to all of them <em>mfschunkserverclient1</em>, ..., <em>mfschunkserverclient5</em>.</p><h3>Conclusion</h3><p>We have successfully started MooseFS cluster with master, 5 chunkservers and client. We are able to really quick make simple tests using one physical machine. In next posts I will try to show you how to deploy MooseFS on multiple physical machines using docker.</p><h3>Helpful links</h3><ul><li><strong>MooseFS</strong> <a href="https://moosefs.com/index.html">https://moosefs.com</a></li><li><strong>MooseFS on GitHub</strong> <a href="https://github.com/moosefs/moosefs">https://github.com/moosefs/moosefs</a></li><li><strong>Docker</strong> <a href="https://www.docker.com/">https://docker.com/</a></li><li><strong>Docker Hub </strong><a href="https://hub.docker.com/">https://hub.docker.com/</a></li></ul><p>If you like this work show me your support!<br>Follow me on:</p><ul><li><strong>YouTube</strong>: <a href="https://www.youtube.com/karolmajek">https://www.youtube.com/karolmajek</a></li><li><strong>Twitter</strong>: <a href="https://twitter.com/karol_majek">https://twitter.com/karol_majek</a></li><li><strong>Medium</strong>: <a href="https://medium.com/@karol_majek">https://medium.com/@karol_majek</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=512d0619360a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ERL Emergency 2017 — Deep Learning to the rescue]]></title>
            <link>https://medium.com/@karol_majek/erl-emergency-2017-deep-learning-to-the-rescue-8da3d8dca61f?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/8da3d8dca61f</guid>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[robotics]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[emergency]]></category>
            <category><![CDATA[object-detection]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Wed, 11 Oct 2017 06:23:36 GMT</pubDate>
            <atom:updated>2018-03-12T20:16:54.136Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DeqwRTw_Nh73W5FprjFzNA.png" /><figcaption>IMM’s Husky platform with Mandala 3D Mapping Unit</figcaption></figure><p>Team IMM approach to European Robotics League Emergency 2017</p><p>European Robotics League is funded by the European Union’s Horizon 2020 Program. It is continuation of three earlier projects:</p><ul><li>RoCKIn@Home (now: ERL Service Robots) tournament focuses on the domain of service robotics for home application.</li><li>RoCKIn@Work (now: ERL Industrial Robots) tournament focuses on the domain of industrial robotics in the Factory of the Future and also deals with modern automation issues.</li><li>euRathlon (now: ERL Emergency Robots) is a civilian, outdoor robotics competition, with a focus on realistic, multi-domain emergency response scenarios.</li></ul><p>ERL Emergency 2017 is a continuation of Eurathlon 2015 robotic competition. This year 8 teams with robot from three domains cooperated to fulfill the objectives in scenarios.</p><blockquote>Starting in this competition we assumed we will present automatic 3D mapping system, autonomous navigation and artificial intelligence for object detection.</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.google.com%2Fmaps%2Fembed%2Fv1%2Fplace%3Fmaptype%3Dsatellite%26center%3D42.9541876%252C10.6016853%26key%3DAIzaSyBctFF2JCjitURssT91Am-_ZWMzRaYBm4Q%26zoom%3D16%26q%3DTor%2Bdel%2Bsale&amp;url=https%3A%2F%2Fwww.google.com%2Fmaps%2Fplace%2FTor%2Bdel%2Bsale%2F%4042.9541876%2C10.6016853%2C515m%2Fdata%3D%213m1%211e3%214m5%213m4%211s0x0%3A0x36ef77e414b6665b%218m2%213d42.9542229%214d10.5999371%3Fhl%3Den-US%26dg%3Ddbrw%26newdg%3D1&amp;image=http%3A%2F%2Fmaps-api-ssl.google.com%2Fmaps%2Fapi%2Fstaticmap%3Fcenter%3D42.9541876%2C10.6016853%26zoom%3D15%26size%3D250x250%26sensor%3Dfalse&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=google" width="600" height="450" frameborder="0" scrolling="no"><a href="https://medium.com/media/b1b76e15197c70da30e7f0dfb91135d2/href">https://medium.com/media/b1b76e15197c70da30e7f0dfb91135d2/href</a></iframe><p><a href="https://eu-robotics.net/robotics_league/erl-emergency/about/index.html">About</a></p><h3>Team IMM — Robdos — IIS Piombino CVP</h3><p>There were 8 three domain teams created for the competition. Our team was</p><p>Team 4</p><ul><li>IMM, Poland (Land)</li><li>Robdos, Spain (Sea)</li><li>IIS Piombino CVP, Italy (Air)</li></ul><p><strong>Institute of Mathematical Machines (IMM)</strong> is a research and development institute. IMM participates in robotic competitions since 2013. IMM was established in 1957 (the word „computer” did not exist in the Polish language at that time, therefore the old expression „mathematical machines” is still used in its name).</p><p><strong>Robdos Team</strong>, an underwater robotics association, came up in 2014 from our concern as a group of students specialized in different fields about putting into practice all the skills and knowledge gathered during university period. Marine, Industrial and Computer Engineering students from the Technical University of Madrid (Universidad Politécnica de Madrid), work hard on the development of an autonomous underwater platform.</p><p><strong>IIS Piombino CVP</strong> is team from Technical Institute — local high school in Piombino</p><h3>Scenarios</h3><p>In all scenarios robots start in the same time and have the same amount of time finish all the tasks. During the mission robot operators should communicate with each other and exchange information. Ideally there should be also robot-robot communication.</p><h4>Land + Sea</h4><p>The goal of the scenario was to find the leaking pipe on the land by the ground robot, recognize the number on that pipe and go to the machine room. There was only one unobstructed entrance marked by green marker. The entrance and the machine room should be both identified automatically. In the machine room robot should identify and close the correct valve autonomously.</p><p>In the same time the underwater robot should start its mission and find the gate — a pair of acoustic and optical buoys. Robot should provide images of the gate and pass through it without touching it. The next task is to detect the plume buoys in real time, recognize numbers and provide images. Underwater robot should also identify the leak and exchange this information with the ground robot.</p><p>Both, ground and underwater, robots should provide maps of land pipes area, indoor map and 3D reconstruction of manipulation console respectively. In the end both (correct!) valves, underwater and in the building, should be closed simultaneously.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fvideoseries%3Flist%3DPLki8NgAAjqCYZLGB7DjS_DmLAcCr0ZLJh&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_FsDk8jkH98&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F_FsDk8jkH98%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/3874cab2591d5640e802500a8bfda185/href">https://medium.com/media/3874cab2591d5640e802500a8bfda185/href</a></iframe><h4>Sea + Air</h4><p>In this scenario underwater robot should identify and pass through the gate like in the first scenario. Additionally robot should provide 2D acoustic or optical map of the debris. Robot localizes the missing worker underwater within a radius of 5 meters, then gives the dimensions and geometrical shape of the closest object to the worker. It should also provide 3D reconstruction of the worker and surface within a radius of 2 meters from the worker position.</p><p>The aerial robot starts its mission in the land area going through waypoints looking for a missing worker. Robot should detect leaking pipe, identify damages, build a map and find the missing worker. After identifying exact position of the worker drone deploys the first-aid kit within radius 2 m from the worker outside the building.</p><p>Robots start in the same time and are reporting underwater missing worker and land leaking pipe. Aerial robot should fly and take pictures of the place where worker is and underwater robot receives and decodes the message with the correct land leaking pipe sent by the aerial robot.</p><h4>Land + Air</h4><p>In the third scenario land robot is looking for OPIs and two missing workers one inside and the other outside the building. The ground robot should deliver the first-aid kit, dropped by the drone, to missing worker inside of the building.</p><p>The drone builds a map, finds the worker, and drop the first-aid kit. After that it drops another kit near the ground robot.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fvideoseries%3Flist%3DPLki8NgAAjqCYZLGB7DjS_DmLAcCr0ZLJh&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DGExSKALwr1k&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FGExSKALwr1k%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/441988a817386ce5b7fdfe8658b13ba4/href">https://medium.com/media/441988a817386ce5b7fdfe8658b13ba4/href</a></iframe><h4>Grand Challenge: Land + Sea + Air</h4><p>In the Grand Challenge all domains are doing the task simultaneously. It combines all previous tasks in a one large search and rescue mission. Operators of robots from all three domains are cooperating to achieve the goal.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fvideoseries%3Flist%3DPLki8NgAAjqCYZLGB7DjS_DmLAcCr0ZLJh&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DwFMnp0mqFH0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FwFMnp0mqFH0%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/0c60981aeec42d47aaed71a328daa84b/href">https://medium.com/media/0c60981aeec42d47aaed71a328daa84b/href</a></iframe><h3>3D Mapping</h3><p>Our ground robot participated Enrich 2017, the robotic hackathon in Nuclear Power Plant in Austria in June 2017. Robot provided the 3D map of the reactor room online, without any data copy outside the internal robot computer. The resulting 3d is shown below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sVP5-bKPbwPRuK1ss9_MAg.png" /><figcaption>The result of 3D mapping in NPP during Enrich 2017. Interactive demo: <a href="http://mandalarobotics.com/enrich2017/inside-power-plant.html">http://mandalarobotics.com/enrich2017/inside-power-plant.html</a></figcaption></figure><p>And here are presented 3D maps from ERL Emergency 2017:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/913/1*FLWQPQbpPC8XldKKORatrg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/873/1*PNjs41AxAzmGl9P2sC8S7g.png" /><figcaption>3D pointcloud acquired by ground robot online: 3d view, top view</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RwB3H8vFxK8wTLuk83vRkg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A-5Fpen5-4D-HQhhoEoJ_w.png" /><figcaption>Navigation through the doors and model of the machine room</figcaption></figure><h3>Object detection</h3><p>Objects of Potential Interest (OPIs) are described in Rule Book for ERL Emergency 2017. Here are presented OPIs that our deep net was trained to detect. Below you can see sample images:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/393/1*YAdTdA8Oh2XpjUxhyWhPqg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/219/1*SzDcO8LXwEZxiQbj8Ix0bw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/177/1*BarnKd7CwqJScIKGxkP0ng.png" /><figcaption>Pipes, leak on a pipe and missing worker</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/245/1*n7jiI12UiCpqJB0USGMlNw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/307/1*yqAD9fJiaw4FXgvKiKW_YQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/302/1*fq47df88CZq7p57oFHMc7Q.png" /><figcaption>Damage on building or pipe, blocked entrance and unobstructed entrance</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/162/1*c5j1kpvtoU8aZaCUHLbwmw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/262/1*ti2uruw-hH1uO2xAbgHjWA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/277/1*CkklE8s5ewgfcJujoQN1Ag.png" /><figcaption>Machine room symbol, valves and ERICard which identifies valves</figcaption></figure><p>We used videos from Eurathlon 2015 to prepare annotated dataset. We generated 256 images with 7 classes:</p><ul><li><em>unblocked </em>(unblocked entrance; green marker)</li><li><em>blocked </em>(blocked entrance; blue marker)</li><li><em>pipes</em></li><li><em>worker </em>(missing worker)</li><li><em>ericard</em></li><li><em>damage </em>(red marker)</li><li><em>valve</em></li></ul><p>250 images is very small dataset to train even a pretrained network, so we decided to augment training samples using random translate, brightness and mirroring. We increased image count to 12750 images. Original images were captured by few different cameras (normal and spherical).</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fvideoseries%3Flist%3DPLki8NgAAjqCYZLGB7DjS_DmLAcCr0ZLJh&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D9BDLXipxzT4&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F9BDLXipxzT4%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/4c4203f1f1701531d5c8dc8798a355a8/href">https://medium.com/media/4c4203f1f1701531d5c8dc8798a355a8/href</a></iframe><p>To achieve online detection, which was crucial during the trials, we used Single Shot Multibox Detector (<strong>SSD</strong>) with <strong>MobileNet</strong>. We started training process from model trained on the COCO dataset. To train the deep net we used Tensorflow Object Detection API available on GitHub:</p><p><a href="https://github.com/tensorflow/models/tree/master/research/object_detection">models/research/object_detection at master · tensorflow/models</a></p><p>And finally let’s see the AI in action! But wait, no one said we will want to use Pointgrey’s Ladybug 5 spherical camera for detection! To address the issue we are using 5 distorted images for detection separately. Yes, we do not expect anything above the robot!. Yes it is 5 times slower than detection from one camera, but since we have GPU, we can still process everything online!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UghG-ieTFSL6qicfURIV8Q.jpeg" /><figcaption>Correctly identified blocked entrance</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lB5kLG7BdpfVsqJPs_Eb0A.jpeg" /><figcaption>Automatically detected pipes</figcaption></figure><p>And the video from the Grand Challenge:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FH3gpsIMcfik%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DH3gpsIMcfik&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FH3gpsIMcfik%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/277fec89e92e6a31fcc5caaf6c73ed44/href">https://medium.com/media/277fec89e92e6a31fcc5caaf6c73ed44/href</a></iframe><h3>Awards</h3><p>We received three awards:</p><ul><li><strong>2nd Prize in Grand Challenge</strong>: IIS Piombino CVP, Italy (air) + Robdos, Spain (sea) + IMM, Poland (land)</li><li><strong>1st Prize in Land and Air</strong>: IMM, Poland (land) + IIS Piombino CVP, Italy (air)</li><li><strong>Best Autonomy Award</strong>: IMM, Poland (land) for the best autonomy of land robots (autonomous navigation and automatic object detection).</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aMn82TicmO3qxPGc8semig.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-smmCJf0HsjKQJefLnK9og.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-Rghx-hp27uFiQm7_a9w4w.jpeg" /><figcaption>Certificates</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7ZKeciR76aE42NwR6ehodQ.jpeg" /><figcaption>Our team IMM, Robdos and IIS Piombino CVP</figcaption></figure><p><strong>Watch our video from the competition!</strong></p><iframe src="https://cdn.embedly.com/widgets/media.html?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_Q5S5r65vhY&amp;src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F_Q5S5r65vhY&amp;type=text%2Fhtml&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/0c5e6f48a483ec6a61419eb0a4f07a04/href">https://medium.com/media/0c5e6f48a483ec6a61419eb0a4f07a04/href</a></iframe><h3>Links</h3><ul><li><strong>ERL Emergency 2017 </strong><a href="https://eu-robotics.net/robotics_league/erl-emergency/about/index.html">https://eu-robotics.net/robotics_league/erl-emergency/about/index.html</a></li><li><strong>Referees’ special awards</strong> <a href="https://www.shadowrobot.com/blog/award-winners-of-erl-emergency-robots-2017-announced/">https://www.shadowrobot.com/blog/award-winners-of-erl-emergency-robots-2017-announced/</a></li><li><strong>Award winners of ERL Emergency Robots 2017 announcement </strong><a href="https://www.eu-robotics.net/robotics_league/news/press/award-winners-of-erl-emergency-robots-2017.html">https://www.eu-robotics.net/robotics_league/news/press/award-winners-of-erl-emergency-robots-2017.html</a></li><li><strong>Rule Book for ERL Emergency 2017</strong> <a href="https://www.eu-robotics.net/robotics_league/upload/documents-2017/ERL_ER_Rule_book_v1_4.pdf">https://www.eu-robotics.net/robotics_league/upload/documents-2017/ERL_ER_Rule_book_v1_4.pdf</a></li><li><strong>Eurathlon Competition </strong><a href="http://www.eurathlon.eu/">http://www.eurathlon.eu/</a></li></ul><h4>Heise.de:</h4><ul><li><strong>ERL Emergency: Kooperierende Roboter üben Katastropheneinsatz im AKW</strong><br><a href="https://www.heise.de/newsticker/meldung/ERL-Emergency-Kooperierende-Roboter-ueben-Katastropheneinsatz-im-AKW-3834473.html">https://www.heise.de/newsticker/meldung/ERL-Emergency-Kooperierende-Roboter-ueben-Katastropheneinsatz-im-AKW-3834473.html</a></li><li><strong>Notfall-Robotik: Flug- und Tauchroboter suchen nach Vermissten — und finden sie auch manchmal </strong><a href="https://www.heise.de/newsticker/meldung/Notfall-Robotik-Flug-und-Tauchroboter-suchen-nach-Vermissten-und-finden-sie-auch-manchmal-3837978.html">https://www.heise.de/newsticker/meldung/Notfall-Robotik-Flug-und-Tauchroboter-suchen-nach-Vermissten-und-finden-sie-auch-manchmal-3837978.html</a></li><li><strong>Notfall-Robotik: Polnische Roboterteams beeindrucken mit Improvisationstalent</strong> <a href="https://www.heise.de/newsticker/meldung/Notfall-Robotik-Polnische-Roboterteams-beeindrucken-mit-Improvisationstalent-3839434.html">https://www.heise.de/newsticker/meldung/Notfall-Robotik-Polnische-Roboterteams-beeindrucken-mit-Improvisationstalent-3839434.html</a></li><li><strong>Notfall-Robotik: Punktgenauer Abwurf eines medizinischen Hilfspakets und andere Erfolge<br></strong><a href="https://www.heise.de/newsticker/meldung/Notfall-Robotik-Punktgenauer-Abwurf-eines-medizinischen-Hilfspakets-und-andere-Erfolge-3836770.html">https://www.heise.de/newsticker/meldung/Notfall-Robotik-Punktgenauer-Abwurf-eines-medizinischen-Hilfspakets-und-andere-Erfolge-3836770.html</a></li><li><strong>Roboter im Notfalleinsatz: Roboter stolpern durch den Sand<br></strong><a href="https://www.heise.de/newsticker/meldung/Roboter-im-Notfalleinsatz-Roboter-stolpern-durch-den-Sand-3835059.html">https://www.heise.de/newsticker/meldung/Roboter-im-Notfalleinsatz-Roboter-stolpern-durch-den-Sand-3835059.html</a></li><li><strong>Notfall-Robotik: Bodenroboter bewähren sich an den Ventilen </strong><a href="https://www.heise.de/newsticker/meldung/Notfall-Robotik-Bodenroboter-bewaehren-sich-an-den-Ventilen-3835940.html">https://www.heise.de/newsticker/meldung/Notfall-Robotik-Bodenroboter-bewaehren-sich-an-den-Ventilen-3835940.html</a></li><li><strong>Roboter im Katastropheneinsatz: Rettung zu Wasser, zu Lande und in der Luft<br></strong><a href="https://www.heise.de/newsticker/meldung/Roboter-im-Katastropheneinsatz-Rettung-zu-Wasser-zu-Lande-und-in-der-Luft-3839278.html">https://www.heise.de/newsticker/meldung/Roboter-im-Katastropheneinsatz-Rettung-zu-Wasser-zu-Lande-und-in-der-Luft-3839278.html</a></li></ul><h4>Team member links:</h4><ul><li><strong>IMM </strong><a href="http://imm.org.pl/en/research-and-development/modelling-and-simulation/mobilemappingsystem/">http://imm.org.pl/en/research-and-development/modelling-and-simulation/mobilemappingsystem/</a></li><li><strong>Robdos Team </strong><a href="http://www.robdosteam.com/en/competicion/">http://www.robdosteam.com/en/competicion/</a></li><li><strong>IIS Piombino CVP </strong><a href="https://www.poloisiscvp.gov.it/">https://www.poloisiscvp.gov.it/</a></li></ul><p>If you like this work show me your support!<br>Follow me on:</p><ul><li>YouTube: <a href="https://www.youtube.com/karolmajek">https://www.youtube.com/karolmajek</a></li><li>Twitter: <a href="https://twitter.com/karol_majek">https://twitter.com/karol_majek</a></li><li>Medium: <a href="https://medium.com/@karol_majek">https://medium.com/@karol_majek</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8da3d8dca61f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Self-Driving Car: Road segmentation]]></title>
            <link>https://medium.com/@karol_majek/self-driving-car-road-segmentation-514ae80e103a?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/514ae80e103a</guid>
            <category><![CDATA[udacity]]></category>
            <category><![CDATA[self-driving-cars]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Sat, 09 Sep 2017 13:17:28 GMT</pubDate>
            <atom:updated>2017-09-09T13:17:28.648Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h85VhNSWDLfvM4gC3ahZiw.jpeg" /></figure><p>Semantic segmentation is one of projects in 3rd term of Udacity’s Self-Driving Car Nanodegree program. The goal is to train deep neural network to identify road pixels using part of the KITTI dataset.</p><p>This solution uses VGG16 with 3 skip layers. The size of the input image is 576 x 160. Results for 4k video are generated by resizing prediction to 4k. The results are not perfect because of two factors:</p><ul><li>really small training dataset &lt;400 images</li><li>training shorter than &lt;120k samples (with 16 samples per batch)</li></ul><h3>Data augmentation</h3><p>For this result I was using only these 3 technics:</p><ul><li>flipping every image</li><li>translating +/- 100 in x axis and +/- 30 in y axis</li><li>brightness +/- 150 (in 0–255 range)</li></ul><p>As future work I consider:</p><ul><li>adding noise</li><li>adding random shadows</li><li>changing contrast</li><li>changing white balance</li><li>adding objects (cars, …)</li></ul><p>Example batch:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R9C3mf9RjNXAp5Sz-oWeZQ.jpeg" /><figcaption>Example batch with data augmentation</figcaption></figure><h3>Source code on Github</h3><p>Here is the link to source code of my solution.</p><p><a href="https://github.com/karolmajek/CarND-Semantic-Segmentation">karolmajek/CarND-Semantic-Segmentation</a></p><p>Result on 4k video from my 4k dashcam dataset:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F35DnxJl0aqA%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D35DnxJl0aqA&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F35DnxJl0aqA%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b93d83e69d1c98e1ae5ea4955c03218a/href">https://medium.com/media/b93d83e69d1c98e1ae5ea4955c03218a/href</a></iframe><h3>More datasets</h3><p>There are many datasets available, here is a good list:</p><p><a href="http://riemenschneider.hayko.at/vision/dataset/index.php?filter=+semantic">Yet Another Computer Vision Index To Datasets (YACVID)</a></p><h4>KITTI dataset</h4><p>Most popular one; used in this work.</p><p><a href="http://www.cvlibs.net/datasets/kitti/">The KITTI Vision Benchmark Suite</a></p><h4>Cityscapes dataset</h4><p><a href="https://www.cityscapes-dataset.com/">Cityscapes Dataset - Semantic Understanding of Urban Street Scenes</a></p><h4>Mapillary Vistas</h4><ul><li>25,000 Images</li><li>100 Categories</li><li>60 Instance-wise Categories</li><li>6 Continents</li><li>Variety of Weather, Season, Time of Day, Camera, and Viewpoint</li></ul><p><a href="https://www.mapillary.com/dataset/vistas">Mapillary - Street-level imagery, powered by collaboration and computer vision</a></p><h4>ADE20K Dataset</h4><p><a href="http://groups.csail.mit.edu/vision/datasets/ADE20K/">ADE20K dataset</a></p><h4>PASCAL Context Dataset</h4><p><a href="http://www.cs.stanford.edu/~roozbeh/pascal-context/">PASCAL-Context Dataset</a></p><h4>COCO-Stuff 10K dataset v1.1</h4><p><a href="https://github.com/nightrome/cocostuff">nightrome/cocostuff</a></p><h4>2D-3D-S dataset</h4><p><a href="http://buildingparser.stanford.edu/dataset.html">Large Scale Parsing</a></p><p>I am currently working with Mapillary Vistas Dataset so if you want to see some results follow me on medium or subscribe to my youtube channel.</p><p><a href="https://www.youtube.com/karolmajek">Karol Majek</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=514ae80e103a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[High Resolution Face2Face with Pix2Pix 1024x1024]]></title>
            <link>https://medium.com/@karol_majek/high-resolution-face2face-with-pix2pix-1024x1024-37b90c1ca7e8?source=rss-9d443df5713e------2</link>
            <guid isPermaLink="false">https://medium.com/p/37b90c1ca7e8</guid>
            <category><![CDATA[pix2pix]]></category>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[youtuber]]></category>
            <category><![CDATA[face-generation]]></category>
            <dc:creator><![CDATA[Karol Majek]]></dc:creator>
            <pubDate>Fri, 18 Aug 2017 07:34:25 GMT</pubDate>
            <atom:updated>2017-08-18T07:34:25.434Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ble6-wEIsyJrGeVqtLj1Vw.gif" /><figcaption>Input video | Detected Face | Generated Pix2Pix output</figcaption></figure><p>Inspired by this work <a href="https://medium.com/@datitran?source=post_header_lockup">Dat Tran</a>, I prepared my own dataset and trained improved Pix2Pix net to generate Polish youtuber Krzysztof Gonciarz creating show “Zapytaj Beczkę”.</p><p><a href="https://medium.com/towards-data-science/face2face-a-pix2pix-demo-that-mimics-the-facial-expression-of-the-german-chancellor-b6771d65bf66">Face2face — A Pix2Pix demo that mimics the facial expression of the German chancellor</a></p><p>But first let’s give it a try:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FzJlrkpuF7XE%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DzJlrkpuF7XE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FzJlrkpuF7XE%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/e6513ce825332e468f50c2831e073860/href">https://medium.com/media/e6513ce825332e468f50c2831e073860/href</a></iframe><p>In my first approach I just trained the original net from <a href="https://github.com/datitran/face2face-demo">face2face-demo</a>. It worked! But it was only 256 x 256 resolution which was not enough for me, so I decided to increase resolution to 1024 x 1024.</p><h4>High resolution mod</h4><p>To increase resolution one needs to add layers to encoder and decoder, there is no simpler way to do it. So I added few layers and tuned parameters to fit my 8GB memory on GTX980M in my laptop.</p><p>If you need to modify input/output size just add or remove some layers in encoder and decoder:</p><p>Encoder before (ngf = 64)</p><pre># encoder_2: [batch, 128, 128, ngf] =&gt; [batch, 64, 64, ngf * 2]<br># encoder_3: [batch, 64, 64, ngf * 2] =&gt; [batch, 32, 32, ngf * 4]<br># encoder_4: [batch, 32, 32, ngf * 4] =&gt; [batch, 16, 16, ngf * 8]<br># encoder_5: [batch, 16, 16, ngf * 8] =&gt; [batch, 8, 8, ngf * 8]<br># encoder_6: [batch, 8, 8, ngf * 8] =&gt; [batch, 4, 4, ngf * 8]<br># encoder_7: [batch, 4, 4, ngf * 8] =&gt; [batch, 2, 2, ngf * 8]<br># encoder_8: [batch, 2, 2, ngf * 8] =&gt; [batch, 1, 1, ngf * 8]</pre><p>Encoder after (ngf = 64)</p><pre># encoder_2: [batch, 512, 512, ngf] =&gt; [batch, 256, 256, ngf * 2]<br># encoder_3: [batch, 256, 256, ngf * 2] =&gt; [batch, 128, 128, ngf * 4]<br># encoder_4: [batch, 128, 128, ngf * 4] =&gt; [batch, 64, 64, ngf * 8]<br># encoder_5: [batch, 64, 64, ngf * 8] =&gt; [batch, 32, 32, ngf * 8]<br># encoder_6: [batch, 32, 32, ngf * 8] =&gt; [batch, 16, 16, ngf * 16]<br># encoder_7: [batch, 16, 16, ngf * 16] =&gt; [batch, 8, 8, ngf * 16]<br># encoder_8: [batch, 8, 8, ngf * 16] =&gt; [batch, 4, 4, ngf * 16]<br># encoder_9: [batch, 4, 4, ngf * 16] =&gt; [batch, 2, 2, ngf * 16]<br># encoder_10: [batch, 2, 2, ngf * 16] =&gt; [batch, 1, 1, ngf * 32]</pre><h4>Training data</h4><p>I used 4 videos as input for training:</p><ul><li>Zapytaj Beczkę #145 <a href="https://youtu.be/_aEnuh9tnKg">https://youtu.be/_aEnuh9tnKg</a></li><li>Zapytaj Beczkę #143 <a href="https://youtu.be/yI8fJtcNkRA">https://youtu.be/yI8fJtcNkRA</a></li><li>Zapytaj Beczkę #140 <a href="https://youtu.be/gii3w0t1KIs">https://youtu.be/gii3w0t1KIs</a></li><li>Zapytaj Beczkę #139 <a href="https://youtu.be/X3asNGDdUpw">https://youtu.be/X3asNGDdUpw</a></li></ul><p>I used frames with one face detected from every 10th frame of these videos and manually removed some bad examples (e.g. other people).</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FM2Rpjd8Vj8A%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DM2Rpjd8Vj8A&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FM2Rpjd8Vj8A%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/2e6b1f1663f79062b0a48adbb6223929/href">https://medium.com/media/2e6b1f1663f79062b0a48adbb6223929/href</a></iframe><h3>Results</h3><p>Finally after 3 days of training (GTX980M) I get these results:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fv5VDJKCrP6A%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dv5VDJKCrP6A&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fv5VDJKCrP6A%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/211289d7c5c378bcb3e68dad3f98766a/href">https://medium.com/media/211289d7c5c378bcb3e68dad3f98766a/href</a></iframe><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F2myebi8g86Y%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D2myebi8g86Y&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F2myebi8g86Y%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="640" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c7ba0a8e29f451547ba7c2720442438c/href">https://medium.com/media/c7ba0a8e29f451547ba7c2720442438c/href</a></iframe><h3>Source code</h3><p>You can find source code on my GitHub:</p><p><a href="https://github.com/karolmajek/face2face-demo">karolmajek/face2face-demo</a></p><h3>Conclusion</h3><p>The original model (with Angela Merkel) was working good only in one position and distance from camera. Here I have similar problem — face was very close to the camera in all training videos. If you are going to train net to generate faces — remember to prepare very good dataset. The increase of input/output resolution was really good idea!</p><p>From my experience it was super easy to train this net and get first outputs. Totally different than with YOLO/SSD networks, where you need images and annotations in specified format. I will write when I successfully train YOLO or SSD!</p><p>Any ideas what to do next? Stay tuned for more deep learning posts!</p><p>Please check Dat Tran stories:</p><p><a href="https://medium.com/@datitran">Dat Tran - Medium</a></p><p>If you like this work show me your support!<br>Follow me on:</p><ul><li>Youtube: <a href="https://www.youtube.com/karolmajek">https://www.youtube.com/karolmajek</a></li><li>Twitter: <a href="https://twitter.com/karol_majek">https://twitter.com/karol_majek</a></li><li>Medium: <a href="https://medium.com/@karol_majek">https://medium.com/@karol_majek</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=37b90c1ca7e8" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>