Zaščita ljudi pred nevarnimi območji prek virtualnih meja s programom Computer Vision

Izvorno vozlišče: 807925

Ker podjetja pozdravljajo več avtonomnih robotov in druge težke opreme na delovnem mestu, moramo zagotoviti, da lahko oprema varno deluje v bližini človeških soigralcev. V tej objavi vam bomo pokazali, kako zgraditi virtualno mejo z računalniškim vidom in AWS DeepLens, videokamera AWS z omogočenim globokim učenjem, namenjena razvijalcem za učenje strojnega učenja (ML). S tehnikami strojnega učenja v tej objavi lahko zgradite navidezne meje za omejena območja, ki samodejno izklopijo opremo ali sprožijo opozorilo, ko se ljudje približajo.

Za ta projekt boste usposobili model za odkrivanje objektov po meri Amazon SageMaker in razmestite model v napravo AWS DeepLens. Zaznavanje predmetov je algoritem ML, ki vzame sliko kot vhod in identificira predmete in njihovo lokacijo znotraj slike. Poleg rešitev za navidezne meje lahko uporabite tehnike, ki ste se jih naučili v tej objavi, ko morate zaznati, kje so določeni predmeti znotraj slike, ali prešteti število primerkov želenega predmeta na sliki, na primer štetje elementov v predalu za shranjevanje ali na maloprodajni polici.

Pregled rešitev

Vodenje vključuje naslednje korake:

  1. Pripravite svoj nabor podatkov za vnos v algoritem ML.
  2. Usposobite model z Amazon SageMaker.
  3. Testni model z omejitvenimi območji po meri.
  4. Razmestite rešitev v AWS DeepLens.

Razpravljamo tudi o drugih primerih uporabe v resničnem svetu, kjer lahko uporabite to rešitev.

Naslednji diagram prikazuje arhitekturo rešitev.

Predpogoji

Če želite dokončati ta korak, morate imeti naslednje predpogoje:

Pripravite svoj nabor podatkov za vnos v algoritem ML

Ta objava uporablja algoritem ML, imenovan model zaznavanja objektov, za izdelavo rešitve, ki zazna, ali je oseba v omejenem območju po meri. Uporabljate javno dostopne Nabor podatkov o zaznavanju pešcev na voljo na Kaggle, ki ima več kot 2,000 slik. Ta nabor podatkov ima oznake za ljudi in človeku podobne predmete (kot so lutke), tako da lahko usposobljeni model natančneje razlikuje med pravimi ljudmi in kartonskimi rekviziti ali kipi.

Naslednje slike so na primer primeri zaznanega gradbenega delavca in če je v območju omejitev po meri (rdeč obris).

Če želite začeti učiti svoj model, najprej ustvarite vedro S3 za shranjevanje vaših podatkov o vadbi in rezultatov modela. Za projekte AWS DeepLens se morajo imena veder S3 začeti s predpono deeplens-. Te podatke uporabite za usposabljanje modela s SageMakerjem, popolnoma upravljano storitvijo, ki omogoča hitro izdelavo, usposabljanje in uvajanje modelov ML.

Usposobite model z Amazon SageMaker

Kot razvojno okolje za usposabljanje modela uporabljate prenosne računalnike SageMaker Jupyter. Jupyter Notebook je odprtokodna spletna aplikacija, ki vam omogoča ustvarjanje in skupno rabo dokumentov, ki vsebujejo živo kodo, enačbe, vizualizacije in pripovedno besedilo. Za to objavo nudimo Train_Object_Detection_People_DeepLens.ipynb, poln zvezek, ki mu lahko sledite.

Če želite ustvariti model zaznavanja objekta po meri, morate uporabiti primerek učnega opravila z omogočeno grafično procesno enoto (GPU). GPU-ji so odlični pri vzporedni izračunih, ki so potrebni za usposabljanje nevronske mreže. Čeprav je sam zvezek en sam primerek ml.t2.medium, usposabljanje posebej uporablja primerek ml.p2.xlarge. Za dostop do primerka izobraževalnega opravila, ki podpira GPU, morate vložite zahtevo za povečanje limita storitev v center za podporo AWS.

Ko prejmete povišanje omejitve, dokončajte naslednje korake, da ustvarite primerek prenosnika SageMaker:

  1. Na konzoli SageMaker izberite Primeri prenosnih računalnikov.
  2. Izberite Ustvari primerek prenosnega računalnika.
  3. za Ime primerka zvezka, vnesite ime za svoj primerek prenosnika.
  4. za Vrsta primerka, izberite t2.srednje.

To je najcenejša vrsta instance, ki jo podpirajo instance prenosnika, in zadostuje za to vadnico.

  1. za Vloga IAM, izberite Ustvari novo vlogo.

Poskrbi za to AWS upravljanje identitete in dostopa (IAM) ima dostop do vedra S3, ki ste ga ustvarili prej (predpona deeplens-).

  1. Izberite Ustvari primerek prenosnega računalnika. Zagon vašega primerka prenosnega računalnika lahko traja nekaj minut.
  1. Ko se stanje na strani primerkov prenosnika spremeni v InService, izberite Odprite Jupyter za zagon vašega novo ustvarjenega primerka prenosnika Jupyter.
  2. Izberite Pošiljanje da naložite Train_Object_Detection_people_DeepLens.ipynb datoteko, ki ste jo prenesli prej.

  1. Odprite zvezek in mu sledite do konca.
  2. Če vas vprašajo o nastavitvi jedra, izberite conda_mxnet_p36.

Beležnica Jupyter vsebuje mešanico besedilnih in kodnih celic. Če želite zagnati del kode, izberite celico in pritisnite Shift + Enter. Med delovanjem celice se poleg celice prikaže zvezdica. Ko je celica končana, se pod izvirno celico prikažeta izhodna številka in nova izhodna celica.

  1. Prenesite nabor podatkov iz javnega vedra S3 v lokalni primerek SageMaker in razpakirajte podatke. To lahko storite tako, da sledite kodi v zvezku:
     !aws s3 cp s3://deeplens-public/samples/pedestriansafety/humandetection_data.zip . !rm -rf humandetection/ !unzip humandetection_data.zip -d humandetection 

  2. Pretvorite nabor podatkov v obliko (RecordIO), ki jih je mogoče vnesti v algoritem SageMaker:
     !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. Prenesite datoteke RecordIO nazaj v Amazon S3.

Zdaj, ko ste končali z vso pripravo podatkov, ste pripravljeni na usposabljanje detektorja predmetov.

Obstaja veliko različnih vrst algoritmov za zaznavanje objektov. Za to objavo uporabljate Single-Shot MultiBox Detection algoritem (SSD). Algoritem SSD ima dobro razmerje med hitrostjo in natančnostjo, zaradi česar je idealen za delovanje na robnih napravah, kot je AWS DeepLens.

Kot del usposabljanja imate na voljo veliko možnosti za hiperparametre, ki pomagajo konfigurirati vedenje usposabljanja (kot so število epoh, stopnja učenja, tip optimizatorja in velikost mini serije). Hiperparametri vam omogočajo nastavitev hitrosti vadbe in natančnosti vašega modela. Za več informacij o hiperparametrih glejte Algoritem za zaznavanje predmetov.

  1. Nastavite svoje hiperparametre in podatkovne kanale. Razmislite o uporabi naslednjega primera definicije hiperparametrov:
     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) 

Beležnica ima nekaj privzetih hiperparametrov, ki so bili vnaprej izbrani. Za zaznavanje pešcev usposabljate model 100 epoh. Ta korak usposabljanja naj bi trajal približno 2 uri z uporabo enega primerka ml.p2.xlarge. Lahko eksperimentirate z različnimi kombinacijami hiperparametrov ali trenirate več obdobij za izboljšave zmogljivosti. Za informacije o najnovejših cenah glejte Cene Amazon SageMaker.

  1. Usposabljanje lahko začnete z eno vrstico kode in spremljate natančnost skozi čas na konzoli SageMaker:
    od_model.fit(inputs=data_channels, logs=True) 

Za več informacij o tem, kako poteka usposabljanje, glejte CreateTrainingJob. Oskrba in prenos podatkov trajata nekaj časa, odvisno od velikosti podatkov. Zato bo morda minilo nekaj minut, preden boste začeli prejemati podatkovne dnevnike za svoja izobraževalna opravila.

Napredek vašega usposabljanja lahko spremljate prek metrične srednje povprečne natančnosti (mAP), ki vam omogoča spremljanje kakovosti zmožnosti modela za razvrščanje objektov in zaznavanje pravilnih mejnih okvirjev. Podatkovni dnevniki natisnejo tudi mAP na validacijske podatke, med drugimi izgubami, za vsako izvedbo nabora podatkov, enkrat za eno obdobje. Ta metrika je približek za kakovost delovanja algoritma pri natančnem zaznavanju razreda in natančnega omejevalnega polja okoli njega.

Ko je opravilo končano, lahko najdete naučene modelne datoteke v vedru S3 in mapi, določeni prej v s3_output_location:

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

Za to objavo prikazujemo rezultate na validacijskem nizu ob zaključku 10. in 100. obdobja. Na koncu 10. epohe vidimo validacijski mAP približno 0.027, medtem ko je bila 100. epoha približno 0.42.

Če želite doseči boljše rezultate zaznavanja, lahko poskusite nastaviti hiperparametre z uporabo zmožnosti, vgrajene v SageMaker za samodejna nastavitev modela in usposobiti model za več obdobij. Običajno prenehate z vadbo, ko opazite, da se natančnost zmanjšuje.

Testni model z omejitvenimi območji po meri

Preden uvedete usposobljeni model v AWS DeepLens, ga lahko preizkusite v oblaku z uporabo končne točke, ki jo gosti SageMaker. Končna točka SageMaker je popolnoma upravljana storitev, ki vam omogoča sklepanje v realnem času prek API-ja REST. SageMaker vam omogoča hitro uvajanje novih končnih točk za testiranje vaših modelov, tako da vam ni treba gostiti modela na lokalni instanci, ki je bila uporabljena za usposabljanje modela. To vam omogoča, da naredite napovedi (ali sklepanje) iz modela na slikah, ki jih algoritem med usposabljanjem ni videl.

Ni vam treba gostovati na isti vrsti instance, kot ste jo uporabljali za usposabljanje. Usposabljanje je dolgotrajno in računalniško zahtevno delo, ki zahteva drugačen nabor računalniških in pomnilniških zahtev, ki jih gostovanje običajno ne zahteva. Izberete lahko katero koli vrsto primerka, v katerem želite gostiti model. V tem primeru smo za usposabljanje izbrali primerek ml.p3.2xlarge, vendar smo se odločili, da bomo model gostili na cenejšem primerku CPE, ml.m4.xlarge. Naslednji delček kode prikazuje našo uvedbo končne točke.

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

Zaznavanje v omejenem območju po meri (območje zanimanja)

Format izhoda je lahko predstavljen kot [indeks_razreda, rezultat_zaupanja, xmin, ymin, xmax, ymax]. Napovedi z nizko stopnjo zaupanja imajo pogosto večje možnosti lažno pozitivnih ali lažno negativnih rezultatov, zato bi verjetno morali zavreči napovedi z nizko stopnjo zaupanja. S to kodo lahko zaznate, ali se omejevalni okvir osebe prekriva z omejenim območjem.

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 

Privzeto je celoten okvir ocenjen za človeško prisotnost. Vendar pa lahko preprosto določite območje interesa, v katerem se prisotnost osebe šteje za visoko tvegano. Če želite dodati omejitveno območje po meri, dodajte koordinate oglišč regije, ki jo predstavlja [os X, os Y], in ustvarite poligon. Koordinate je treba vnesti v smeri urnega kazalca ali nasprotni smeri urnega kazalca. Oglejte si naslednjo kodo:

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

Naslednja vzorčna koda prikazuje pešce, ki so identificirani znotraj območja z omejitvami:

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)) 

Naslednje slike prikazujejo naše rezultate.

Razmestite rešitev v AWS DeepLens

Pretvorite model za uvedbo v AWS DeepLens

Pri nameščanju modela SSD, usposobljenega s SageMakerjem, v AWS DeepLens, morate najprej zagnati deploy.py za pretvorbo artefakta modela v namestitveni model:

!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

Uvozite svoj model v AWS DeepLens

Če želite zagnati model v napravi AWS DeepLens, morate ustvariti projekt AWS DeepLens. Začnite z uvozom modela v AWS DeepLens.

  1. Na konzoli AWS DeepLens pod viri, izberite Modeli.
  2. Izberite Uvozni model.

  1. za Izvor uvozatako, da izberete Eksterno usposobljen model.
  2. Vnesite lokacijo Amazon S3 za pokrpan model ki ste ga shranili pred izvajanjem deploy.py v zgornjem koraku.
  3. za Okvir modela, izberite MX Net.
  4. Izberite Uvozni model.

Ustvarite funkcijo sklepanja

Funkcija sklepanja vnese vsak okvir kamere v model, da dobi napovedi in zažene poljubno poslovno logiko po meri z uporabo rezultatov sklepanja. Uporabljaš AWS Lambda ustvarite funkcijo, ki jo uvedete v AWS DeepLens. Funkcija izvaja sklepanje lokalno na napravi AWS DeepLens.

Najprej moramo ustvariti funkcijo Lambda za uvedbo v AWS DeepLens.

  1. Prenos sklep Lambda funkcija.
  2. Na konzoli Lambda izberite funkcije.
  3. Izberite Ustvari funkcijo.
  4. Izberite Avtor iz nič.
  5. za Ime funkcije, vnesite ime.
  6. za Čas izvajanja, izberite Python 3.7.
  7. za Izberite ali ustvarite izvršilno vlogo, izberite Uporabite obstoječo vlogo.
  8. Izberite service-role/AWSDeepLensLambdaRole.
  9. Izberite Ustvari funkcijo.

  1. Na strani s podrobnostmi o funkciji na Proces izberite meni Naložite .zip datoteko.

  1. Naložite sklepanje Lambda datoteko, ki ste jo prenesli prej.
  2. Izberite Shrani da shranite kodo, ki ste jo vnesli.
  3. o Proces izberite meni Objavite novo različico.

Z objavo funkcije postane na voljo na konzoli AWS DeepLens, tako da jo lahko dodate svojemu projektu po meri.

  1. Vnesite številko različice in izberite objavi.

Razumevanje funkcije sklepanja

Ta razdelek vas vodi skozi nekatere pomembne dele funkcije sklepanja. Najprej morate biti pozorni na dve posebni datoteki:

  • labels.txt – Vsebuje preslikavo izhoda iz nevronske mreže (cela števila) v človeku berljive oznake (niz)
  • lambda_function.py – Vsebuje kodo za funkcijo, ki se kliče za ustvarjanje napovedi za vsak okvir kamere in pošiljanje rezultatov

V lambda_function.py najprej naložite in optimizirate model. V primerjavi z virtualnimi stroji v oblaku z GPE ima AWS DeepLens manjšo računalniško moč. AWS DeepLens uporablja optimizator modela Intel OpenVino za optimizacijo modela, ki je usposobljen v SageMakerju za delovanje na njegovi strojni opremi. Naslednja koda optimizira vaš model za lokalno izvajanje:

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}) 

Nato zaženite model sličico za sličico čez slike iz kamere. Oglejte si naslednjo kodo:

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)) 

Na koncu pošljete rezultate predvidevanja besedila nazaj v oblak. Ogled besedilnih rezultatov v oblaku je priročen način za preverjanje, ali model deluje pravilno. Vsaka naprava AWS DeepLens ima namensko iot_topic, ki je samodejno ustvarjena za prejemanje rezultatov sklepanja. Oglejte si naslednjo kodo:

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

Ustvarite projekt AWS DeepLens po meri

Če želite ustvariti nov projekt AWS DeepLens, dokončajte naslednje korake:

  1. Na konzoli AWS DeepLens, na projekti stran, izberite Ustvarite projekt.
  2. za Vrsta projektatako, da izberete Ustvari nov prazen projekt.
  3. Izberite Naslednji.

  1. Poimenujte svoj projekt yourname-pedestrian-detector-.
  2. Izberite Dodajte model.
  3. Izberite model, ki ste ga pravkar ustvarili.
  4. Izberite Dodajte funkcijo.
  5. Po imenu poiščite funkcijo Lambda, ki ste jo prej ustvarili.
  6. Izberite Ustvarite projekt.
  7. o projekti izberite projekt, ki ga želite uvesti.
  8. Izbrala Namestite v napravo.
  9. za Ciljna naprava, izberite svojo napravo.
  10. Izberite pregled.
  11. Preglejte svoje nastavitve in izberite uvajanje.

Uvedba lahko traja do 10 minut, odvisno od hitrosti omrežja, v katerega je povezan vaš AWS DeepLens. Ko je uvedba končana, bi morali na strani videti zeleno pasico s sporočilom: »Čestitamo, vaš model se zdaj izvaja lokalno na AWS DeepLens!«

Če si želite ogledati izpis besedila, se pomaknite navzdol na stran s podrobnostmi o napravi do Rezultat projekta razdelek. Sledite navodilom v razdelku, da kopirate temo in pojdite na AWS IoT jedro konzolo, da se naročite na temo. Morali bi videti rezultate kot na naslednjem posnetku zaslona.

Za navodila po korakih o ogledu video toka ali izpisa besedila glejte Ogled rezultatov iz AWS DeepLens.

Primeri uporabe v resničnem svetu

Zdaj, ko imate napovedi svojega modela, ki se izvaja na AWS DeepLens, jih pretvorimo v opozorila in vpoglede. Nekatere najpogostejše uporabe za projekt, kot je ta, vključujejo:

  • Razumevanje, koliko ljudi je na določen dan vstopilo v območje z omejitvami, tako da lahko gradbišča prepoznajo mesta, ki zahtevajo več varnostnih znakov. To lahko storite tako, da zberete rezultate in jih uporabite za ustvarjanje nadzorne plošče z uporabo Amazon QuickSight. Za več podrobnosti o ustvarjanju nadzorne plošče s QuickSightom glejte Izdelajte sledilnik drže od doma od AWS DeepLens in GluonCV.
  • Zbiranje izhodnih podatkov iz AWS DeepLens in konfiguriranje Raspberry Pi za oglašanje opozorila, ko nekdo vstopi v območje z omejitvami. Za več podrobnosti o povezovanju naprave AWS DeepLens z napravo Raspberry Pi glejte Gradnja razvrščevalnika smeti z AWS DeepLens.

zaključek

V tej objavi ste se naučili, kako usposobiti model zaznavanja predmetov in ga namestiti v AWS DeepLens za zaznavanje ljudi, ki vstopajo na območja z omejitvami. To vadnico lahko uporabite kot referenco za usposabljanje in uvajanje lastnih projektov zaznavanja objektov po meri na AWS DeepLens.

Za podrobnejši potek te vadnice in drugih vadnic, vzorcev in projektnih idej z AWS DeepLens glejte AWS globinski recepti.


O avtorjih

Jaš šah je podatkovni znanstvenik v laboratoriju Amazon ML Solutions Lab, kjer dela na številnih primerih uporabe strojnega učenja od zdravstvenega varstva do proizvodnje in prodaje na drobno. Ima formalno znanje s področja človeških dejavnikov in statistike, prej pa je bil del ekipe Amazon SCOT, ki je oblikovala izdelke za vodenje prodajalcev 3P z učinkovitim upravljanjem zalog.

Phu Nguyen je produktni vodja za AWS Panorama. Gradi izdelke, ki razvijalcem katere koli ravni znanja omogočajo enostaven in praktičen uvod v strojno učenje.

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

Časovni žig:

Več od Blog za strojno učenje AWS