I denne todelte serie demonstrerer vi, hvordan man mærker og træner modeller til 3D-objektdetektionsopgaver. I del 1 diskuterer vi det datasæt, vi bruger, samt eventuelle forbehandlingstrin til at forstå og mærke data. I del 2 gennemgår vi, hvordan du træner en model på dit datasæt og implementerer den til produktion.
LIDAR (lysdetektion og rækkevidde) er en metode til at bestemme afstande ved at målrette et objekt eller en overflade med en laser og måle tiden for det reflekterede lys til at vende tilbage til modtageren. Autonome køretøjsfirmaer bruger typisk LiDAR-sensorer til at skabe en 3D-forståelse af miljøet omkring deres køretøjer.
Efterhånden som LiDAR-sensorer bliver mere tilgængelige og omkostningseffektive, bruger kunder i stigende grad punktskydata i nye rum som robotteknologi, signalkortlægning og augmented reality. Nogle nye mobile enheder inkluderer endda LiDAR-sensorer. Den voksende tilgængelighed af LiDAR-sensorer har øget interessen for punktsky-data til maskinlæringsopgaver (ML), såsom 3D-objektdetektion og -sporing, 3D-segmentering, 3D-objektsyntese og rekonstruktion og brug af 3D-data til at validere 2D-dybdeestimering.
I denne serie viser vi dig, hvordan du træner en objektdetekteringsmodel, der kører på punktskydata, til at forudsige køretøjers placering i en 3D-scene. Dette indlæg fokuserer vi specifikt på at mærke LiDAR-data. Standard LiDAR-sensoroutput er en sekvens af 3D-punktskyrammer med en typisk optagelseshastighed på 10 billeder pr. sekund. For at mærke denne sensorudgang skal du bruge et mærkningsværktøj, der kan håndtere 3D-data. Amazon SageMaker Ground Truth gør det nemt at mærke objekter i en enkelt 3D-ramme eller på tværs af en sekvens af 3D-punktskyrammer til opbygning af ML-træningsdatasæt. Ground Truth understøtter også sensorfusion af kamera- og LiDAR-data med op til otte videokameraindgange.
Data er afgørende for ethvert ML-projekt. Især 3D-data kan være vanskelige at hente, visualisere og mærke. Vi bruger A2D2 datasæt i dette indlæg og guide dig gennem trinene for at visualisere og mærke det.
A2D2 indeholder 40,000 frames med semantisk segmentering og punktsky-etiketter, herunder 12,499 frames med 3D-afgrænsningsboksetiketter. Da vi fokuserer på objektdetektering, er vi interesserede i de 12,499 frames med 3D-afgrænsningsboksetiketter. Disse annoteringer inkluderer 14 klasser, der er relevante for kørsel som bil, fodgænger, lastbil, bus osv.
Følgende tabel viser den komplette klasseliste:
Indeks | Klasseliste |
1 | dyr |
2 | cykel |
3 | bus |
4 | bil |
5 | campingvogn transporter |
6 | cyklist |
7 | udrykningskøretøj |
8 | motorcyklist |
9 | motorcykel |
10 | fodgænger |
11 | trailer |
12 | lastbil |
13 | brugskøretøj |
14 | varevogn/SUV |
Vi vil træne vores detektor til specifikt at detektere biler, da det er den mest almindelige klasse i vores datasæt (32616 af de i alt 42816 objekter i datasættet er mærket som biler).
Løsningsoversigt
I denne serie dækker vi, hvordan du visualiserer og mærker dine data med Amazon SageMaker Ground Truth og demonstrerer, hvordan du bruger disse data i et Amazon SageMaker-træningsjob til at skabe en objektdetekteringsmodel, implementeret til et Amazon SageMaker-endepunkt. Vi vil især bruge en Amazon SageMaker-notebook til at betjene løsningen og starte alle mærknings- eller træningsjob.
Følgende diagram viser det overordnede flow af sensordata fra mærkning til træning til implementering:
Du lærer, hvordan du træner og implementerer en 3D-objektdetektionsmodel i realtid med Amazon SageMaker Ground Truth med følgende trin:
- Download og visualiser et punktsky-datasæt
- Forbered data, der skal mærkes med Amazon SageMaker Ground Truth punktskyværktøj
- Start et distribueret Amazon SageMaker Ground Truth træningsjob med MMDetection3D
- Evaluer dine træningsjobresultater og profiler din ressourceudnyttelse med Amazon SageMaker Debugger
- Implementer en asynkron SageMaker slutpunkt
- Kald slutpunktet og visualiser 3D-objektforudsigelser
AWS-tjenester, der bruges til at implementere denne løsning
Forudsætninger
Følgende diagram viser, hvordan man opretter en privat arbejdsstyrke. For skriftlige trin-for-trin instruktioner, se Opret en Amazon Cognito Workforce ved at bruge siden Labeling Workforces.
Lancering af AWS CloudFormation-stakken
Nu hvor du har set strukturen af løsningen, implementerer du den på din konto, så du kan køre et eksempel på en arbejdsgang. Alle implementeringstrin relateret til mærkningspipelinen administreres af AWS CloudFormation. Dette betyder, at AWS Cloudformation opretter din notebook-instans samt eventuelle roller eller Amazon S3 Buckets for at understøtte kørsel af løsningen.
Du kan starte stakken i AWS-regionen us-east-1
på AWS CloudFormation-konsollen ved hjælp af Start Stack
knap. For at starte stakken i en anden region skal du bruge instruktionerne i README i GitHub repository.
Det tager cirka 20 minutter at oprette alle ressourcerne. Du kan overvåge fremskridtene fra AWS CloudFormations brugergrænseflade (UI).
Når din CloudFormation-skabelon er færdig med at køre, gå tilbage til AWS-konsollen.
Åbning af notesbogen
Amazon SageMaker Notebook Instances er ML-beregningsforekomster, der kører på Jupyter Notebook-appen. Amazon SageMaker administrerer oprettelsen af forekomster og relaterede ressourcer. Brug Jupyter-notebooks i din notebook-instans til at forberede og behandle data, skrive kode for at træne modeller, implementere modeller til Amazon SageMaker-hosting og teste eller validere dine modeller.
Følg de næste trin for at få adgang til Amazon SageMaker Notebook-miljøet:
- Under tjenester søg efter Amazon SageMaker.
- Under Notesbog, Vælg Notebook-forekomster.
- En Notebook-instans skal klargøres. Vælg Åbn jupyter lab, som er placeret på højre side af den forudleverede Notebook-forekomst under handlinger.
- Du vil se et ikon som dette, når siden indlæses:
- Du vil blive omdirigeret til en ny browserfane, der ser ud som følgende diagram:
- Når du er i Amazon SageMaker Notebook Instance Launcher UI. Fra venstre sidebjælke skal du vælge Git ikon som vist i følgende diagram.
- Type Klon et depot valgmulighed.
- Indtast GitHub URL(https://github.com/aws-samples/end-2-end-3d-ml) i pop op-vinduet og vælg klone.
- Type Filbrowser for at se GitHub-mappen.
- Åbn notesbogen med titlen
1_visualization.ipynb.
Betjening af Notebook'en
Oversigt
De første par celler i notesbogen i afsnittet med titlen Downloadede filer gennemgår, hvordan du downloader datasættet og inspicerer filerne i det. Efter at cellerne er udført, tager det et par minutter, før dataene er færdige med at downloade.
Når den er downloadet, kan du gennemgå filstrukturen for A2D2, som er en liste over scener eller drev. En scene er en kort optagelse af sensordata fra vores køretøj. A2D2 leverer 18 af disse scener, som vi kan træne på, som alle er identificeret med unikke datoer. Hver scene indeholder 2D-kameradata, 2D-etiketter, 3D-kantede annoteringer og 3D-punktskyer.
Du kan se filstrukturen for A2D2-datasættet med følgende:
A2D2 sensor opsætning
Det næste afsnit gennemgår læsning af nogle af disse punktskydata for at sikre, at vi fortolker dem korrekt og kan visualisere dem i notesbogen, før vi forsøger at konvertere dem til et format, der er klar til datamærkning.
For enhver form for opsætning af autonom kørsel, hvor vi har 2D- og 3D-sensordata, er det afgørende at registrere sensorkalibreringsdata. Udover rådataene downloadede vi også cams_lidar.json
. Denne fil indeholder oversættelsen og orienteringen af hver sensor i forhold til køretøjets koordinatramme, dette kan også omtales som sensorens stilling eller placering i rummet. Dette er vigtigt for at konvertere punkter fra en sensors koordinatramme til køretøjets koordinatramme. Det er med andre ord vigtigt for at visualisere 2D- og 3D-sensorerne, mens køretøjet kører. Køretøjets koordinatramme er defineret som et statisk punkt i midten af køretøjet, med x-aksen i retning af køretøjets fremadgående bevægelse, y-aksen angiver venstre og højre med venstre positiv, og z- akse, der peger gennem køretøjets tag. Et punkt (X,Y,Z) på (5,2,1) betyder, at dette punkt er 5 meter foran vores køretøj, 2 meter til venstre og 1 meter over vores køretøj. At have disse kalibreringer giver os også mulighed for at projicere 3D-punkter på vores 2D-billede, hvilket er særligt nyttigt til punktskymærkningsopgaver.
Se følgende diagram for at se sensoropsætningen på køretøjet.
De punktskydata, vi træner på, er specifikt tilpasset det frontvendte kamera eller cam front-center:
Dette matcher vores visualisering af kamerasensorer i 3D:
Denne del af notesbogen gennemgår og validerer, at A2D2-datasættet matcher vores forventninger om sensorpositioner, og at vi er i stand til at justere data fra punktskysensorerne ind i kamerarammen. Du er velkommen til at køre alle celler gennem den med titlen Projektion fra 3D til 2D for at se din punktsky-dataoverlejring på det følgende kamerabillede.
Konvertering til Amazon SageMaker Ground Truth
Efter at have visualiseret vores data i vores notesbog, kan vi trygt konvertere vores punktskyer til Amazon SageMaker Ground Truths 3D-format at verificere og justere vores etiketter. Dette afsnit gennemgår konvertering fra A2D2's dataformat til en Amazon SageMaker Ground Truth sekvensfil, med det inputformat, der bruges af objektsporingsmodaliteten.
Sekvensfilformatet inkluderer punktskyformaterne, billederne tilknyttet hver punktsky og alle sensorpositions- og orienteringsdata, der kræves for at justere billeder med punktskyer. Disse konverteringer udføres ved hjælp af sensorinformationen læst fra det foregående afsnit. Følgende eksempel er et sekvensfilformat fra Amazon SageMaker Ground Truth, som beskriver en sekvens med kun et enkelt tidstrin.
Punktskyen for dette tidstrin er placeret kl s3://sagemaker-us-east-1-322552456788/a2d2_smgt/20180807_145028_out/20180807145028_lidar_frontcenter_000000091.txt
og har et format på <x coordinate> <y coordinate> <z coordinate>
.
Tilknyttet punktskyen er et enkelt kamerabillede placeret ved s3://sagemaker-us-east-1-322552456788/a2d2_smgt/20180807_145028_out/undistort_20180807145028_camera_frontcenter_000000091.png
. Bemærk, at vi tager sekvensfilen, der definerer alle kameraparametre for at tillade projektion fra punktskyen til kameraet og tilbage.
Konvertering til dette inputformat kræver, at vi skriver en konvertering fra A2D2's dataformat til dataformater understøttet af Amazon SageMaker Ground Truth. Dette er den samme proces, som alle skal gennemgå, når de medbringer deres egne data til mærkning. Vi vil gennemgå, hvordan denne konvertering fungerer, trin for trin. Hvis du følger med i notesbogen, skal du se på den navngivne funktion a2d2_scene_to_smgt_sequence_and_seq_label
.
Punktsky konvertering
Det første trin er at konvertere dataene fra en komprimeret Numpy-formateret fil (NPZ), som blev genereret med numpy.kender metode, til en accepteret rå 3D-format til Amazon SageMaker Ground Truth. Konkret genererer vi en fil med en række pr. punkt. Hvert 3D-punkt er defineret af tre flydende punkt X-, Y- og Z-koordinater. Når vi angiver vores format i sekvensfilen, bruger vi strengen text/xyz
at repræsentere dette format. Amazon SageMaker Ground Truth understøtter også tilføjelse af intensitetsværdier eller Red Green Blue (RGB) punkter.
A2D2's NPZ-filer indeholder flere Numpy-arrays, hver med sit eget navn. For at udføre en konvertering indlæser vi NPZ-filen ved hjælp af Numpy's belastning metode, få adgang til det kaldede array punkter (dvs. et Nx3-array, hvor N er antallet af punkter i punktskyen), og gem som tekst til en ny fil ved hjælp af Numpy's gemmetxt fremgangsmåde.
Billedforbehandling
Dernæst forbereder vi vores billedfiler. A2D2 leverer PNG-billeder, og Amazon SageMaker Ground Truth understøtter PNG-billeder; dog er disse billeder forvrænget. Forvrængning opstår ofte, fordi billedoptagelseslinsen ikke er justeret parallelt med billedplanet, hvilket får nogle områder i billedet til at se tættere ud end forventet. Denne forvrængning beskriver forskellen mellem et fysisk kamera og et idealiseret pinhole kamera model. Hvis der ikke tages højde for forvrængning, så vil Amazon SageMaker Ground Truth ikke være i stand til at gengive vores 3D-punkter oven på kameravisningerne, hvilket gør det mere udfordrende at udføre mærkning. For en vejledning om kamerakalibrering, se denne dokumentation fra OpenCV.
Mens Amazon SageMaker Ground Truth understøtter forvrængningskoefficienter i sin inputfil, kan du også udføre forbehandling før mærkningsjobbet. Da A2D2 giver hjælpekode til at udføre undforvrængning, anvender vi den på billedet og lader felterne relateret til forvrængning ude af vores sekvensfil. Bemærk, at de forvrængningsrelaterede felter inkluderer k1, k2, k3, k4, p1, p2 og skævhed.
Kameraposition, orientering og projektionskonvertering
Ud over de rådatafiler, der kræves til mærkning, kræver sekvensfilen også oplysninger om kameraposition og orientering for at udføre projektionen af 3D-punkter i 2D-kameravisningerne. Vi er nødt til at vide, hvor kameraet kigger i 3D-rummet for at finde ud af, hvordan 3D-kubiske etiketter og 3D-punkter skal gengives oven på vores billeder.
Fordi vi har indlæst vores sensorpositioner i en fælles transformationsmanager i A2D2 sensoropsætningssektionen, kan vi nemt forespørge transformationsmanageren om de oplysninger, vi ønsker. I vores tilfælde behandler vi køretøjets position som (0, 0, 0) i hver ramme, fordi vi ikke har positionsinformation om sensoren leveret af A2D2's objektdetektionsdatasæt. Så i forhold til vores køretøj er kameraets orientering og position beskrevet af følgende kode:
Nu hvor position og orientering er konverteret, skal vi også levere værdier for fx, fy, cx og cy, alle parametre for hvert kamera i sekvensfilformatet.
Disse parametre refererer til værdier i kameramatricen. Mens positionen og orienteringen beskriver, hvilken vej et kamera vender, beskriver kameramatrixen kameraets synsfelt, og præcis hvordan et 3D-punkt i forhold til kameraet bliver konverteret til en 2D-pixelplacering i et billede.
A2D2 giver en kameramatrix. En referencekameramatrix er vist i den følgende kode, sammen med hvordan vores notebook indekserer denne matrix for at få de relevante felter.
Med alle felterne parset fra A2D2's format, kan vi gemme sekvensfilen og bruge den i en Amazon SageMaker Ground Truth input-manifestfil at starte et mærkningsarbejde. Dette mærkningsjob giver os mulighed for at oprette 3D-afgrænsningsboksetiketter til brug nedstrøms til 3D-modeltræning.
Kør alle celler indtil slutningen af notesbogen, og sørg for at udskifte workteam
ARN med Amazon SageMaker Ground Truth workteam
ARN du oprettet en forudsætning. Efter ca. 10 minutters mærkning af jobskabelsestid bør du være i stand til at logge ind på medarbejderportalen og bruge mærkningsbrugergrænseflade at visualisere din scene.
Ryd op
Slet AWS CloudFormation-stakken, du implementerede ved hjælp af Start Stack knap navngivet ThreeD
i AWS CloudFormation-konsollen for at fjerne alle ressourcer, der bruges i dette indlæg, inklusive alle kørende forekomster.
Anslåede omkostninger
Den omtrentlige pris er $5 for 2 timer.
Konklusion
I dette indlæg demonstrerede vi, hvordan man tager 3D-data og konverterer dem til en formular, der er klar til mærkning i Amazon SageMaker Ground Truth. Med disse trin kan du mærke dine egne 3D-data til træning af objektdetekteringsmodeller. I det næste indlæg i denne serie viser vi dig, hvordan du tager A2D2 og træner en objektdetektormodel på etiketterne, der allerede er i datasættet.
Glad bygning!
Om forfatterne
Isaac Privitera er Senior Data Scientist ved Amazon Machine Learning Solutions Lab, hvor han udvikler skræddersyede maskinlærings- og deep learning-løsninger til at løse kundernes forretningsproblemer. Han arbejder primært i computervisionsområdet med fokus på at give AWS-kunder mulighed for distribueret træning og aktiv læring.
Vidya Sagar Ravipati er leder på Amazon Machine Learning Solutions Lab, hvor han udnytter sin store erfaring med distribuerede systemer i stor skala og sin passion for maskinlæring til at hjælpe AWS-kunder på tværs af forskellige brancher med at accelerere deres AI og cloud-adoption. Tidligere var han Machine Learning Engineer i Connectivity Services hos Amazon, som hjalp med at bygge personalisering og forudsigende vedligeholdelsesplatforme.
Jeremy Feltracco er softwareudviklingsingeniør med th Amazon Machine Learning Solutions Lab hos Amazon Web Services. Han bruger sin baggrund inden for computervision, robotteknologi og maskinlæring til at hjælpe AWS-kunder med at accelerere deres AI-adoption.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- Platoblokkæde. Web3 Metaverse Intelligence. Viden forstærket. Adgang her.
- Kilde: https://aws.amazon.com/blogs/machine-learning/using-amazon-sagemaker-with-point-clouds-part-1-ground-truth-for-3d-labeling/
- :er
- $OP
- 000
- 1
- 10
- 100
- 1996
- 2D
- 3d
- 7
- 9
- a
- I stand
- Om
- over
- fremskynde
- adgang
- tilgængelig
- Konto
- tværs
- aktiv
- Desuden
- adresse
- Vedtagelse
- Efter
- forude
- AI
- justeret
- Alle
- tillader
- allerede
- Amazon
- Amazon Cognito
- Amazon SageMaker
- Amazon SageMaker Ground Truth
- Amazon Web Services
- ,
- nogen
- app
- Indløs
- passende
- cirka
- arkitektur
- ER
- områder
- omkring
- Array
- AS
- forbundet
- At
- augmented
- Augmented Reality
- autonom
- tilgængelighed
- AWS
- AWS CloudFormation
- tilbage
- baggrund
- BE
- fordi
- bliver
- før
- være
- jf. nedenstående
- mellem
- Blå
- Boks
- Bringe
- browser
- bygge
- Bygning
- bus
- virksomhed
- .
- by
- kaldet
- værelse
- CAN
- fange
- Optagelse
- bil
- biler
- tilfælde
- Celler
- center
- udfordrende
- kontrollere
- Vælg
- klasse
- klasser
- tættere
- Cloud
- cloud adoption
- kode
- Fælles
- Virksomheder
- fuldføre
- Compute
- computer
- Computer Vision
- trygt
- Connectivity
- Konsol
- indeholder
- indeholder
- Konvertering
- konverteringer
- konvertere
- konverteret
- koordinere
- Koste
- omkostningseffektiv
- dæksel
- skabe
- oprettet
- skaber
- skabelse
- Kunder
- CX
- data
- dataforsker
- datasæt
- Datoer
- dyb
- dyb læring
- definerede
- definerer
- demonstrere
- demonstreret
- demonstrerer
- indsætte
- indsat
- implementering
- dybde
- beskrive
- beskrevet
- Detektion
- bestemmelse
- Udvikling
- udvikler
- Enheder
- forskel
- forskellige
- svært
- retning
- diskutere
- distribueret
- distribuerede systemer
- distribueret træning
- dokumentation
- Dont
- downloade
- kørsel
- e
- hver
- nemt
- muliggør
- Endpoint
- ingeniør
- sikre
- Miljø
- især
- væsentlig
- etc.
- Endog
- præcist nok
- eksempel
- forventninger
- forventet
- erfaring
- vender
- få
- felt
- Fields
- Figur
- File (Felt)
- Filer
- slut
- Fornavn
- flydende
- flow
- Fokus
- fokusering
- efter
- Til
- formular
- format
- Videresend
- fundet
- FRAME
- Gratis
- fra
- forsiden
- funktion
- fusion
- FX
- generere
- genereret
- få
- gif
- Git
- GitHub
- Go
- Goes
- Grøn
- Ground
- Dyrkning
- håndtere
- Have
- have
- Overskrift
- hjælpe
- hjulpet
- hjælpsom
- Hosting
- HOURS
- Hvordan
- How To
- Men
- HTML
- HTTPS
- i
- ICON
- identificeret
- billede
- billeder
- Imaging
- gennemføre
- vigtigt
- in
- I andre
- omfatter
- omfatter
- Herunder
- øget
- stigende
- indekser
- industrien
- oplysninger
- indgang
- instans
- anvisninger
- interesse
- interesseret
- grænseflade
- IT
- ITS
- Job
- Karriere
- jpg
- json
- Venlig
- Kend
- etiket
- mærkning
- Etiketter
- storstilet
- laser
- lancere
- LÆR
- læring
- Forlade
- Udnytter
- lys
- ligesom
- Liste
- belastning
- belastninger
- placeret
- placering
- Se
- leder
- UDSEENDE
- maskine
- machine learning
- vedligeholdelse
- lave
- maerker
- lykkedes
- leder
- administrerer
- kortlægning
- Matrix
- midler
- måling
- metode
- minutter
- ML
- Mobil
- mobilenheder
- model
- modeller
- Overvåg
- mere
- mest
- bevægelse
- flere
- navn
- Som hedder
- Behov
- Ny
- næste
- notesbog
- nummer
- bedøvet
- objekt
- Objektdetektion
- objekter
- of
- on
- ONE
- åbent
- OpenCV
- betjene
- Option
- Andet
- output
- samlet
- egen
- side
- Parallel
- parametre
- del
- særlig
- lidenskab
- sti
- Udfør
- Personalisering
- fysisk
- pipeline
- pixel
- Platforme
- plato
- Platon Data Intelligence
- PlatoData
- Punkt
- punkter
- Portal
- position
- positioner
- positiv
- Indlæg
- forudsige
- Forbered
- tidligere
- tidligere
- primært
- private
- problemer
- behandle
- produktion
- profilering
- Progress
- projekt
- Fremskrivning
- forudsat
- giver
- spænder
- Sats
- Raw
- Læs
- Læsning
- klar
- realtid
- Reality
- optagelse
- Rød
- benævnt
- afspejles
- region
- relaterede
- relevant
- resterende
- Fjern
- erstatte
- repræsentere
- påkrævet
- Kræver
- ressource
- Ressourcer
- Resultater
- afkast
- gennemgå
- RGB
- robotteknik
- roller
- tag
- RÆKKE
- Kør
- kører
- s
- sagemaker
- samme
- Gem
- scene
- scener
- Videnskabsmand
- Søg
- Anden
- Sektion
- segmentering
- senior
- sensorer
- Sequence
- Series
- Tjenester
- setup
- Kort
- bør
- Vis
- vist
- Shows
- side
- Signal
- siden
- enkelt
- So
- Software
- softwareudvikling
- løsninger
- Løsninger
- nogle
- Kilde
- Space
- rum
- specifikt
- stable
- standard
- starte
- Trin
- Steps
- struktur
- forsyne
- support
- Understøttet
- Understøtter
- overflade
- Systemer
- bord
- Tag
- tager
- rettet mod
- opgaver
- skabelon
- prøve
- at
- oplysninger
- deres
- Disse
- tre
- Gennem
- tid
- titlen
- til
- værktøj
- top
- I alt
- Sporing
- Tog
- Kurser
- Transform
- Oversættelse
- behandle
- lastbil
- tutorial
- typisk
- typisk
- ui
- under
- forstå
- forståelse
- enestående
- us
- brug
- Bruger
- Brugergrænseflade
- VALIDATE
- Værdier
- Vast
- køretøj
- Køretøjer
- verificere
- vertikaler
- video
- Specifikation
- visninger
- vision
- visualisering
- Vej..
- web
- webservices
- GODT
- som
- mens
- WHO
- Wikipedia
- vilje
- med
- inden for
- ord
- arbejdstager
- Workforce
- virker
- skriver
- skriv kode
- skriftlig
- X
- yaml
- Du
- Din
- zephyrnet