Prologue
Tá físeán á scaipeadh anois ar an Idirlíon a thaispeánann conas a fheiceann uathphíolóta Tesla an bóthar.
Tá mé ag tochas le fada an lá físeáin a chraoladh saibhrithe le brathadóir, agus i bhfíor-am.
Is í an fhadhb atá ann go bhfuil mé ag iarraidh físeáin a chraoladh ó Sú craobh, agus fágann feidhmíocht an bhrathadóra líonra néaraigh air go bhfuil go leor le bheith inmhianaithe.
Bata Ríomhaire Intel Neural
Mheas mé réitigh éagsúla.
В
Cé go soláthraíonn Intel tiontairí do chreataí móra, tá roinnt gaistí ann.
Mar shampla, d'fhéadfadh go mbeadh formáid an líonra riachtanach neamh-chomhoiriúnach, agus má tá sé ag luí, ansin b'fhéidir nach dtacaítear le roinnt sraitheanna ar an bhfeiste, agus má thacaítear leo, d'fhéadfadh earráidí a bheith ann le linn an phróisis chomhshó, agus mar thoradh air sin faigheann muid roinnt rudaí aisteacha ag an aschur.
Go ginearálta, más mian leat líonra néarúil treallach de chineál éigin, b'fhéidir nach n-oibreoidh sé le NCS. Mar sin, chinn mé iarracht a dhéanamh an fhadhb a réiteach ag baint úsáide as na huirlisí is forleithne agus is inrochtana.
Cloud
Is é an rogha eile is léir do réiteach crua-earraí áitiúil ná dul go dtí an scamall.
Roghanna réamhdhéanta - ritheann mo shúile fiáin.
Gach ceannaire:
... Agus mórán de na cinn is lú aithne.
Níl sé éasca ar chor ar bith a roghnú i measc an éagsúlacht seo.
Agus chinn mé gan a roghnú, ach an sean-scéim oibre maith a fhilleadh ar OpenCV in Docker agus é a rith sa scamall.
Is é an buntáiste a bhaint as an gcur chuige seo solúbthacht agus rialú - is féidir leat athrú ar an líonra neural, óstáil, freastalaí - go ginearálta, aon whim.
Freastalaí
Tosaímid le fréamhshamhail áitiúil.
Go traidisiúnta úsáidim Flask le haghaidh líonra REST API, OpenCV agus MobileSSD.
Tar éis na leaganacha reatha a shuiteáil ar Docker, fuair mé amach nach n-oibríonn OpenCV 4.1.2 le Mobile SSD v1_coco_2018_01_28, agus bhí orm rolladh ar ais go dtí an 11/06_2017 cruthaithe.
Ag tús na seirbhíse, lódálann muid ainmneacha na ranganna agus an líonra:
def init():
tf_labels.initLabels(dnn_conf.DNN_LABELS_PATH)
return cv.dnn.readNetFromTensorflow(dnn_conf.DNN_PATH, dnn_conf.DNN_TXT_PATH)
Ar dhugaire áitiúil (ar ríomhaire glúine nach bhfuil an-óg) tógann sé 0.3 soicind, ar Sú craobh - 3.5.
Cuirimis tús leis an ríomh:
def inference(img):
net.setInput(cv.dnn.blobFromImage(img, 1.0/127.5, (300, 300), (127.5, 127.5, 127.5), swapRB=True, crop=False))
return net.forward()
Docker - 0.2 sec, Sú craobh - 1.7.
Ag iompú sceite tensor go json inléite:
def build_detection(data, thr, rows, cols):
ret = []
for detection in data[0,0,:,:]:
score = float(detection[2])
if score > thr:
cls = int(detection[1])
a = {"class" : cls, "name" : tf_labels.getLabel(cls), "score" : score}
a["x"] = int(detection[3] * cols)
a["y"] = int(detection[4] * rows)
a["w"] = int(detection[5] * cols ) - a["x"]
a["h"] = int(detection[6] * rows) - a["y"]
ret.append(a)
return ret
Tuilleadh
Rogha eile, ina n-aistrítear níos mó oibre chuig an bhfreastalaí: ciorcail sé féin na réada aimsithe agus filleann sé an íomhá críochnaithe.
Tá an rogha seo go maith nuair nach dteastaíonn uainn opencv a tharraingt chuig an bhfreastalaí.
Docker
Bailímid an íomhá.
Cíortar an cód agus postáiltear é
Mar ardán, tógfaimid an Debian Stretch céanna agus atá ar Sú craobh - ní chlaonfaimid ón gcruach cruthaithe teicneolaíochta.
Ní mór duit fleascán, protobuf, iarratais, opencv_python a shuiteáil, SSD Soghluaiste a íoslódáil, cód freastalaí ó Github agus an freastalaí a thosú.
FROM python:3.7-stretch
RUN pip3 install flask
RUN pip3 install protobuf
RUN pip3 install requests
RUN pip3 install opencv_python
ADD http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_11_06_2017.tar.gz /
RUN tar -xvf /ssd_mobilenet_v1_coco_11_06_2017.tar.gz
ADD https://github.com/tprlab/docker-detect/archive/master.zip /
RUN unzip /master.zip
EXPOSE 80
CMD ["python3", "/docker-detect-master/detect-app/app.py"]
Próifíl
Foilsitheoireacht chuig Docker Hub
Tá clárlanna duga ag méadú ar luas nach lú ná brathadóirí néil.
Chun nach gcuirfí isteach orainn, rachaimid tríd go coimeádach
- Clár
- Logáil isteach:
logáil isteach docker - Déanaimis teacht suas le hainm brí:
clib docker opencv-braith tprlab/opencv-detect-ssd - Íoslódáil an pictiúr chuig an bhfreastalaí
brúigh docker tprlab/opencv-detect-ssd
Seolaimid sa scamall
Tá an rogha cá háit leis an gcoimeádán a rith sách leathan freisin.
Tairgeann na himreoirí móra go léir (Google, Microsoft, Amazon) micrea-chás saor in aisce don chéad bhliain.
Tar éis triail a bhaint as Microsoft Azure agus Google Cloud, shocraigh mé ar an dara ceann toisc gur tháinig sé amach níos tapúla.
Níor scríobh mé treoracha anseo, ós rud é go bhfuil an chuid seo an-sonrach don soláthraí roghnaithe.
Bhain mé triail as roghanna crua-earraí éagsúla,
Leibhéil ísle (roinnte agus tiomnaithe) - 0.4 - 0.5 soicind.
Gluaisteáin níos cumhachtaí - 0.25 - 0.3.
Bhuel, fiú amháin sa chás is measa, tá na buaiteanna faoi thrí, is féidir leat triail a bhaint as.
Video
Seolaimid sruthóir físeán OpenCV simplí ar Sú craobh, á bhrath trí Google Cloud.
Don turgnamh, úsáideadh comhad físe a scannánaíodh uair amháin ag crosbhealach randamach.
def handle_frame(frame):
return detect.detect_draw_img(frame)
def generate():
while True:
rc, frame = vs.read()
outFrame = handle_frame(frame)
if outFrame is None:
(rc, outFrame) = cv.imencode(".jpg", frame)
yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')
@app.route("/stream")
def video_feed():
return Response(generate(), mimetype = "multipart/x-mixed-replace; boundary=frame")
Leis an brathadóir ní fhaigheann muid níos mó ná trí fhráma in aghaidh an tsoicind, téann gach rud go han-mhall.
Má ghlacann tú meaisín cumhachtach isteach i GCloud, is féidir leat 4-5 fráma in aghaidh an tsoicind a bhrath, ach tá an difríocht beagnach dofheicthe don tsúil, tá sé fós mall.
Níl baint ar bith ag na costais scamall agus iompair leis; ritheann an brathadóir ar chrua-earraí rialta agus oibríonn sé ag an luas sin.
Bata Ríomhaire Neural
Níorbh fhéidir liom cur i gcoinne agus rith an tagarmharc ar NCS.
Bhí luas an bhrathadóra beagán níos moille ná 0.1 soicind, in aon chás 2-3 huaire níos tapúla ná an scamall ar mheaisín lag, i.e. 8-9 fráma in aghaidh an tsoicind.
Mínítear an difríocht sna torthaí ag an bhfíric go raibh NCS ag rith Mobile SSD leagan 2018_01_28.
P.S. Ina theannta sin, léirigh turgnaimh go léiríonn meaisín deisce sách cumhachtach le próiseálaí I7 torthaí beagán níos fearr agus d'éirigh sé amach go bhféadfaí 10 bhfráma in aghaidh an tsoicind a bhrú amach.
Braisle
Chuaigh an turgnamh níos faide agus chuir mé an brathadóir isteach ar chúig nód in Google Kubernetes.
Bhí na pods féin lag agus níorbh fhéidir gach ceann acu níos mó ná 2 fhráma in aghaidh an tsoicind a phróiseáil.
Ach má ritheann tú braisle le nóid N agus frámaí pharsáil i snáitheanna N, ansin le líon leordhóthanach nóid (5) is féidir leat na 10 bhfráma atá ag teastáil in aghaidh an tsoicind a bhaint amach.
def generate():
while True:
rc, frame = vs.read()
if frame is not None:
future = executor.submit(handle_frame, (frame.copy()))
Q.append(future)
keep_polling = len(Q) > 0
while(keep_polling):
top = Q[0]
if top.done():
outFrame = top.result()
Q.popleft()
if outFrame:
yield(b'--framern' b'Content-Type: image/jpegrnrn' + bytearray(outFrame) + b'rn')
keep_polling = len(Q) > 0
else:
keep_polling = len(Q) >= M
Seo a tharla:
Beagán níos lú tapa ná le NCS, ach níos fuinniúla ná in aon sruth amháin.
Níl an gnóthachan, ar ndóigh, líneach - tá forleagan ann maidir le sioncrónú agus cóipeáil dhomhain ar íomhánna opencv.
Conclúid
Tríd is tríd, ligeann an turgnamh dúinn a thabhairt i gcrích má dhéanann tú iarracht, is féidir leat éalú le scamall simplí.
Ach ligeann deasc chumhachtach nó crua-earraí áitiúil duit torthaí níos fearr a bhaint amach, agus gan cleasanna ar bith.
tagairtí
Foinse: will.com