Het analyseren van de ligplaatsbezetting geeft Port of Amsterdam inzicht in de drukte van de haven. De ligplaatsbezetting van de reguliere binnenvaart kan worden afgeleid door middel van AIS (Automatic Identification System). Dit is een systeem waarmee schepen voortdurend informatie over hun positie doorseinen aan elkaar en instanties aan de wal. Duwbakken beschikken echter niet over AIS omdat zij geen eigen energievoorziening aan boord hebben.

Om de ligplaatsbezetting van de duwbakken in beeld te brengen, is er een camera geplaatst die elk uur een foto van de ligplaats maakt. Deze afbeeldingen worden handmatig geanalyseerd en het aantal aanwezige duwbakken per uur wordt geregistreerd. Dit proces is erg tijdrovend en arbeidsintensief.

Om dit proces te automatiseren is een pilot gestart waarin wordt geprobeerd om de duwbakken te tellen door middel van object detection.

Data

Voor de pilot hebben we in totaal 483 afbeeldingen van duwbakken op de ligplaats verzameld. Deze afbeeldingen zijn handmatig gelabeld door een bounding box om elke duwbak heen te tekenen met behulp van de tool LabelImg. Dit is een grafische tool voor het annoteren van afbeeldingen waar de annotaties opgeslagen worden als XML-files in PASCAL VOC (Visual Object Classes) format. In dit format worden de bounding boxes op de afbeelding aangegeven door middel van de coördinaten van de linkerbovenhoek en rechteronderhoek van de box.

Voorbeeld van het annoteren van de camerabeelden.

Wat is object detection?

Object detection is een vaak voorkomend probleem in computer vision waarbij een deep learning model, vaak een convolutional neural network (CNN), objecten in een afbeelding probeert te herkennen en te lokaliseren. Het herkennen van duwbakken op afbeeldingen is een voorbeeld van een object detection probleem. CNNs zijn hier in het bijzonder geschikt voor, omdat ze in staat zijn om een hoger dimensionale input (afbeeldingen met soms wel miljoenen pixels) te reduceren door middel van zogeheten convoluties. Convoluties kunnen bijvoorbeeld horizontale of verticale lijnen detecteren in de eerste lagen van het neural network en in latere lagen zelfs gezichten van mensen.

We hebben echter niet genoeg afbeeldingen om een CNN from scratch te trainen. Daarom gebruiken we transfer learning. Bij transfer learning pas je een deep learning model dat is getraind voor een specifiek probleem, toe op een ander probleem. Zo wordt de kennis gebruikt van een deep learning model dat al is getraind op miljoenen afbeeldingen om allerlei verschillende objecten te herkennen, zoals personen, katten en honden. De laatste lagen van dit model worden getraind op onze eigen afbeeldingen om duwbakken te kunnen herkennen. Op deze manier kun je met een beperkte training set toch aan de slag met object detection. Maar waar vinden we zo’n voorgetraind deep learning model?

Tensorflow object detection API

De TensorFlow Object Detection API is een open source framework dat kan worden gebruikt om object detection modellen te ontwikkelen, trainen en deployen. Deze API bevat ook verschillende deep learning modellen voor object detection die zijn getraind door onderzoekers en je kunt gebruiken voor je eigen object detection probleem. Je hoeft alleen de GIT repository van de Tensorflow object detection API te clonen en je kunt aan de slag!

Het model dat we hebben gebruikt voor het herkennen van duwbakken is het faster RCNN inception v2 COCO model. Dit model is getraind op de COCO (common objects in context) dataset met 1,5 miljoen objecten van 80 verschillende categorieën. RCNN staat voor region based convolutional neural network en gebruikt 3 stappen om objecten te detecteren:

  1. Het model stelt eerst regio’s van de afbeelding voor waar zich mogelijk objecten bevinden.
  2. Een CNN wordt getraind met de voorgestelde regio’s als input. De output is een feature vector van de voorgestelde regio’s.
  3. Deze feature vector wordt gegeven aan:
    1. Een support vector machine model om de regio te classificeren (bijv. duwbak of geen duwbak).
    2. Een lineair regressiemodel om de bounding box van het object te bepalen.

 

Het RCNN leert dus 2 verschillende taken: het detecteren van objecten (met de bounding box) en het classificeren van deze objecten.

Object detection met een RCNN. Bron: https://towardsdatascience.com/r-cnn-3a9beddfd55a

 

Google Colab

Het trainen van een deep learning model vereist heel wat rekenkracht. Daarom hebben we ervoor gekozen om het model te trainen met Google Colab. Dit is een gratis cloud omgeving waarin je kunt programmeren in Python. Daarnaast kun je deep learning modellen ontwikkelen met populaire Python packages zoals Tensorflow, Keras en Pytorch en gratis gebruik maken van een GPU. Dat versnelt het trainingsproces van ons deep learning model aanzienlijk. Zelf aan de slag met Google Colab? Kijk op https://colab.research.google.com/.

Resultaten

Nu het deep learning model is getraind om duwbakken te herkennen, kunnen we testen hoe goed het model werkt op nieuwe afbeeldingen. Op de afbeelding hieronder is een voorspelling van het object detection model te zien. Hier wordt het aantal duwbakken aan de rechterkant correct gedetecteerd, namelijk 3, maar het aantal duwbakken aan de linkerkant niet. Dit komt doordat de duwbakken aan de rechterkant meer van voren zijn gefotografeerd en de duwbakken aan de linkerkant meer van de zijkant. De tussenliggende duwbakken aan de linkerkant zijn dus lastig te herkennen voor het model.

Er zijn nog een aantal uitdagingen waar verder onderzoek naar gedaan kan worden. Allereerst, zijn sommige foto’s van slechte kwaliteit door bijvoorbeeld regendruppels in het beeld of een gebrek aan licht. Ook liggen duwbakken vaak achter elkaar waardoor achterliggende of tussenliggende duwbakken niet goed zichtbaar zijn. Het is belangrijk dat het model niet te veel duwbakken detecteert of juist duwbakken over het hoofd ziet om een betrouwbaar beeld van de ligplaatsbezetting te geven.

Hoe nu verder?

De komende periode zullen we verder gaan met het verbeteren van het deep learning model. Verschillende parameters van het model kunnen worden aangepast om het aantal duwbakken nog nauwkeuriger te kunnen bepalen. Wanneer de pilot succesvol wordt afgerond, kan het model het handmatige telproces vervangen.

 

Wil je zelf aan de slag met Google Colab of de Tensorflow Object Detection API? Klik dan op een van deze links: