
Introductie
Wie zich wel eens bezig heeft gehouden met machine learning project is waarschijnlijk wel bekend met Tensorflow, een software librarie welke gebruikt kan worden voor het onder andere eenvoudig maken van neurale netwerken. Sinds een tijdje is er ook Tensorflow light, zoals de toevoeging al doet vermoeden, een wat lichtere versie van Tensorflow. Wat heeft dit te maken met de Coral USB Accelerator? Best veel eigenlijk. De Coral USB Accelerator is een extra edge TPU coprocessor welke aan Linux systemen kan worden toegevoegd. De Coral USB Accelerator kan werken met Tensorflow light models. Voornamelijk voor de Raspberry Pi bijvoorbeeld met beperktere CPU en GPU-resources kan dit een interessante toevoeging zijn. Tijdens een project van Fontys Venlo waarbij het doel was te kijken of het mogelijk is met deeplearning te kunnen detecteren of een tomatenplant gezond of ziek is, werd er een USB accelerator aangeschaft en heb ik dit product samen met de rest van de projectgroep een tijd kunnen uitproberen in combinatie met een Raspberry Pi.
Inhoudsopgaven
1) De USB Accelerator
2) Installeren
3) Gebruik4 Conclusie
5 ReactiesLinkjes
Google Coral USB Accelerator Informatie pagina
Datasheet
Get-startedAlgemene gegevens
Breedte: | 3 cm |
Lengte: | 6,5 cm |
Dikte | 0,8 cm |
Aaansluiting | USB 3.0 Type C |
USB kabel | 30 cm |
Geteste prestaties | ~0,031 seconden per Classificatie. Eerste Classificatie~0,138 - 0,141 seconden. Test details zie 3.2 |
De Accelerator komt geleverd in een vrij simpel doosjes met een sticker erop geplakt. In het doosje zelf zit wel een kartonnetje, maar dat is het verder. Er is dus geen bijzondere uitpak ervaring, maar dat is hier ook absoluut niet nodig naar mijn mening.
Over het apparaatje aan de buitenkant zelf valt wellicht het minst bijzondere te vertellen. Uiteindelijk gaat het hier voornamelijk om wat je ermee kunt wat later aanbod komt in deze review.
Toch mag gezegd worden dat er zeker rekening is gehouden met de looks. Het apparaatje heeft een goed leuk design aan de voorkant waarbij Coral te lezen is. De voorkant is geheel van metaal gemaakt . Aan de zijkanten van de Accelerator zit wat dikker plastic. De achterkant is ietwat doorzichtig en is ook van plastic gemaakt.
Daarnaast is eraan gedacht dat je de accelerator mogelijk ergens aan wilt vastmaken en zitten er op de vier hoeken gaten, dat kwam best goed uit. Op de foto is de accelerator vastgemaakt aan een Raspberry Pi case.
Het op de afbeelding benodigde materiaal waarmee de Accelerator is bevestigd, wordt niet meegeleverd met de Accelerator.
Wel wordt er nog een usb-A naar usb-c kabeltje meegeleverd waarbij de usb-c connector in de accelerator moet worden geplugd. De kabel is niet bijster lang, maar haalde met gemak het stuk tussen de Accelerator die aan de zijkant van de case was bevestigd, en de USB slots van de Pi. Extra kabel zou enkel maar in de weg zitten.
Wat betreft de bouwkwaliteit, en design heb ik weinig aan te merken.
Terug naar de inhoudsopgaven
De installatie van de accelerator gaat zeer eenvoudig, zeker als je al gewend bent met de terminal te werken van Linux. Daarnaast worden de installatie stappen duidelijk uitgelegd en staan de commands die nodig zijn voor het installeren op de ondersteuning pagina van de Accelerator. Voor de installatie is enkel een Raspberry Pi of een pc met een andere Linux distributie nodig. Daarnaast is een internet connectie nodig en dient python geïnstalleerd te zijn.
In totaal voer je voor de installatie drie of vier commands uit die te vinden zijn via de
Get-started
Je kiest eerste de installatie locatie waarna je het bestand download. Vervolgens pak je het bestand uit. Als laatste navigeer je naar de directory en installeer je de software.
Tijdens de installatie wordt nog gevraagd of je de maximum prestaties wilt van de Accelerator, echter zoals ook gewaarschuwd wordt in de get-Started, kan de Accelerator hiervan erg heet worden. Dit is iets wat waarschijnlijk elke gebruiker zelf zal moeten afwegen wat mogelijk is. Voor deze review is de accelerator niet voldoende belast om deze echt heette laten worden.
In de get-started staat momenteel ook nog dat je inden je een python versie hoger dan 3.5 draait, je install.sh file moet aanpassen en python3.5 in python 3 moet veranderen. Dit lijkt echter verouderd te zijn aangezien momenteel wanneer de installatie bestanden gedownload je een install.sh file krijg waar al netje python3 wordt gebruikt i.p.v. python3.5. Momenteel draai ik op moment van schrijven python 3.6.8 in verband met comptabiliteit met tensorflow.
Voor wie zich afvraagt of het mogelijk is de Accelerator mogelijk toch op Windows te installeren wanneer een programma zoals Cygwin staat geïnstalleerd, dit heb ik getest en het is niet mogelijk.
Terug naar de inhoudsopgaven
Een model opzetten voor gebruik met de Accelerator
Wie denkt de Accelerator enkel te hoeven aansluiten op een systeem, en daarmee klaar is komt bedrogen uit. Zoals in de introductie al kort aanbod kwam is de Google Coral bedoeld voor in gebruik met tensorflow light. Het eerste waar je dan al snel tegen aan loopt waarschijnlijk is dat je een .tflite model moet hebben om gebruik te kunnen maken van de USB.
Voor wie momenteel al een applicatie heeft en een andere framework gebruikt zal dit wat werk opleveren door het omzetten. Indien je met een nieuw project begint is het waarschijnlijk eenvoudiger.
Tensorflow lite modellen kunnen niet rechtstreeks worden getraind, maar moeten geconverteerd worden via een gewoon Tensorflow model. Meer informatie kan gevonden worden op
deze pagina. Verder is er een
converter beschikbaar wat het dus wat eenvoudiger maakt wanneer je jouw model in een ondersteund bestand hebt opgeslagen.
De volgende stap is dat het model ook nog eens gecompileerd worden naar een .tflite model wat op een edge TPU kan runnen. Hiervoor is dan wel een online
converter beschikbaar via de Coral website en een applicatie voor op de pc welke via de terminal kan worden geïnstalleerd (zie
https://coral.withgoogle.com/docs/edgetpu/compiler/). Echter het gehele proces van tensorflow model trainen, naar tflite model converteren en vervolgens compileren naar een edge TPU model is bij elkaar wel wat omslachtig.
Daarnaast moet er rekening mee worden gehouden dat er wel gebruikt moet worden gemaakt van quantization-aware training voor het compileren van een .tflite model voor de edge TPU. In het geval van het project geval waarbij de Coral is gebruikt hadden we dit niet direct in de gaten waardoor er roet in het eten werd gegooid.
Een model welke eenmaal gecompileerd is voor de edge TPU zal ook niet meer werken zolang deze niet in aangesloten bleek na testen, dus ook daar moet rekening mee worden gehouden.
Wanneer de usb succesvol is geïnstalleerd is het schrijven van de code voor het gebruik van de Accelerator wel gelukkig vrij eenvoudig. Wat daarin ook mee helpt is dat er een demo project wordt mee geïnstalleerd. Hierdoor heb je al snel in de gaten wat het idee is.
Snelheid Classificaties
Een van de belangrijke punten bij het gebruik van de USB Accelerator is hoe de snelheid is tijdens het maken van een prediction. Voor het maken van een meting heb ik de demo gebruik die bij de installatie van de USB Accelerator mee komt zodat dit eenvoudig gereproduceerd kan worden in tegenstelling tot wanneer ik een eigen model zou gebruiken. Om de demo te kunnen uitvoeren hoeft nog enkel het model, de labels en een testafbeelding gedownload te worden vanaf de Coral website. Downloadlinkjes hiervan zijn te vinden in de Get-started. De python code zelf wordt tijdens de installatie van de Accelerator mee geleverd.
De demo betreft heet classificeren van vogels. Om de snelheid te kunnen meten heb ik aan het bestand classify_image.py het volgende gewijzigd:
Voeg de volgende import toe voor de module time:
import time
op de regel voordat de classificatie wordt uitgevoerd voeg ik het volgende in
start = time.time()
Direct na de classificatie voeg ik de volgende regel in:
end = time.time()
En nadat de resultaten zijn geprint nog:
print('prediction time: ')
print(end - start)
Uiteindelijk onstaat hiermee dan de volgende code: '
Hiermee wordt zo nauwkeurig mogelijk de benodigde tijd voor de classificatie. Het resultaat blijkt echter opmerkelijk genoeg voor de eerste classificatie steeds noemenswaardig langer tijd nodig te hebben dan de opvolgende classificatie. zoals in de onderstaande afbeelding te zien is. De eerste classificatie duurt ~0,138 seconden waarna de opvolgende slechts zo'n 0,031 seconden duren. In de praktijk is dit voor ons al mens amper merkbaar hoewel het eigenlijk toch een factor 4,5 sneller is. De reden voor dit gedrag is mij echter niet duidelijk geworden.
Uiteraard moet wel in gedachte worden genomen dat deze snelheid specifiek gemeten zijn met de demo en anders zullen zijn bij andere modellen (gemaakt uit andere datasets) en eventuele andere aspecten zoals mogelijk de usb versie.
Een ander punt wat moet worden meegenomen is dat standaard wanneer de USB-accelerator gebruikt wordt, de applicatie ook afhankelijk wordt van de USB. Indien deze niet is aangesloten zal de applicatie niet draaien.
Terug naar de inhoudsopgaven
Terug naar de inhoudsopgaven
De Google Coral USB-Accelerator is voornamelijk handig voor bijvoorbeeld de Raspberry Pi voor machine learning projecten. Het apparaatje werkt opzicht prima en ziet er goed uit. Het klaarmaken voor modellen die ondersteund worden is wel wat omslachtig, maar is gelukkig goed te doen door de documentatie en tools die worden aangereikt.