Inimeste kaitsmine ohtlike piirkondade eest läbi virtuaalsete piiride Computer Visioni abil

Allikasõlm: 807925

Kuna ettevõtted tervitavad töökohal rohkem autonoomseid roboteid ja muid raskeid seadmeid, peame tagama, et seadmed saaksid meeskonnakaaslaste läheduses ohutult töötada. Selles postituses näitame teile, kuidas luua virtuaalne piir arvutinägemise ja AWS DeepLens, AWS-i süvaõppega videokaamera, mis on loodud arendajatele masinõppe (ML) õppimiseks. Selle postituse masinõppetehnikaid kasutades saate luua virtuaalsed piirid piiratud aladele, mis lülitavad seadmed automaatselt välja või annavad hoiatussignaali, kui inimesed lähenevad.

Selle projekti jaoks koolitate kohandatud objekti tuvastamise mudelit Amazon SageMaker ja juurutage mudel AWS DeepLensi seadmesse. Objektide tuvastamine on ML-algoritm, mis võtab sisendiks pildi ja tuvastab objektid ja nende asukoha pildil. Lisaks virtuaalsetele piirdelahendustele saate rakendada selles postituses õpitud tehnikaid, kui teil on vaja tuvastada teatud objektide asukoht pildi sees või loendama soovitud objekti esinemisjuhtude arv pildil, näiteks loendama üksusi salvestuskastis või jaemüügiriiulil.

Lahenduse ülevaade

Läbiviimine sisaldab järgmisi samme.

  1. Valmistage oma andmestik ette ML-algoritmi sisestamiseks.
  2. Treenige mudelit rakendusega Amazon SageMaker.
  3. Testimudel kohandatud piirangutsoonidega.
  4. Juurutage lahendus AWS DeepLensis.

Arutame ka teisi reaalseid kasutusjuhtumeid, kus saate seda lahendust rakendada.

Järgnev diagramm illustreerib lahenduse arhitektuuri.

Eeldused

Selle ülevaate lõpetamiseks peavad teil olema järgmised eeltingimused.

Valmistage oma andmestik ette ML-algoritmi sisestamiseks

See postitus kasutab ML-algoritmi, mida nimetatakse objektituvastusmudeliks, et luua lahendus, mis tuvastab, kas inimene on kohandatud piirangutsoonis. Kasutate avalikult kättesaadavat Jalakäijate tuvastamise andmestik saadaval Kaggle'is, millel on üle 2,000 pildi. Sellel andmekogul on sildid inimeste ja inimesesarnaste objektide (nt mannekeenide) jaoks, nii et koolitatud mudel suudab täpsemalt eristada tõelisi inimesi ja papist rekvisiite või kujusid.

Näiteks järgmised pildid on näited ehitustöölise tuvastamisest ja sellest, kas ta on kohandatud piirangutsoonis (punane piirjoon).

Modelli treenimise alustamiseks esmalt looge S3 ämber treeningandmete ja mudeli väljundi salvestamiseks. AWS DeepLensi projektide puhul peavad S3 ämbrite nimed algama eesliitega deeplens-. Neid andmeid kasutate mudeli koolitamiseks SageMakeriga – täielikult hallatava teenusega, mis võimaldab kiiresti koostada, koolitada ja juurutada ML-mudeleid.

Treenige mudelit rakendusega Amazon SageMaker

Mudeli koolitamiseks kasutate arenduskeskkonnana SageMaker Jupyteri sülearvuteid. Jupyter Notebook on avatud lähtekoodiga veebirakendus, mis võimaldab teil luua ja jagada dokumente, mis sisaldavad reaalajas koodi, võrrandeid, visualiseerimisi ja jutustavat teksti. Selle postituse jaoks pakume Train_Object_Detection_People_DeepLens.ipynb, täielik märkmik, mida saate jälgida.

Kohandatud objektituvastusmudeli loomiseks peate kasutama graafikatöötlusüksuse (GPU) toega koolitustöö eksemplari. GPU-d on suurepärased närvivõrgu treenimiseks vajalike arvutuste paralleelseerimiseks. Kuigi sülearvuti ise on üks ml.t2.medium eksemplar, kasutab koolitustöö konkreetselt ml.p2.xlarge eksemplari. GPU-toega koolitustöö eksemplarile juurdepääsemiseks peate esitama teenuselimiidi suurendamise taotluse AWS-i tugikeskusesse.

Pärast limiidi suurendamist tehke SageMakeri märkmiku eksemplari loomiseks järgmised sammud.

  1. Valige SageMakeri konsoolil Märkmiku eksemplarid.
  2. Vali Loo märkmiku eksemplar.
  3. eest Märkmiku eksemplari nimi, sisestage oma märkmiku eksemplari nimi.
  4. eest Eksemplari tüüp, vali t2.keskmine.

See on kõige odavam eksemplaritüüp, mida sülearvuti eksemplarid toetavad, ja sellest õpetuseks piisab.

  1. eest IAM roll, vali Loo uus roll.

Veenduge selles AWS-i identiteedi- ja juurdepääsuhaldus (IAM) rollil on juurdepääs teie varem loodud S3 ämbrile (eesliide deeplens-).

  1. Vali Loo märkmiku eksemplar. Teie märkmiku eksemplari käivitamiseks võib kuluda paar minutit.
  1. Kui märkmiku eksemplaride lehel olek muutub olekuks InService, valige Avage Jupyter äsja loodud Jupyteri sülearvuti eksemplari käivitamiseks.
  2. Vali Täiendava üles laadida Train_Object_Detection_people_DeepLens.ipynb varem alla laaditud faili.

  1. Avage märkmik ja järgige seda lõpuni.
  2. Kui teilt küsitakse kerneli seadistamise kohta, valige conda_mxnet_p36.

Jupyteri märkmik sisaldab teksti- ja koodilahtreid. Koodilõigu käivitamiseks valige lahter ja vajutage Tõstuklahv + sisestusklahv. Lahtri töötamise ajal kuvatakse lahtri kõrvale tärn. Kui lahter on valmis, kuvatakse algse lahtri alla väljundi number ja uus väljundlahter.

  1. Laadige andmestik alla avalikust S3 ämbrist kohalikku SageMakeri eksemplari ja pakkige andmed lahti. Seda saab teha, järgides märkmikus olevat koodi:
     !aws s3 cp s3://deeplens-public/samples/pedestriansafety/humandetection_data.zip . !rm -rf humandetection/ !unzip humandetection_data.zip -d humandetection 

  2. Teisendage andmekogum vormingusse (RecordIO), mida saab sisestada SageMakeri algoritmi:
     !python $mxnet_path/tools/im2rec.py --pass-through --pack-label $DATA_PATH/train_mask.lst $DATA_PATH/ !python $mxnet_path/tools/im2rec.py --pass-through --pack-label $DATA_PATH/val_mask.lst $DATA_PATH/ 

  3. Teisaldage RecordIO-failid tagasi Amazon S3-sse.

Nüüd, kui olete andmete ettevalmistamise lõpetanud, olete valmis objektidetektorit välja õpetama.

Objektide tuvastamise algoritme on palju erinevaid. Selle postituse jaoks kasutate Single Shot MultiBox Detection algoritm (SSD). SSD-algoritmil on hea kiiruse ja täpsuse tasakaal, mistõttu on see ideaalne töötamiseks sellistes servaseadmetes nagu AWS DeepLens.

Treeningtöö osana on teil palju hüperparameetrite valikuid, mis aitavad treeningkäitumist konfigureerida (nt epohhide arv, õppimiskiirus, optimeerija tüüp ja minipartii suurus). Hüperparameetrid võimaldavad teil häälestada oma mudeli treeningkiirust ja täpsust. Lisateavet hüperparameetrite kohta vt Objekti tuvastamise algoritm.

  1. Seadistage oma hüperparameetrid ja andmekanalid. Kaaluge järgmise hüperparameetrite määratluse näidet.
     od_model = sagemaker.estimator.Estimator(training_image, role, train_instance_count=1, train_instance_type='ml.p2.xlarge', train_volume_size = 50, train_max_run = 360000, input_mode= 'File', output_path=s3_output_location, sagemaker_session=sess) od_model.set_hyperparameters(base_network='resnet-50', use_pretrained_model=1, num_classes=2, mini_batch_size=32, epochs=100, learning_rate=0.003, lr_scheduler_step='3,6', lr_scheduler_factor=0.1, optimizer='sgd', momentum=0.9, weight_decay=0.0005, overlap_threshold=0.5, nms_threshold=0.45, image_shape=300, num_training_samples=n_train_samples) 

Sülearvutil on mõned vaikimisi hüperparameetrid, mis on eelnevalt valitud. Jalakäijate tuvastamiseks treenite mudelit 100 epohhi jooksul. See koolitusetapp peaks ühe ml.p2.xsuure eksemplari kasutamisel kestma umbes 2 tundi. Saate katsetada erinevate hüperparameetrite kombinatsioonidega või treenida jõudluse parandamiseks rohkemate ajajärkude jaoks. Lisateavet viimaste hindade kohta vt Amazon SageMakeri hinnakujundus.

  1. Saate alustada koolitustööd ühe koodireaga ja jälgida täpsust aja jooksul SageMakeri konsoolil:
    od_model.fit(inputs=data_channels, logs=True) 

Lisateavet koolituse toimimise kohta vt Loo koolitustöö. Ettevalmistus ja andmete allalaadimine võtavad olenevalt andmete suurusest aega. Seetõttu võib kuluda mõni minut, enne kui hakkate oma koolitustööde andmete logisid hankima.

Saate jälgida oma koolitustöö edenemist mõõdiku keskmise täpsuse (mAP) abil, mis võimaldab teil jälgida mudeli võimet objekte klassifitseerida ja õigeid piirdekaste tuvastada. Andmelogid prindivad lisaks muudele kadudele välja ka valideerimisandmete MAP-i iga andmestiku käitamise kohta, üks kord ühe perioodi kohta. See mõõdik on klassi ja selle ümber oleva täpse piirdekasti täpse tuvastamise algoritmi jõudluse kvaliteedi puhvernäitaja.

Kui töö on lõpetatud, leiate väljaõppinud mudelifailid S3 ämbrist ja kaustast, mis on varem määratud s3_output_location:

s3_output_location = 's3://{}/{}/output'.format(BUCKET, PREFIX)

Selle postituse jaoks näitame 10. ja 100. epohhi lõppedes saadud valideerimiskomplekti tulemusi. 10. epohhi lõpus näeme valideerimiskaarti ligikaudu 0.027, samas kui 100. ajastu oli ligikaudu 0.42.

Paremate tuvastamistulemuste saavutamiseks võite proovida hüperparameetreid häälestada, kasutades selleks SageMakeri sisseehitatud võimalust. automaatne mudeli häälestamine ja treenige mudelit rohkemate ajajärkude jaoks. Tavaliselt lõpetate treenimise, kui näete täpsuse vähenemist.

Testimudel kohandatud piirangutsoonidega

Enne koolitatud mudeli juurutamist AWS DeepLensis saate seda pilves testida, kasutades SageMakeri hostitud lõpp-punkti. SageMakeri lõpp-punkt on täielikult hallatav teenus, mis võimaldab teha reaalajas järeldusi REST API kaudu. SageMaker võimaldab teil mudelite testimiseks kiiresti juurutada uusi lõpp-punkte, nii et te ei peaks mudelit majutama kohalikus eksemplaris, mida mudeli koolitamiseks kasutati. See võimaldab teha mudeli põhjal ennustusi (või järeldusi) piltide kohta, mida algoritm treeningu ajal ei näinud.

Te ei pea hostima samal eksemplaritüübil, mida kasutasite koolitamiseks. Koolitus on pikaajaline ja arvutusmahukas töö, mis nõuab teistsuguseid arvutus- ja mälunõudeid, mida hostimine tavaliselt ei nõua. Saate valida mis tahes tüüpi eksemplari, mida soovite mudeli hostida. Sel juhul valisime koolitamiseks eksemplari ml.p3.2xlarge, kuid valisime mudeli majutamiseks odavamal protsessori eksemplaril ml.m4.xlarge. Järgmine koodilõik näitab meie lõpp-punkti juurutamist.

object_detector = od_model.deploy(initial_instance_count = 1, instance_type = 'ml.m4.xlarge') 

Tuvastamine kohandatud piirangutsoonis (huvipiirkond)

Väljundi vormingut saab esitada kui [klassi_indeks, usalduse_skoor, xmin, ymin, xmax, ymax]. Madala usaldusväärsusega ennustustel on sageli suurem tõenäosus saada valepositiivne või valenegatiivne, seega peaksite tõenäoliselt madala usaldusväärsusega ennustustest loobuma. Saate kasutada järgmist koodi, et tuvastada, kas isiku piirdekast kattub piirangutsooniga.

def inRestrictedSection(ImShape = None, R1 = None, restricted_region = None, kclass = None, score = None, threshold = None): statement = 'Person Not Detected in Restricted Zone' if (kclass == 1) and (score > threshold): Im1 = np.zeros((ImShape[0],ImShape[1],3), np.int32) cv2.fillPoly(Im1, [R1], 255) Im2 = np.zeros((ImShape[0],ImShape[1],3), np.int32) if restricted_region is None: restricted_region = np.array([[0,ImShape[0]],[ImShape[1],ImShape[0]],[ImShape[1],0], [0,0]], np.int32) cv2.fillPoly(Im2, [restricted_region], 255) Im = Im1 * Im2 if np.sum(np.greater(Im, 0))>0: statement = 'Person Detected in Restricted Zone' else: statement = statement return statement 

Vaikimisi hinnatakse kogu kaadrit inimese kohaloleku suhtes. Siiski saate hõlpsasti määrata huvipakkuva piirkonna, kus inimese kohalolekut peetakse kõrge riskitasemeks. Kui soovite lisada kohandatud piiranguvööndi, lisage [X-telg,Y-telg] tähistatud piirkonna tippude koordinaadid ja looge hulknurk. Koordinaadid tuleb sisestada kas päri- või vastupäeva. Vaadake järgmist koodi:

restricted_region = None #restricted_region = np.array([[0,200],[100,200],[100,0], [10,10]], np.int32) 

Järgmine näidiskood näitab jalakäijaid, kes on piiranguvööndis tuvastatud:

file_name = 'humandetection/test_images/t1_image.jpg' img = cv2.imread(file_name) img =cv2.cvtColor(img,cv2.COLOR_BGR2RGB) thresh = 0.2 height = img.shape[0] width = img.shape[1] colors = dict() with open(file_name, 'rb') as image: f = image.read() b = bytearray(f) ne = open('n.txt','wb') ne.write(b) results = object_detector.predict(b, initial_args={'ContentType': 'image/jpeg'}) detections = json.loads(results) object_categories = ['no-person', 'person'] for det in detections['prediction']: (klass, score, x0, y0, x1, y1) = det if score < thresh: continue cls_id = int(klass) prob = score if cls_id not in colors: colors[cls_id] = (random.random(), random.random(), random.random()) xmin = int(x0 * width) ymin = int(y0 * height) xmax = int(x1 * width) ymax = int(y1 * height) R1 = np.array([[xmin,ymin],[xmax,ymin],[xmax,ymax], [xmin,ymax]], np.int32) cv2.polylines(img,[R1],True, (255,255,0), thickness = 5) cv2.polylines(img,[restricted_region],True, (255,0,0), thickness = 5) plt.imshow(img) print(inRestrictedSection(img.shape,R1 = R1, restricted_region= restricted_region, kclass = cls_id, score = prob, threshold=0.2)) 

Järgmised pildid näitavad meie tulemusi.

Juurutage lahendus AWS DeepLensis

Teisendage mudel juurutamiseks AWS DeepLensiks

SageMakeri koolitatud SSD mudeli juurutamisel AWS DeepLensis peate esmalt käivitama deploy.py mudeli artefakti teisendamiseks juurutatavaks mudeliks:

!rm -rf incubator-mxnet !git clone -b v1.7.x https://github.com/apache/incubator-mxnet MODEL_PATH = od_model.model_data TARGET_PATH ='s3://'+BUCKET+'/'+PREFIX+'/patched/' !rm -rf tmp && mkdir tmp rm -rf tmp && mkdir tmp !aws s3 cp $MODEL_PATH tmp !tar -xzvf tmp/model.tar.gz -C tmp !mv tmp/model_algo_1-0000.params tmp/ssd_resnet50_300-0000.params !mv tmp/model_algo_1-symbol.json tmp/ssd_resnet50_300-symbol.json !python incubator-mxnet/example/ssd/deploy.py --network resnet50 --data-shape 300 --num-class 2 --prefix tmp/ssd_ !tar -cvzf ./patched_model.tar.gz -C tmp ./deploy_ssd_resnet50_300-0000.params ./deploy_ssd_resnet50_300-symbol.json ./hyperparams.json !aws s3 cp patched_model.tar.gz $TARGET_PATH

Importige oma mudel AWS DeepLensi

Mudeli käitamiseks AWS DeepLensi seadmes peate looma AWS DeepLensi projekti. Alustage oma mudeli importimisest AWS DeepLensi.

  1. AWS DeepLensi konsoolil, all Vahendid, vali Mudelid.
  2. Vali Impordi mudel.

  1. eest Impordi allikasvalige Väliselt koolitatud mudel.
  2. Sisestage Amazon S3 asukoht lapitud mudel mille salvestasite ülaltoodud sammus deploy.py käivitamisest.
  3. eest Mudeli raamistik, vali MX Net.
  4. Vali Impordi mudel.

Looge järeldusfunktsioon

Järeldusfunktsioon toidab iga kaamerakaadri mudelisse, et saada ennustusi, ja käivitab mis tahes kohandatud äriloogika järelduste tulemuste kasutamisel. Sa kasutad AWS Lambda et luua funktsioon, mille juurutate AWS DeepLensis. Funktsioon käivitab AWS DeepLensi seadmes kohapeal järeldusi.

Esiteks peame AWS DeepLensi juurutamiseks looma Lambda funktsiooni.

  1. Lae alla järeldada lambda funktsiooni.
  2. Valige Lambda konsoolil Funktsioonid.
  3. Vali Loo funktsioon.
  4. valima Autor nullist.
  5. eest Funktsiooni nimi, sisestage nimi.
  6. eest Runtime, vali Python 3.7.
  7. eest Valige või looge täitmise roll, vali Kasutage olemasolevat rolli.
  8. Vali service-role/AWSDeepLensLambdaRole.
  9. Vali Loo funktsioon.

  1. Funktsiooni üksikasjade lehel Meetmete menüüst valige Laadige üles ZIP-fail.

  1. Laadige üles järeldus lambda varem alla laaditud faili.
  2. Vali Säästa sisestatud koodi salvestamiseks.
  3. Kohta Meetmete menüüst valige Avalda uus versioon.

Funktsiooni avaldamine muudab selle AWS DeepLensi konsoolis kättesaadavaks, et saaksite selle oma kohandatud projekti lisada.

  1. Sisestage versiooninumber ja valige Avalda.

Järeldusfunktsiooni mõistmine

See jaotis juhendab teid järeldusfunktsiooni mõnest olulisest osast. Esiteks peaksite pöörama tähelepanu kahele konkreetsele failile:

  • sildid.txt – Sisaldab närvivõrgu väljundi (täisarvud) vastendamist inimloetavatele siltidele (string)
  • lambda_function.py – Sisaldab väljakutsutava funktsiooni koodi, et luua ennustusi iga kaamerakaadri kohta ja saata tulemusi tagasi

Failis lambda_function.py laadite kõigepealt mudeli ja optimeerite seda. Võrreldes GPU-ga pilvepõhiste virtuaalmasinatega, on AWS DeepLensil väiksem arvutusvõimsus. AWS DeepLens kasutab Intel OpenVino mudeli optimeerijat, et optimeerida SageMakeris treenitud mudelit selle riistvaraga töötamiseks. Järgmine kood optimeerib teie mudeli kohapeal käitamiseks:

client.publish(topic=iot_topic, payload='Optimizing model...') ret, model_path = mo.optimize('deploy_ssd_resnet50_300', INPUT_W, INPUT_H) # Load the model onto the GPU. client.publish(topic=iot_topic, payload='Loading model...') model = awscam.Model(model_path, {'GPU': 1}) 

Seejärel käivitate mudeli kaadri kaupa kaamerast pärit piltidele. Vaadake järgmist koodi:

while True: # Get a frame from the video stream ret, frame = awscam.getLastFrame() if not ret: raise Exception('Failed to get frame from the stream') # Resize frame to the same size as the training set. frame_resize = cv2.resize(frame, (INPUT_H, INPUT_W)) # Run the images through the inference engine and parse the results using # the parser API, note it is possible to get the output of doInference # and do the parsing manually, but since it is a ssd model, # a simple API is provided. parsed_inference_results = model.parseResult(model_type, model.doInference(frame_resize)) 

Lõpuks saadate tekstiennustuse tulemused tagasi pilve. Tekstitulemuste vaatamine pilves on mugav viis veendumaks, et mudel töötab õigesti. Igal AWS DeepLensi seadmel on järeldustulemuste saamiseks automaatselt loodud spetsiaalne iot_topic. Vaadake järgmist koodi:

# Send results to the cloud client.publish(topic=iot_topic, payload=json.dumps(cloud_output)) 

Looge kohandatud AWS DeepLensi projekt

Uue AWS DeepLensi projekti loomiseks toimige järgmiselt.

  1. AWS DeepLensi konsoolil Projektid lehel, valige Loo projekt.
  2. eest Projekti tüüpvalige Looge uus tühi projekt.
  3. Vali järgmine.

  1. Nimetage oma projekt yourname-pedestrian-detector-.
  2. Vali Lisa mudel.
  3. Valige äsja loodud mudel.
  4. Vali Lisa funktsioon.
  5. Otsige varem loodud lambda funktsiooni nime järgi.
  6. Vali Loo projekt.
  7. Kohta Projektid lehel valige projekt, mida soovite juurutada.
  8. Valis Juuruta seadmesse.
  9. eest Sihtseade, valige oma seade.
  10. Vali Ülevaade.
  11. Vaadake oma seaded üle ja valige juurutada.

Juurutamiseks võib kuluda kuni 10 minutit, olenevalt võrgu kiirusest, millega teie AWS DeepLens on ühendatud. Kui juurutamine on lõppenud, peaksite lehel nägema rohelist bännerit sõnumiga "Palju õnne, teie mudel töötab nüüd AWS DeepLensis kohapeal!"

Tekstiväljundi nägemiseks kerige seadme üksikasjade lehel alla kuni Projekti väljund osa. Teema kopeerimiseks järgige jaotises olevaid juhiseid ja minge lehele AWS IoT Core konsool teema tellimiseks. Peaksite nägema tulemusi nagu järgmisel ekraanipildil.

Üksikasjalikud juhised videovoo või tekstiväljundi vaatamise kohta leiate artiklist AWS DeepLensi tulemuste vaatamine.

Reaalajas kasutatavad juhtumid

Nüüd, kui teil on AWS DeepLensis töötava mudeli ennustused, teisendame need ennustused hoiatusteks ja statistikaks. Sellise projekti kõige levinumad kasutusviisid on järgmised:

Järeldus

Selles postituses õppisite, kuidas koolitada objekti tuvastamise mudelit ja juurutada see AWS DeepLensis, et tuvastada inimesi, kes sisenevad piirangutsoonidesse. Saate seda õpetust kasutada viitena oma kohandatud objektide tuvastamise projektide koolitamiseks ja juurutamiseks AWS DeepLensis.

Selle õpetuse ja teiste AWS DeepLensi õpetuste, näidiste ja projektiideede üksikasjalikuma ülevaate saamiseks vt AWS DeepLensi retseptid.


Autoritest

Yash Shah on andmeteadlane Amazon ML Solutions Labis, kus ta töötab mitmesuguste masinõppe kasutusjuhtudega alates tervishoiust kuni tootmise ja jaemüügini. Tal on ametlik taust inimtegurite ja statistika alal ning ta oli varem osa Amazon SCOTi meeskonnast, kes kavandas tooteid, mis suunaksid 3P-müüjaid tõhusa varude haldamisega.

Phu Nguyen on AWS Panorama tootejuht. Ta loob tooteid, mis annavad mis tahes oskustasemega arendajatele lihtsa ja praktilise sissejuhatuse masinõppesse.

Allikas: https://aws.amazon.com/blogs/machine-learning/protecting-people-through-virtual-boundaries-computer-vision/

Ajatempel:

Veel alates AWS-i masinõppe ajaveeb