Zephyrnet-logo

Roestdetectie met behulp van machine learning op AWS

Datum:

Visuele inspectie van industriële omgevingen is een veel voorkomende vereiste in zware industrieën, zoals transport, constructie en scheepsbouw, en vereist doorgaans gekwalificeerde experts om de inspectie uit te voeren. Inspectielocaties zijn vaak afgelegen of in ongunstige omgevingen die mensen in gevaar brengen, zoals bruggen, wolkenkrabbers en offshore boorplatforms.

Veel van deze industrieën hebben te maken met enorme metalen oppervlakken en ruwe omgevingen. Een veelvoorkomend probleem in deze industrieën is metaalcorrosie en roest. Hoewel corrosie en roest in verschillende industrieën door elkaar worden gebruikt (we gebruiken de termen ook door elkaar in dit bericht), zijn deze twee verschijnselen verschillend. Zie voor meer informatie over de verschillen tussen corrosie en roest en de verschillende mate van dergelijke schade Verschil tussen roest en corrosie en Stadia van roest.

Verschillende niveaus en soorten roest kunnen ook resulteren in verschillende kleuren voor de beschadigde gebieden. Als je genoeg afbeeldingen hebt van verschillende soorten roest, kun je de technieken gebruiken die in dit bericht worden beschreven om verschillende soorten roest en corrosie te detecteren.

Roest vormt een ernstig risico voor de bedrijfsveiligheid. De kosten die gepaard gaan met onvoldoende bescherming tegen corrosie kunnen rampzalig zijn. Conventioneel wordt corrosiedetectie gedaan met behulp van visuele inspectie van constructies en faciliteiten door materiedeskundigen. Inspectie kan betrekking hebben op directe interpretatie ter plaatse of het verzamelen van foto's en de offline interpretatie ervan om schade te evalueren. Vooruitgang op het gebied van computer vision en machine learning (ML) maakt het mogelijk om corrosiedetectie te automatiseren om de kosten en risico's bij het uitvoeren van dergelijke inspecties te verminderen.

In dit bericht beschrijven we hoe u een serverloze pijplijn kunt bouwen om ML-modellen voor corrosiedetectie te maken met Amazon Sage Maker en andere AWS-services. Het resultaat is een volledig functionerende app om u te helpen metaalcorrosie op te sporen.

We zullen de volgende AWS-services gebruiken:

  • Amazon API-gateway is een volledig beheerde service waarmee ontwikkelaars op elke schaal eenvoudig API's kunnen maken, publiceren, onderhouden, bewaken en beveiligen.
  • AWS Lambda is een computerservice waarmee u code kunt uitvoeren zonder servers in te richten of te beheren. Lambda voert uw code alleen uit wanneer deze wordt geactiveerd en schaalt automatisch, van een paar verzoeken per dag tot duizenden per seconde.
  • Amazon Sage Maker is een volledig beheerde service die ontwikkelaars en datawetenschappers de tools biedt om verschillende typen ML-modellen te bouwen, op te leiden en in te zetten.
  • AWS Stap Functies stelt u in staat om verschillende AWS-services te coördineren in een serverloze workflow. U kunt werkstromen ontwerpen en uitvoeren waarbij de uitvoer van de ene stap fungeert als invoer voor de volgende stap, terwijl foutafhandeling in de werkstroom wordt geïntegreerd.

Overzicht oplossingen

De corrosiedetectieoplossing omvat een op React gebaseerde webapplicatie waarmee u een of meer afbeeldingen van metaalcorrosie kunt kiezen om de detectie uit te voeren. Met de applicatie kunt u het ML-model trainen en het model implementeren op SageMaker-hostingservices om inferentie uit te voeren.

Het volgende diagram toont de oplossingsarchitectuur.

De oplossing ondersteunt de volgende gebruiksscenario's:

  • Corrosiedetectie op aanvraag uitvoeren
  • Het uitvoeren van batchcorrosiedetectie
  • ML-modellen trainen met behulp van Step Functions-workflows

Hieronder volgen de stappen voor elke workflow:

  • Corrosiedetectie op aanvraag - Een afbeelding die door de applicatiegebruiker is gekozen, wordt geüpload naar een Amazon eenvoudige opslagservice (Amazon S3) emmer. De image S3-objectsleutel wordt verzonden naar een API die is geïmplementeerd op API Gateway. De Lambda-functie van de API roept een SageMaker-eindpunt op om corrosie in de geüploade afbeelding te detecteren, en genereert een nieuwe afbeelding en slaat deze op in een S3-bucket, die verder wordt weergegeven aan de voorkant voor analyse.
  • Detectie van batchcorrosie - De gebruiker uploadt een .zip-bestand met afbeeldingen naar een S3-bucket. Een Lambda-functie geconfigureerd als een Amazon S3-trigger wordt aangeroepen. De functie voert batchcorrosiedetectie uit door een gevolgtrekking uit te voeren met behulp van het SageMaker-eindpunt. De resulterende nieuwe afbeeldingen worden weer opgeslagen in Amazon S3. Deze afbeeldingen kunnen aan de voorkant worden bekeken.
  • Het ML-model trainen - Met de webapplicatie kunt u een nieuw ML-model trainen met behulp van Step Functions en SageMaker. In het volgende diagram ziet u de modeltraining en de indeling van endpointhosting. De Step Functions-workflow wordt gestart door het aanroepen van de StartTrainingJob API ondersteund door de Amazone staten taal​ Nadat een model is gemaakt, wordt het CreateEndpoint De API van SageMaker wordt aangeroepen, die een nieuw SageMaker-eindpunt maakt en het nieuwe ML-model host. Een checkpoint-stap zorgt ervoor dat het endpoint volledig is ingericht voordat de werkstroom wordt beëindigd.

Algoritme-opties voor machine learning

Corrosiedetectie wordt conventioneel gedaan door getrainde professionals met behulp van visuele inspectie. In uitdagende omgevingen, zoals offshore boorplatforms, kan visuele inspectie zeer riskant zijn. Het automatiseren van het inspectieproces met behulp van computervisie-modellen die op drones zijn gemonteerd, is een nuttig alternatief. U kunt verschillende ML-benaderingen gebruiken voor corrosiedetectie. Afhankelijk van de beschikbare gegevens en toepassingsdoelen, kunt u gebruik maken van deep learning (inclusief objectdetectie of semantische segmentatie) of kleurclassificatie met behulp van algoritmen zoals Extreme Gradient Boosting (XGBoost). We bespreken beide benaderingen in dit bericht, met de nadruk op de XGBoost-methode, en behandelen de voordelen en beperkingen van beide benaderingen. Andere methoden, zoals clustering zonder toezicht, kunnen ook van toepassing zijn, maar worden in dit bericht niet besproken.

Diepgaande leeraanpak

In de afgelopen jaren is deep learning gebruikt voor automatische corrosiedetectie. Afhankelijk van de beschikbaarheid van gegevens en het type gebruikte labels, kunt u gebruiken object detectie or semantische segmentatie om gecorrodeerde gebieden in metalen constructies te detecteren. Hoewel deep learning-technieken zeer effectief zijn voor tal van gebruiksscenario's, maakt de complexe aard van corrosiedetectie (het ontbreken van specifieke vormen) deep learning-methoden soms minder effectief voor het detecteren van gecorrodeerde gebieden.

We leggen in meer detail enkele van de uitdagingen uit die komen kijken bij het gebruik van deep learning voor dit probleem en stellen een alternatieve manier voor met behulp van een eenvoudigere ML-methode die niet de omslachtige labeling vereist die vereist is voor deep learning-methoden. Als u een gegevensset hebt die is geannoteerd met rechthoekige selectiekaders, kunt u een object detectie-algoritme.

Het meest uitdagende aspect van dit probleem bij het gebruik van deep learning is dat gecorrodeerde delen van structuren geen voorspelbare vormen hebben, waardoor het moeilijk is om een ​​uitgebreid deep learning-model te trainen met behulp van objectdetectie of semantische segmentatie. Als u echter voldoende geannoteerde afbeeldingen heeft, kunt u deze willekeurig uitziende patronen met een redelijke nauwkeurigheid detecteren. U kunt bijvoorbeeld het gecorrodeerde gebied in de volgende afbeelding (weergegeven in de rode rechthoek) detecteren met behulp van een objectdetectie- of semantisch segmentatiemodel met de juiste training en gegevens.

Het meer uitdagende probleem bij het uitvoeren van corrosiedetectie met behulp van deep learning is het feit dat de gehele metalen structuur vaak kan worden gecorrodeerd (zoals in de volgende afbeelding), en deep learning-modellen verwarren deze gecorrodeerde structuren met de niet-gecorrodeerde omdat de randen en vormen van volledig gecorrodeerde constructies zijn vergelijkbaar met een normale gezonde constructie zonder corrosie. Dit kan voor elke constructie het geval zijn en niet alleen voor buizen.

  

Kleurclassificatiebenadering (met behulp van het XGBoost-algoritme)

Een andere manier om naar het corrosiedetectieprobleem te kijken, is door het te behandelen als een kleurclassificatie op pixelniveau, die veelbelovend is gebleken ten opzichte van diepgaande leermethoden, zelfs met kleine trainingsdatasets. We gebruiken een eenvoudige XGBoost-methode, maar u kunt elk ander classificatie-algoritme gebruiken (zoals Random Forest).

Het nadeel van deze benadering is dat donkere pixelkleuren in afbeeldingen ten onrechte kunnen worden geïnterpreteerd als corrosie. Lichtomstandigheden en schaduwen kunnen ook van invloed zijn op de uitkomst van deze benadering. Deze methode leverde echter betere resultaten op in vergelijking met deep learning-benaderingen, omdat deze methode niet wordt beïnvloed door de vorm van structuren of de mate van corrosie. De nauwkeurigheid kan worden verbeterd door uitgebreidere gegevens te gebruiken.

Als u afbeeldingen op pixelniveau wilt interpreteren, is het andere alternatief het gebruik van semantische segmentatie, waarvoor aanzienlijke etikettering nodig is. Onze voorgestelde methode biedt een oplossing om deze vervelende etikettering te voorkomen.

De rest van dit bericht is gericht op het gebruik van de kleurclassificatie (met behulp van XGBoost). We leggen de stappen uit die nodig zijn om gegevens voor deze aanpak voor te bereiden en hoe u een dergelijk model op SageMaker kunt trainen met behulp van de bijbehorende webapplicatie.

Maak trainings- en validatiedatasets

Wanneer je XGBoost gebruikt, heb je de mogelijkheid om trainingsdatasets te maken van zowel geannoteerde als handmatig bijgesneden en niet-geannoteerde afbeeldingen. Het kleurclassificatie-algoritme (XGBoost) vereist dat u de RGB-waarden extraheert van elke pixel in de afbeelding die is gelabeld als schoon of gecorrodeerd.

Wij hebben gemaakt Jupyter notitieboekjes om u te helpen bij het maken van trainings- en validatiedatasets, afhankelijk van of u geannoteerde of niet-geannoteerde afbeeldingen gebruikt.

Maak trainings- en validatiedatasets voor geannoteerde afbeeldingen

Als u afbeeldingen van corrosie hebt geannoteerd, kunt u deze programmatisch bijsnijden om kleinere afbeeldingen te maken, zodat u alleen de schone of gecorrodeerde delen van de afbeelding hebt. U vormt de kleine bijgesneden afbeeldingen opnieuw in een 2D-array en stapelt ze samen om uw dataset samen te stellen. Om gegevens van betere kwaliteit te garanderen, snijdt de volgende code de kleine afbeeldingen verder uit om alleen het centrale gedeelte van de afbeelding te kiezen.

Om u snel op weg te helpen, hebben we een voorbeeld trainingsdataset (5 MB) die u kunt gebruiken om trainings- en validatiedatasets te maken. U kunt deze gegevenssets vervolgens gebruiken om een ​​nieuw ML-model te trainen en te implementeren. We hebben de voorbeeldtrainingsdataset gemaakt op basis van een paar openbare afbeeldingen van pexels.com.

Laten we het proces begrijpen van het maken van een trainingsdataset op basis van geannoteerde afbeeldingen. We hebben een notitieboek gemaakt om u te helpen bij het maken van gegevens. Hieronder volgen de stappen die nodig zijn om de trainings- en validatiegegevens te creëren.

Snijd geannoteerde afbeeldingen bij

De eerste stap is het bijsnijden van de geannoteerde afbeeldingen.

  1. We lezen alle geannoteerde afbeeldingen en de XML-bestanden met de annotatie-informatie (zoals selectiekaders en klassenaam). Zie de volgende code:
    xml_paths = get_file_path_list(xml_path)
    images_names = list(set(get_filename_list(images_path)))
    

  1. Omdat de invoerafbeeldingen geannoteerd zijn, extraheren we de klassenamen en begrenzingskaders voor elke geannoteerde afbeelding:
    for idx, x in enumerate(xml_paths):
    single_imgfile_path = images_path + '\'+ x.split('\')[-1].split('.')[0] +'.JPG'
    image = Image.open(single_imgfile_path)
    tree = ET.parse(x)
    root = tree.getroot()
    for idx2, rt in enumerate(root.findall('object')):
    name = rt.find('name').text
    if name in classes_to_use:
    xmin = int(rt.find('bndbox').find('xmin').text)
    ymin = int(rt.find('bndbox').find('ymin').text)
    xmax = int(rt.find('bndbox').find('xmax').text)
    ymax = int(rt.find('bndbox').find('ymax').text) 

  1. Voor elk selectiekader in een afbeelding zoomen we in op het selectiekader, snijden we het middengedeelte bij en slaan we dat op in een apart bestand. We snijden het selectiekader met 1/3 van zijn grootte vanaf elke kant en nemen daarom 1/9 van het gebied binnen het selectiekader (het midden). Zie de volgende code:
    a = (xmax-xmin)/3.0
    b = (ymax-ymin)/3.0
    box = [int(xmin+a),int(ymin+b),int(xmax-a),int(ymax-b)]
    image1 = image.crop(box)
    

  2. Ten slotte slaan we de bijgesneden afbeelding op:
    image1.save('cropped_images_small/'+name+"-"+str(count)+".png", "PNG", quality=80, optimize=True, progressive=True)

Het wordt aanbevolen om een ​​snelle visuele inspectie van de bijgesneden afbeeldingen uit te voeren om er zeker van te zijn dat ze alleen schone of gecorrodeerde onderdelen bevatten.

De volgende code toont de implementatie voor het bijsnijden van de afbeeldingen (ook beschikbaar in sectie 2 van de notebook):

def crop_images(xml_path, images_path, classes_to_use):
# Crop objects of type given in "classes_to_use" from xml files with several # objects in each file and several classes in each file if os.path.isdir("cropped_images_small"): shutil.rmtree('cropped_images_small') os.mkdir('cropped_images_small') print("Storing cropped images in cropped_images_small folder" ) else: os.mkdir('cropped_images_small') print("Storing cropped images in cropped_images_small folder" ) xml_paths = get_file_path_list(xml_path) images_names = list(set(get_filename_list(images_path))) count = 0 for idx, x in enumerate(xml_paths): if '.DS_Store' not in x: single_imgfile_path = images_path + '\'+ x.split('\')[-1].split('.')[0] +'.JPG' image = Image.open(single_imgfile_path) tree = ET.parse(x) root = tree.getroot() for idx2, rt in enumerate(root.findall('object')): name = rt.find('name').text if name in classes_to_use: xmin = int(rt.find('bndbox').find('xmin').text) ymin = int(rt.find('bndbox').find('ymin').text) xmax = int(rt.find('bndbox').find('xmax').text) ymax = int(rt.find('bndbox').find('ymax').text) a = (xmax-xmin)/3.0 b = (ymax-ymin)/3.0 box = [int(xmin+a),int(ymin+b),int(xmax-a),int(ymax-b)] image1 = image.crop(box) image1.save('cropped_images_small/'+name+"-"+str(count)+".png", "PNG", quality=80, optimize=True, progressive=True) count+=1

Maak het RGB DataFrame

Na het bijsnijden en opslaan van de geannoteerde delen, hebben we veel kleine afbeeldingen en elke afbeelding bevat alleen pixels die tot één klasse behoren (schoon of gecorrodeerd). De volgende stap bij het voorbereiden van de gegevens is om de kleine afbeeldingen om te zetten in een dataframe.

  1. We definiëren eerst de kolomnamen voor het DataFrame dat de klasse (Clean of Corroded) bevat en de RGB-waarden voor elke pixel.
  2. We definiëren de klassen die moeten worden gebruikt (voor het geval we andere mogelijke klassen willen negeren).
  3. Voor elke bijgesneden afbeelding hervormen we de afbeelding en extraheren we RGB-informatie in een nieuw DataFrame.
  4. Ten slotte slaan we het laatste dataframe op in een .csv-bestand.

Zie de volgende code:

37 crop_path = 'Path to your cropped images'
38 files = get_file_path_list(crop_path)
39
40 cols = ['class','R','G','B']
41 df = pd.DataFrame()
42
43 classes_to_use = ['Corroded','Clean']
44 dict1 = {'Clean': 0, 'Corroded': 1}
45 for file in files:
46 lbls = Image.open(file)
47 imagenp = np.asarray(lbls)
48 imagenp=imagenp.reshape(imagenp.shape[1]*imagenp.shape[0],3)
49 name = file.split('\')[-1].split('.')[0].split('-')[0]
50 classname = dict1[name]
51 dftemp = pd.DataFrame(imagenp)
52 dftemp.columns =['R','G','B']
53 dftemp['class'] = classname
54 columnsTitles=['class','R','G','B']
55 dftemp=dftemp.reindex(columns=columnsTitles)
56 df = pd.concat([df,dftemp], axis=0)
57
58 df.columns = cols
59 df.to_csv('data.csv', index=False)

Uiteindelijk hebben we een tabel met labels en RGB-waarden.

Maak trainings- en validatiesets en upload deze naar Amazon S3

Nadat u de gegevens heeft voorbereid, kunt u de code gebruiken die wordt vermeld in sectie 4 van onze notitieboekje om de trainings- en validatiedatasets te genereren. Voordat u de code in deze sectie uitvoert, moet u ervoor zorgen dat u de naam van een S3-bucket invoert in het bucket variabele, voor het opslaan van de trainings- en validatiegegevens.

De volgende regels code in het notitieblok definiëren variabelen voor de bestandsnaam van de invoergegevens (FILE_DATA), de training / validatieratio (voor dit bericht gebruiken we 20% van de gegevens voor validatie, wat 80% overblijft voor training) en de naam van de gegenereerde csv-bestanden met trainings- en validatiegegevens. U kunt ervoor kiezen om de voorbeeld trainingsdataset als het invoergegevensbestand of gebruik het gegevensbestand dat u hebt gegenereerd door de vorige stap te volgen en het toe te wijzen aan de FILE_DATA variabel.

FILE_DATA = 'data.csv'
TARGET_VAR = 'class'
FILE_TRAIN = 'train.csv'
FILE_VALIDATION = 'validation.csv'
PERCENT_VALIDATION = 20

Ten slotte uploadt u de trainings- en validatiegegevens naar de S3-bucket:

s3_train_loc = upload_to_s3(bucket = bucket, channel = 'train', filename = FILE_TRAIN)
s3_valid_loc = upload_to_s3(bucket = bucket, channel = 'validation', filename = FILE_VALIDATION)

Maak een trainingsgegevensset voor handmatig bijgesneden afbeeldingen

Voor het maken van de trainings- en validatiedataset bij het gebruik van handmatig bijgesneden afbeeldingen, moet u uw bijgesneden afbeeldingen een naam geven met de voorvoegsels Corroded en Clean om consistent te zijn met de implementatie in de verstrekte Jupyter notitieboek​ Voor de klasse Corroded moet u bijvoorbeeld uw afbeeldingsbestanden Corroded-1.png, Corroded-2.png, enzovoort noemen.

Stel het pad van uw afbeeldingen en XML-bestanden in op de variabelen img_path en xml_path. Stel ook de bucketnaam in op de bucketvariabele. Voer de code uit in alle secties die in het notitieblok zijn gedefinieerd. Hiermee worden de trainings- en validatiedatasets gemaakt en geüpload naar de S3-bucket.

Implementeer de oplossing

Nu we de trainings- en validatiedatasets in Amazon S3 hebben, is het tijd om een ​​XGBoost-classifier te trainen met SageMaker. Hiervoor kunt u de modeltraining van de webapplicatie voor corrosiedetectie gebruiken. Om u te helpen bij de implementatie van de webapplicatie, hebben we AWS CloudFormatie Sjablonen. Kloon de broncode van het GitHub-repository en volg de beschreven implementatiestappen om de implementatie van de applicatie te voltooien. Nadat u de toepassing met succes hebt geïmplementeerd, kunt u de functies verkennen die deze biedt, zoals corrosiedetectie op aanvraag, training en implementatie van een model en batchfuncties.

Een XGBoost-classifier trainen op SageMaker

Om een ​​XGBoost-classificator te trainen, meldt u zich aan bij de webtoepassing voor corrosiedetectie en kiest u in het menu Model opleiding​ Hier kunt u een nieuw SageMaker-model trainen.

U moet parameters configureren voordat u een nieuwe trainingstaak in SageMaker start. De applicatie biedt een JSON-geformatteerde parameterpayload die informatie bevat over de naam van de SageMaker-trainingstaak, Amazon Elastic Compute-cloud (Amazon EC2) instantietype, het aantal te gebruiken EC2-instanties, de Amazon S3-locatie van de trainings- en validatiedatasets en XGBoost-hyperparameters.

Met de parameter payload kunt u ook het EC2-instantietype configureren, dat u kunt gebruiken voor het hosten van het getrainde ML-model met behulp van SageMaker-hostingservices. U kunt de waarden van de hyperparameters wijzigen, hoewel de geleverde standaardwaarden werken. Zie voor meer informatie over het trainen van taakparameters CreërenTrainingJob​ Zie voor meer informatie over hyperparameters XGBoost-hyperparameters.

Zie de volgende JSON-code:

{ "TrainingJobName":"Corrosion-Detection-7", "MaxRuntimeInSeconds":20000, "InstanceCount":1, "InstanceType":"ml.c5.2xlarge", "S3OutputPath":"s3://bucket/csv/output", "InputTrainingS3Uri":"s3://bucket/csv/train/train.csv", "InputValidationS3Uri":"s3://bucket/csv/validation/validation.csv", "HyperParameters":{ "max_depth":"3", "learning_rate":"0.12", "eta":"0.2", "colsample_bytree":"0.9", "gamma":"0.8", "n_estimators":"150", "min_child_weight":"10", "num_class":"2", "subsample":"0.8", "num_round":"100", "objective":"multi:softmax" }, "EndpointInstanceType":"ml.m5.xlarge", "EndpointInitialInstanceCount":1
}

De volgende schermafbeelding toont de trainingspagina van het model. Om de SageMaker-trainingstaak te starten, moet u de JSON-payload indienen door te kiezen Trainingsopdracht indienen.

De applicatie toont je de status van de trainingsbaan. Wanneer de taak is voltooid, wordt een SageMaker-eindpunt ingericht. Dit zou een paar minuten moeten duren en er zou een nieuw SageMaker-eindpunt moeten verschijnen op het SageMaker-eindpunten tabblad van de app.

Promoot het SageMaker-eindpunt

Om de toepassing het nieuw gemaakte SageMaker-eindpunt te laten gebruiken, moet u het eindpunt configureren met de webapp. U doet dit door de nieuw gemaakte eindpuntnaam in te voeren in het Nieuw eindpunt veld. Met de applicatie kunt u nieuw gemaakte SageMaker-eindpunten promoten voor inferentie.

Detecteer corrosie

Nu bent u helemaal klaar om corrosiedetectie uit te voeren. Op de Batch-analyse pagina, kunt u een .zip-bestand met uw afbeeldingen uploaden. Dit verwerkt alle afbeeldingen door corrosie te detecteren en het percentage corrosie aan te geven dat in elke afbeelding wordt aangetroffen.

Samengevat

In dit bericht hebben we u kennis laten maken met verschillende ML-algoritmen en het XGBoost-algoritme voor kleurclassificatie gebruikt om corrosie te detecteren. We hebben u ook laten zien hoe u ML-modellen kunt trainen en hosten met behulp van Step Functions en SageMaker. We bespraken de voor- en nadelen van verschillende ML- en deep learning-methoden en waarom een ​​kleurclassificatiemethode effectiever zou kunnen zijn. Ten slotte hebben we laten zien hoe u ML kunt integreren in een webtoepassing waarmee u een model kunt trainen en implementeren en inferentie op afbeeldingen kunt uitvoeren. Lees meer over Amazon SageMaker en probeer deze oplossingen zelf! Als je opmerkingen of vragen hebt, laat het ons dan weten in de comments hieronder!


Over de auteurs

Aravind Kodandaramaiah is een Solution Builder bij het AWS Global Vertical Solutions Prototyping-team, dat wereldwijde klanten helpt de 'kunst van de mogelijkheid' te realiseren door AWS te gebruiken om uitdagende zakelijke problemen op te lossen. Hij is een fervent machine learning-liefhebber en richt zich op het bouwen van end-to-end-oplossingen op AWS.

Mehdi E. Ver is Sr Machine Learning Specialist SA bij Manufacturing and Industrial Global and Strategic Accounts. Hij helpt klanten bij het bouwen van Machine Learning- en Cloud-oplossingen voor hun uitdagende problemen.

Coinsmart. Beste Bitcoin-beurs in Europa
Bron: https://aws.amazon.com/blogs/machine-learning/rust-detection-using-machine-learning-on-aws/

spot_img

Laatste intelligentie

spot_img