Zephyrnet-logo

Implementeer een multi-object tracking-oplossing op een aangepaste dataset met Amazon SageMaker | Amazon-webservices

Datum:

De vraag naar multi-object tracking (MOT) in video-analyse is aanzienlijk toegenomen in veel industrieën, zoals live sport, productie en verkeersmonitoring. Bij live sport kan MOT bijvoorbeeld voetballers in realtime volgen om fysieke prestaties, zoals realtime snelheid en bewegingsafstand, te analyseren.

Sinds de introductie in 2021, ByteTrack blijft een van de best presterende methoden op verschillende benchmarkgegevenssets, een van de nieuwste modelontwikkelingen in APK-toepassing. In ByteTrack stelde de auteur een eenvoudige, effectieve en generieke data-associatiemethode voor (ook wel BYTE genoemd) voor het matchen van detectieboxen en tracklets. In plaats van alleen de detectieboxen met een hoge score te behouden, behoudt het ook de detectieboxen met een lage score, die kunnen helpen bij het herstellen van ongeëvenaarde tracklets met deze detectieboxen met een lage score wanneer occlusie, bewegingsonscherpte of verandering van grootte optreedt. De BYTE-associatiestrategie kan ook worden gebruikt in andere op Re-ID gebaseerde trackers, zoals Eerlijke APK. De experimenten lieten verbeteringen zien ten opzichte van de vanilla tracker-algoritmen. Zo behaalde FairMOT een verbetering van 1.3% op MOTA (FairMOT: over de eerlijkheid van detectie en heridentificatie bij het volgen van meerdere objecten), wat een van de belangrijkste statistieken is in de MOT-taak bij het toepassen van BYTE in gegevensassociatie.

Bij de post Train en implementeer een FairMOT-model met Amazon SageMaker, hebben we gedemonstreerd hoe je een FairMOT-model traint en implementeert Amazon Sage Maker op de APK challenge datasets. Wanneer u een APK-oplossing toepast in praktijksituaties, moet u een APK-model trainen of verfijnen op een aangepaste dataset. Met Amazon SageMaker Grondwaarheid, kunt u effectief labels maken op uw eigen videodataset.

In navolging van het vorige bericht hebben we de volgende bijdragen en wijzigingen toegevoegd:

  • Genereer labels voor een aangepaste videodataset met behulp van Ground Truth
  • Bewerk het door Ground Truth gegenereerde label voor zodat het compatibel is met ByteTrack en andere MOT-oplossingen
  • Train het ByteTrack-algoritme met een SageMaker-trainingsbaan (met de mogelijkheid om verleng een vooraf gebouwde container)
  • Implementeer het getrainde model met verschillende implementatieopties, waaronder asynchrone inferentie

We bieden ook de codevoorbeeld op GitHub, dat SageMaker gebruikt voor labelen, bouwen, trainen en inferentie.

SageMaker is een volledig beheerde service die elke ontwikkelaar en datawetenschapper de mogelijkheid biedt om snel machine learning (ML)-modellen voor te bereiden, te bouwen, te trainen en in te zetten. SageMaker biedt verschillende ingebouwde algoritmen en containerimages die u kunt gebruiken om training en implementatie van ML-modellen te versnellen. Daarnaast kunnen aangepaste algoritmen zoals ByteTrack ook worden ondersteund via op maat gemaakte Docker-containerafbeeldingen. Voor meer informatie over het bepalen van het juiste niveau van betrokkenheid bij containers, zie Docker-containers gebruiken met SageMaker.

SageMaker biedt tal van opties voor modelimplementatie, zoals real-time gevolgtrekking, serverloze gevolgtrekking en asynchrone gevolgtrekking. In dit bericht laten we zien hoe u een trackingmodel met verschillende implementatieopties implementeert, zodat u de geschikte implementatiemethode kunt kiezen in uw eigen use-case.

Overzicht van de oplossing

Onze oplossing bestaat uit de volgende stappen op hoog niveau:

  1. Label de dataset voor tracking, met een selectiekader voor elk object (bijvoorbeeld voetganger, auto, enzovoort). Stel de resources in voor de ontwikkeling en uitvoering van ML-code.
  2. Train een ByteTrack-model en stem hyperparameters af op een aangepaste dataset.
  3. Implementeer het getrainde ByteTrack-model met verschillende implementatieopties, afhankelijk van uw use case: real-time verwerking, asynchrone of batchvoorspelling.

Het volgende diagram illustreert de architectuur in elke stap.
overzicht_flow

Voorwaarden

Voordat u aan de slag gaat, moet u aan de volgende vereisten voldoen:

  1. Maak een AWS-account aan of gebruik een bestaand AWS-account.
  2. We raden aan om de broncode uit te voeren in de us-east-1 Regio.
  3. Zorg ervoor dat u minimaal één GPU-instantie hebt (bijvoorbeeld ml.p3.2xlarge voor enkele GPU-training, of ml.p3.16xlarge) voor de gedistribueerde trainingstaak. Andere typen GPU-instanties worden ook ondersteund, met verschillende prestatieverschillen.
  4. Zorg ervoor dat u minimaal één GPU-instantie hebt (bijvoorbeeld ml.p3.2xlarge) voor inferentie-eindpunt.
  5. Zorg ervoor dat u minimaal één GPU-instantie hebt (bijvoorbeeld ml.p3.2xlarge) voor het uitvoeren van batchvoorspelling met verwerkingstaken.

Als dit de eerste keer is dat u SageMaker-services uitvoert op de bovengenoemde instantietypen, moet u dit misschien doen een quotumverhoging aanvragen voor de vereiste gevallen.

Stel uw bronnen in

Nadat u aan alle vereisten hebt voldaan, bent u klaar om de oplossing te implementeren.

  1. Maak een SageMaker-notebookinstantie. Voor deze taak raden we aan om de ml.t3.medium instantietype. Tijdens het uitvoeren van de code gebruiken we docker build om de SageMaker-trainingsafbeelding uit te breiden met de ByteTrack-code (de docker build opdracht wordt lokaal uitgevoerd binnen de notebook-instantieomgeving). Daarom raden we aan om de volumegrootte te vergroten tot 100 GB (standaard volumegrootte tot 5 GB) vanuit de geavanceerde configuratie-opties. Voor jouw AWS Identiteits- en toegangsbeheer (IAM)-rol, kies een bestaande rol of maak een nieuwe rol aan en koppel de AmazonS3FullAccess, AmazonSNSFullAccess, AmazonSageMakerFullAccess en AmazonElasticContainerRegistryPublicFullAccess beleid voor de functie.
  2. Kloon het GitHub repo aan de /home/ec2-user/SageMaker map op de notebook-instantie die u hebt gemaakt.
  3. creëren een nieuwe Amazon eenvoudige opslagservice (Amazon S3) emmer of gebruik een bestaande emmer.

Label de dataset

In het gegevensvoorbereiding.ipynb notebook, downloaden we een MOT16-testvideobestand en splitsen we het videobestand op in kleine videobestanden met 200 frames. Vervolgens uploaden we die videobestanden naar de S3-bucket als gegevensbron voor labeling.

Zie voor het labelen van de dataset voor de APK-taak Aan de slag. Wanneer de labeltaak is voltooid, hebben we toegang tot de volgende annotatiemap op de taakuitvoerlocatie in de S3-bucket.

De manifests map moet een output map als we klaar zijn met het labelen van alle bestanden. We kunnen het bestand zien output.manifest in de output map. Dit manifestbestand bevat informatie over de video- en videotrackinglabels die u later kunt gebruiken om een ​​model te trainen en te testen.

Train een ByteTrack-model en stem hyperparameters af op de aangepaste dataset

Om uw ByteTrack-model te trainen, gebruiken we de bytetrack-training.ipynb notitieboekje. Het notitieboek bestaat uit de volgende stappen:

  1. Initialiseer de SageMaker-instelling.
  2. Voorbewerking van gegevens uitvoeren.
  3. Bouw en push de containerimage.
  4. Definieer een trainingstaak.
  5. Start de trainingstaak.
  6. Stem hyperparameters af.

Vooral bij gegevensvoorverwerking moeten we de gelabelde dataset met het Ground Truth-uitvoerformaat converteren naar de MOT17-formaat dataset, en de MOT17-formaat dataset converteren naar een MSCOCO-formaat dataset (zoals weergegeven in de volgende afbeelding), zodat we een YOLOX kunnen trainen model op de aangepaste dataset. Omdat we zowel de dataset in MOT-indeling als de dataset in MSCOCO-indeling behouden, kunt u andere MOT-algoritmen trainen zonder detectie en tracking te scheiden van de dataset in MOT-indeling. U kunt de detector eenvoudig wijzigen in andere algoritmen, zoals YOLO7, om uw bestaande algoritme voor objectdetectie te gebruiken.

Implementeer het getrainde ByteTrack-model

Nadat we het YOLOX-model hebben getraind, zetten we het getrainde model in voor inferentie. SageMaker biedt verschillende opties voor modelimplementatie, zoals real-time gevolgtrekking, asynchrone gevolgtrekking, serverloze gevolgtrekking en batch gevolgtrekking. In onze post gebruiken we de voorbeeldcode voor realtime gevolgtrekking, asynchrone gevolgtrekking en batchgevolgtrekking. U kunt uit deze opties de geschikte code kiezen op basis van uw eigen zakelijke vereisten.

Omdat SageMaker-batchtransformatie vereist dat de gegevens worden gepartitioneerd en opgeslagen op Amazon S3 als invoer en de aanroepen tegelijkertijd naar de inferentie-eindpunten worden verzonden, voldoet het niet aan de vereisten in objecttraceringstaken waarbij de doelen op een sequentiële manier moeten worden verzonden . Daarom gebruiken we de SageMaker-batchtransformatietaken niet om de batchgevolgtrekking uit te voeren. In dit voorbeeld gebruiken we SageMaker-verwerkingstaken om batchgevolgtrekkingen uit te voeren.

De volgende tabel geeft een overzicht van de configuratie voor onze inferentietaken.

Inferentie type payload Verwerkingstijd Automatische schaalverdeling
Real-time Tot 6 MB Tot 1 minuut Het minimale aantal instanties is 1 of hoger
Asynchronous Tot 1 GB Tot 15 minuten Het minimale aantal exemplaren kan nul zijn
Batch (met verwerkingstaak) Geen limiet Geen limiet Niet ondersteund

Implementeer een real-time deductie-eindpunt

Om een ​​real-time deductie-eindpunt te implementeren, kunnen we het bytetrack-inferentie-yolox.ipynb notitieboekje. We scheiden ByteTrack-inferentie in objectdetectie en tracking. In het inferentie-eindpunt voeren we alleen het YOLOX-model uit voor objectdetectie. In de notebook maken we een trackingobject, ontvangen we het resultaat van objectdetectie van het inferentie-eindpunt en werken we trackers bij.

We gebruiken SageMaker PyTorchModel SDK om als volgt een ByteTrack-model te maken en te implementeren:

from sagemaker.pytorch.model import PyTorchModel pytorch_model = PyTorchModel( model_data=s3_model_uri, role=role, source_dir="sagemaker-serving/code", entry_point="inference.py", framework_version="1.7.1", py_version="py3",
) endpoint_name =<endpint name>
pytorch_model.deploy( initial_instance_count=1, instance_type="ml.p3.2xlarge", endpoint_name=endpoint_name
)

Nadat we het model met succes op een eindpunt hebben geïmplementeerd, kunnen we het inferentie-eindpunt aanroepen met het volgende codefragment:

with open(f"datasets/frame_{frame_id}.png", "rb") as f: payload = f.read() response = sm_runtime.invoke_endpoint( EndpointName=endpoint_name, ContentType="application/x-image", Body=payload
)
outputs = json.loads(response["Body"].read().decode())

We voeren de trackingtaak uit aan de clientzijde nadat we het detectieresultaat van het eindpunt hebben geaccepteerd (zie de volgende code). Door de trackingresultaten in elk frame te tekenen en op te slaan als een trackingvideo, kunt u het trackingresultaat op de trackingvideo bevestigen.

aspect_ratio_thresh = 1.6
min_box_area = 10
tracker = BYTETracker( frame_rate=30, track_thresh=0.5, track_buffer=30, mot20=False, match_thresh=0.8 ) online_targets = tracker.update(torch.as_tensor(outputs[0]), [height, width], (800, 1440))
online_tlwhs = []
online_ids = []
online_scores = []
for t in online_targets: tlwh = t.tlwh tid = t.track_id vertical = tlwh[2] / tlwh[3] > aspect_ratio_thresh if tlwh[2] * tlwh[3] > min_box_area and not vertical: online_tlwhs.append(tlwh) online_ids.append(tid) online_scores.append(t.score) results.append( f"{frame_id},{tid},{tlwh[0]:.2f},{tlwh[1]:.2f},{tlwh[2]:.2f},{tlwh[3]:.2f},{t.score:.2f},-1,-1,-1n" )
online_im = plot_tracking( frame, online_tlwhs, online_ids, frame_id=frame_id + 1, fps=1. / timer.average_time
)

Implementeer een asynchroon deductie-eindpunt

Asynchrone inferentie van SageMaker is de ideale optie voor verzoeken met grote payloads (tot 1 GB), lange verwerkingstijden (tot 1 uur) en bijna realtime latentievereisten. Voor MOT-taken is het gebruikelijk dat een videobestand groter is dan 6 MB, wat de payloadlimiet is van een real-time eindpunt. Daarom implementeren we een asynchroon inferentie-eindpunt. Verwijzen naar Asynchrone gevolgtrekking voor meer informatie over het implementeren van een asynchroon eindpunt. We kunnen het model dat is gemaakt voor het real-time eindpunt hergebruiken; voor dit bericht hebben we een trackingproces in het inferentiescript geplaatst, zodat we het uiteindelijke trackingresultaat rechtstreeks voor de invoervideo kunnen krijgen.

Om scripts gerelateerd aan ByteTrack op het eindpunt te gebruiken, moeten we het trackingscript en model in dezelfde map plaatsen en de map comprimeren als de model.tar.gz -bestand en upload het vervolgens naar de S3-bucket voor het maken van modellen. Het volgende diagram toont de structuur van model.tar.gz.

We moeten de aanvraaggrootte, responsgrootte en responstime-out expliciet instellen als de omgevingsvariabelen, zoals weergegeven in de volgende code. De naam van de omgevingsvariabele varieert afhankelijk van het framework. Voor meer details, zie Een asynchroon inferentie-eindpunt maken.

pytorch_model = PyTorchModel( model_data=s3_model_uri, role=role, entry_point="inference.py", framework_version="1.7.1", sagemaker_session=sm_session, py_version="py3", env={ 'TS_MAX_REQUEST_SIZE': '1000000000', #default max request size is 6 Mb for torchserve, need to update it to support the 1GB input payload 'TS_MAX_RESPONSE_SIZE': '1000000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '900' # max timeout is 15mins (900 seconds) }
) pytorch_model.create( instance_type="ml.p3.2xlarge",
)

Wanneer we het asynchrone eindpunt aanroepen, sturen we in plaats van de payload in het verzoek de Amazon S3-URL van de invoervideo. Wanneer de modelinferentie klaar is met het verwerken van de video, worden de resultaten opgeslagen op het S3-uitvoerpad. Wij kunnen configureren Amazon eenvoudige meldingsservice (Amazon SNS) onderwerpen zodat wanneer de resultaten klaar zijn, wij een SNS bericht als notificatie kunnen ontvangen.

Voer batchgevolgtrekking uit met SageMaker-verwerking

Voor videobestanden groter dan 1 GB gebruiken we een SageMaker-verwerkingstaak om batchinferentie uit te voeren. We definiëren een aangepaste Docker-container om een ​​SageMaker-verwerkingstaak uit te voeren (zie de volgende code). We tekenen het trackingresultaat op de invoervideo. Je kunt de resultaatvideo vinden in de S3-bucket gedefinieerd door s3_output.

from sagemaker.processing import ProcessingInput, ProcessingOutput
script_processor.run( code='./container-batch-inference/predict.py', inputs=[ ProcessingInput(source=s3_input, destination="/opt/ml/processing/input"), ProcessingInput(source=s3_model_uri, destination="/opt/ml/processing/model"), ], outputs=[ ProcessingOutput(source='/opt/ml/processing/output', destination=s3_output), ]
)

Opruimen

Om onnodige kosten te voorkomen, verwijdert u de resources die u als onderdeel van deze oplossing hebt gemaakt, inclusief het inferentie-eindpunt.

Conclusie

Dit bericht demonstreerde hoe een trackingoplossing voor meerdere objecten op een aangepaste dataset kan worden geïmplementeerd met behulp van een van de geavanceerde algoritmen op SageMaker. We hebben ook drie implementatieopties op SageMaker gedemonstreerd, zodat u de optimale optie voor uw eigen bedrijfsscenario kunt kiezen. Als de use case een lage latentie vereist en een model nodig heeft om op een edge-apparaat te worden geïmplementeerd, kunt u de MOT-oplossing aan de edge implementeren met AWS-panorama.

Raadpleeg voor meer informatie Multi Object Tracking met behulp van YOLOX + BYTE-TRACK en data-analyse.


Over de auteurs

Gorden Wang, is een Senior AI/ML-specialist TAM bij AWS. Hij ondersteunt strategische klanten met best practices op het gebied van AI/ML in vele sectoren. Hij is gepassioneerd door computervisie, NLP, generatieve AI en MLOps. In zijn vrije tijd houdt hij van hardlopen en wandelen.

Yanwei Cui, PhD, is een Senior Machine Learning Specialist Solutions Architect bij AWS. Hij startte onderzoek naar machine learning bij IRISA (Research Institute of Computer Science and Random Systems), en heeft meerdere jaren ervaring met het bouwen van door kunstmatige intelligentie aangedreven industriële toepassingen voor computervisie, natuurlijke taalverwerking en online voorspelling van gebruikersgedrag. Bij AWS deelt hij de domeinexpertise en helpt hij klanten om zakelijk potentieel te ontsluiten en bruikbare resultaten te behalen met machine learning op schaal. Naast zijn werk houdt hij van lezen en reizen.

Melanie Li, PhD, is een Senior AI/ML-specialist TAM bij AWS in Sydney, Australië. Ze helpt zakelijke klanten om oplossingen te bouwen die gebruik maken van de allernieuwste AI/ML-tools op AWS en biedt begeleiding bij het ontwerpen en implementeren van machine learning-oplossingen met best practices. In haar vrije tijd houdt ze ervan om buiten de natuur te verkennen en tijd door te brengen met familie en vrienden.

Guang Yang, is een Senior toegepaste wetenschapper bij het Amazon ML Solutions Lab, waar hij met klanten in verschillende branches werkt en creatieve probleemoplossing toepast om waarde voor klanten te genereren met ultramoderne ML/AI-oplossingen.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?