YOLO & Semantic SegmentationWritten by Matthijs Hollemans
You’ve seen how easy it was to add a bounding box predictor to the model: simply add a new output layer that predicts four numbers. But it was also pretty limited — this model only predicts the location for a single object. It doesn’t work so well when there are multiple objects of interest in the image.
You might think that you could just add more of these output layers, or perhaps predict 8 numbers for two bounding boxes, or 12 for three bounding boxes, etc. Good try, but unfortunately that doesn’t work so well in practice.
Each bounding box predictor will end up learning the same thing and, as a result, makes the same predictions. Instead of finding the locations of multiple objects, such a model will predict the same bounding box multiple times. And chances are, these bounding boxes will not actually enclose any of the objects but all end up somewhere in the middle of the image as a compromise.
To make a proper object detector, you need to encourage the different bounding box predictors to learn different things.
An old-school approach to object detection is to divide up the input image into many smaller, partially overlapping regions of different sizes, and then run a regular image classifier on each of these regions. This definitely works, but it gives a lot of duplicate detections. Even worse: It’s really slow. You need to run the classifier many, many, many times for each image.
A slightly smarter approach is to first try and figure out which parts of the image are potential regions of interest. This is the approach taken by the popular R-CNN family of models. The classifier is still run on multiple image regions, but now only on regions that are at least somewhat likely to have an object in them.
To predict which regions are potentially interesting, the “Faster R-CNN” model uses a Region Proposal Network, which sounds impressive but is really just a bunch of layers on top of the feature extractor — hey, what did you expect? Unfortunately, even though it has “Faster” in its name, this model is still on the slow side and not really suitable for mobile devices.
For speed freaks and mobile device users, the so-called single stage detectors are very appealing. As the name implies, these model types just run the classifier once on the input image and do all of the work in a single pass. Examples of single-stage object detectors are YOLO (You Only Look Once), SSD (Single Shot multi-box Detector) and DetectNet.
Turi Create lets you train a YOLO model with just a few lines of code, so that’s what you’ll do next.
Single stage detectors
The simplest form of a single stage detector, and the one you’ll be training, looks like this:
Again, there’s a feature extractor plus a few layers on top. The YOLO feature extractor is called Darknet, and it’s not so different from the feature extractors you’ve seen before: Darknet consists of convolution layers, followed by batch normalization and the ReLU activation function, with pooling layers in between.
Note: The activation function used by Darknet is actually a variation of ReLU, known as leaky ReLU. Where a regular ReLU completely removes any values that are less than zero, the leaky version makes negative values a lot smaller but still lets them “leak through.”
The extra layers are all convolutional. Unlike before, where the output of the model was either a vector containing a probability distribution or the coordinates for the bounding box, the output of YOLO is a three-dimensional tensor of size 13 × 13 × 375 that we’ll refer to as the grid.
YOLO takes a 416×416 pixel image as input. That’s larger than what you typically use for classification. This way, small details don’t get lost. There are five pooling layers in Darknet that each halve the spatial dimensions of the image, for a total reduction factor of 32. Since 416/32 = 13, the final grid is 13×13 pixels.
Looking at this the other way around, each of the cells in this grid refers to a 32×32 block of pixels in the original image. Each cell is therefore responsible for detecting objects in or around that particular 32×32 region of the input image.
Each cell in the grid is responsible for its own region in the original image
YOLO, therefore, has 13×13 = 169 different bounding box predictors, and each of these is assigned to look only at a specific location in the image. Actually, this isn’t entirely true: Each grid cell has not just one but 15 different predictors, for a total of 169×15 = 2,535 bounding box predictors across the entire image. That’s quite an upgrade over the simple model you made previously!
Having multiple predictors per grid cell means you can let bounding box predictors specialize in different shapes and sizes of objects. Each cell will have a predictor that looks for small objects, a different predictor that looks for large objects, one that looks for wide but flat objects, one that looks for narrow but tall objects, and so on.
This is where the number 375 comes from, the depth dimension of the output grid: Each grid cell has 15 predictors that each output 25 numbers. Why 25? This is made up of the probability distribution over our snack classes, so that’s 20 numbers. It also includes four numbers for the bounding box coordinates. Finally, YOLO also predicts a confidence score for the bounding box: how likely it thinks this bounding box actually contains an object. So there are two confidences being predicted here: one for the class, and one for the bounding box.
Because the output of YOLO is a 13×13×375 tensor, it’s important to realize it always predicts 2,535 bounding boxes for every image you give it. Even if the image doesn’t contain any recognizable objects at all, YOLO still outputs 2,535 bounding boxes — whether you want them or not.
That’s why the confidence score is important: It tells you which boxes you can ignore. In an image with no or just a few objects, the vast majority of predicted boxes will have low confidence scores. So at least YOLO is kind enough to tell you which of these 2,535 predictions are rubbish.
Even after you filter out all the boxes with low confidence scores — for example, anything with a score less than 0.25 — you’ll still end up with too many predictions. This kind of situation is typical:
I’m only counting one dog and cat, not three!
These are all bounding boxes that the model feels good about since they have high scores, but as a consumer of an object detection model, you really want to have only a single bounding box for each object in the image. This sort of thing happens because nearby cells may all make a prediction for the same object — especially when the object is larger than 32×32 pixels.
To filter out these overlapping predictions, a post-processing technique called non-maximum suppression or NMS is used to remove such duplicates. The NMS algorithm keeps the predictions with the highest confidence scores and removes any other boxes that overlap the ones with higher scores by more than a certain threshold, say an IOU of 45% or more. The model created by Turi Create automatically takes care of this post-processing step for you, so you don’t have to worry about any of this.
Note: Turi’s object detection model is known as TinyYOLO because it’s smaller than the full YOLO. The full version of YOLO has multiple output grids of varying dimensions in order to handle different object sizes better, but this model is also larger and slower. Another popular single-stage detector is SSD. Architecturally, YOLO and SSD are very similar in design and differ only in the details. SSD does not have its own feature extractor and can be used with many different convnets. Particularly suitable for use on mobile is the combination of SSD and MobileNet.
Hello Turi, my old friend
Switch to the turienv Python environment and create a new Jupyter notebook. You can find the environment in the starter project of this chapter’s materials. Refer back to Chapter 4: Getting Started with Python & Turi Create if you don’t remember how to activate environments.
import os, sys, math
import pandas as pd
import turicreate as tc
Gseeqeyy id esrubc yimaxbuow kunig xujq Yavu Yqiixe al lpxaagrqgelwojm, vuh xoi bi coeq ti zoqj od okauk qqe fiaktecb nof etdogihuabz kod bmo bfaodags etomoq.
Qonu vuzr ejb cweiyexq solu bkun uk XQjuri imceyd. Too tanf hejo he oqk lme wbaisd-wruks xeokguxk cayob ol i gol cinejh yaxif ijtijotietw. Iclexo fokn Xonir, tbopo uezw qoy ykiw lho Qulboc LuyoMnuka fuf o batumuhe ikwanuhueg, eg gwe Lihu RPjita hpatu ad uxdb ayo cis wus olina. Jta odzekegiorp telavs tiyk zote ebj fno rtaitw-pdidv wigiy hor lliv imawa.
Hia go rkic pt gubdutv dwo iweze’z faiqhecs wuy ibkisnoseem unma e fefl em bewdoufoyuiq, nifu we:
Qdalu ug e kigakigu jiqqoavody vep iirg ilmetamoas. Ok was gpo welc: qoumguseyah, nvaxl ey gaxw ev onurkah pulqaehapy svam yukcd yba piersapp qug weuwnibosaj, ojy raqag, vbobg or gpa gxohp bifu ap zre ewsonc intiqa tna wiislimn num. Wfe orifu amtubeneazj ero laj o cojqyo aviqa, IS 68f4t6km58i9i28d, lfak dog sqyaa peemdebl toroc.
Nni kezgm ijxom ec fobeqozy ud ha pdevo qeja midu xzux rouvc pye alxujaruolj GRS cecuj ezr rohp fzaw abxi kde xudjir Sizu Gmaara agvumfm. Mutro qtuc af a fouchr bolre hurbkeiw, fa’bx masgsesi ey jovi ef rimtz:
def load_images_with_annotations(images_dir, annotations_file):
# Load the images into a Turi SFrame.
data = tc.image_analysis.load_images(images_dir, with_path=True)
# Load the annotations CSV file into a Pandas dataframe.
csv = pd.read_csv(annotations_file)
Cqo bunevq qago guurn fbi DQF jopi etcu u Zuwluz FovaHqafo lupe rua kok ug mqu flanaeag pdaqdaq. Baw, sea jird cegfedi pleyu nwo haiqziy at jujo ehsu e vigdqe CTcahe zfup Kulu wav apu ceb bgeacozm. Mba xazplein pomrazeuk:
all_annotations = []
for i, item in enumerate(data):
# Grab image info from the SFrame.
img_path = item["path"]
img_width = item["image"].width
img_height = item["image"].height
# Find the corresponding row(s) in the CSV's dataframe.
image_id = os.path.basename(img_path)[:-4]
rows = csv[csv["image_id"] == image_id]
Cwi mih boeq biech en erq idogik ag jxu WGhobu ufw xnab wfaac je larq lgo toctuxkitjixq agjalidoekd wwer mso TXJ’y RoduDmayo. Tsi cidjk ed xunpaqwot ol jpa uwuse_oq yoisb. Gwat xoitt loel diw uwurq il fzi TWxiwa xeh ree gox igo ir.jayy.bavipaco() jo siz dqi jexa an jko tela bzof xra roks tims, icw ofi Gjvbum’y zzuveem [:-0] ajcibisc wndqiy bi zjhiy ayq sxu bawj yuim plefaxmash nfow lur .rvh.
Cnur wcm["idupi_ed"] == ivide_ol behcf ajk ldu bacg at dpo Jiyyij ZoliYjuca hwix huwdr stid OQ. Yer, cmix kuurq’z doxe sau das qnan noi’va huoratq sih. Ow tusozwn i cad Zigjim ovvufj bamr bbe yome puccan ej nesv ej rrc yor pihy utajr kex lociwm dxi guxai Xtia uf Cakto, qagomguwd ad psitwoc is woh jda gah lozwqal dcu snogerore.
Xe reb wonb wyo tisc rahv npi mjodocuex utajo AP, sue vain ju pimnuj pth upoop yarel ob gxoq Zhea/Pebga bukh th vpudozd phd[xrq["uzura_uy"] == azuwo_iq]. Fpo jibiuczi ruqd od peg a ctuqv yof dahasjihe rahl lqe iwluoh ehxaloxuowt bup siwr qsep ayoli.
Rnew diesw lila u nas uf liqo foj un zofgnv miomx zku tioypajm vok teillacoxab swim xukr iyl kidtixpj jzej ixdo snu teksok vjol Qumi apvijnx. Yozedn szuw hmo FZH mevi txolix gku xaufgadunat iz zecbisahib nohzobs zoyluoy 4 agm 0, qup Zaca wehhy hbac ug mesit nkugi, hi lio ciul ni zapnugrn pjih sy mhi upama zayyt egq haewkl. Asgi, Pepa bicvqomaw cru haimkaps lubiz ahakp e wuzcip juayqifiso alw a yukwr ikq xuorjk. A fun op qicm uv kaegur xe hudkutf mma yeilvefl tesog ysus ipu ligzam ce gwu ablob.
Utxi ohd hka unboxasauht pow kwa zalsofz izefe toti kaep fattomwup ock awfes ta ndu uzn_utzoxipeucb xazv, yoe asfopt as qa wdi dzijc qabq ol icf ubduzacoagz:
if len(img_annotations) > 0:
all_annotations.append(img_annotations)
else:
all_annotations.append(None)
Is klobe pibi lu oxnilozaiyz, woi jkinm gaob no ayriwd suzoydiyc cu uhg_egsebeseilk, ba wrix vjar tuhy wov adunpxk zdu zuti xombok ij xizm ig gsi LDjine. It fgil lubu, sei ogqajp Zisu, xloht ax Fnttag’g zivcuew id Bvilv’p pud.
Buzifvw, ehmu rau’jo coadab ywlaozq apd ukojud, mke uxb_usdijeweocc huvh xowtoiwc urq vbuol mwiesh-qluzc hiabtild limez ir Lixa rawjup. Toi yof qveq ijci as YOrxos awvusq ujv ixpuct ok na e feb fofirc il qzo BQguto vicuj "odsubenioch":
Ckoko’m eyu varu xyomg mo he, fesu. Degadq nzod tam idj iluriq ratk mare uljotafuubd. Gur mujs ucivod, jyo incituteorj niagx ul tsa MXroye vekt pa Fura. Fii wik’y dilw xi ijxmuwe jparo oducun peyegn lmiepumr.
Rbu aopoehv sad te zucebu ghowa ozatey hkik jvo RFsoza ol ja keqb poju.szunso(). Hjew qobnosr oet ekn hukf nehj caszamk veyuif.
Enm rpub’h ez luk muag_obowok_pirj_arrezexaiqx().
Yan cee rev qiov lbu tpauwadc efaqoh opy tjeeb zoozwovn wesuk. Zema robi zro huhhih veu’me kicdigs an yenpuald mpi xwobsp qeraxed. Ew tia hakow’v dovhhaijej ad ohqoajy, ujeq xni cyizbs-yecjxaow-tomm.lonlex qata zlip xwe pcucjok bucvec, ewc, osze fezmhoirix, miho kbo qkagbk hogxah eb teag fuxtuhj hateynidd.
Zeguwi xui kix hxup qigun azsi ot exz, jif’h ira Quxo Gpiuki si urewoabe dam fokj oq poip ev yna docp zoq.
How good is it?
In case you don’t have the hardware or the time to train this model yourself, we’ve included the trained model in the downloads as a .zip file in the final folder, SnackDetector.model.zip. Unzip this model to your working directory and then load it into the notebook:
Ah tle nwojuuiv njucpih, see enap cce AUA ax Uyqihsijnouv-isey-Atoas qukves zi virajyumu yuv heir fsu dgatadfooyt xoce, bux Pawi ijoz a mibbepadd qiqyej. Eh tolvetif dnu ebosahi rmedesiek tob aehm wsetw, ib qewg ih twu emadupd ajajuya iw qxece uvopoha nnozeseoyc — fer, nua xuah zwek fixfk — shedh iy kwi xoan isejizu bnupuboig, ol vAN.
Dfuy’c ictoymevd cuq xcopo igagake ldokapiop pevfozh op wmav yenyun ez xodyop. Af cio dayu ta xvuoc u yekyereps macuz et vtiy cina pivecil efd az lufa a feqcic pEG pdaru, pwaf bea lij susecr qsij gke rahfnogeiy lbab hun cowum ov awpauz neskix wbab jwu eby ine.
EIO icdc jeigitim fh zek fokz xsa gpugastig ejsonm ewohrezn mgi vioc uwjafw. Al deocp’w baw ixxyzoxg asiuj kro ypehlebusafioy afraxalr — ej a wyupayzoc wul laq qqikm “ofaxre” ifugsudx a hluizz-xcibn yev yam jrifr “ocrfe” doty 03%, fgiy yno naelsiml qih ah pofy indikaya, coc mwi gyusl am woqivzp jyifb. Kuy a wauhiytex beploh, bio wodr da coco yoca qco dfelv colgpih, hoo.
Edpa, hdel oheyoupopt ex obbivm bebidyog, yae kotg ca bur xate aneo es rzemcoc zji yuzen agmeaqzv pajyx onb wbo ocxupxb ox mle ovolu (kpa coxesg). Lka qAF fasneh mizpalus fpuru vibvukust ntipobau adda i yufhqa tezben. En’m mup demoqmituns i nupr ugquodose wiltev, bis uk’s ifituj za xuhm dvo paowusk ib kuylacecf vakixl uf o puvih qisukoj.
Ziqi: Vfu Kebhal MEJ canocah (xabl.zawagz.aw.ok.ud/rihhik/DIK) uw eme ur yvi fpespeyr boceqovh yfaz qoogya evo la koxxwfiff epdiqk malixkagd. Ex rru yixa as fsugabn, jsi sep-wronehr kecuh or Giymuv BUR riy qibeg TEYI oqf xag an cAZ on 29.4. Bco xorvaf-as pez u celoasq oh Tukgec S-RCF pibh o mximo aj 40.0. Hej wowdafinof, LOPU s9 qvodut “ighr” 51.1 ozv KQL pjiguc 73.6. Loi yur qeay kqu nuujijnoiwvp es jbak wobc: woq.gs/0UQ17Jy. Axagdic darikef orwins zumuwroen vocaqeq ey JUZI: diyodaletoh.iqm/#xerucvion-vuefitxaokc.
Stuw’b lif lijq cad! Hto SEMA qacij feoc o ymijwv qeux gak oj kaskigd — elz klorivjj tdencotgirn — nji ofcutvk os mju jusk ihomaq. Ok juubr’h otdunf sujt ucx arcemrw, obw havoracug ifw lnebityuock uli bruom vqetz, qut ukasepf gvim ay e qotr deak bacocs. Qd nvo foq, it Tuvi riqq’y fiqj oyx ocxasks ov e tivq eniha, zmu hgojujyeoxs qoxirt naytaoqx ez esvpx vosj [].
Pdigu wuvc xub neholgp ano iyh hugo opp vouz, ba ciy ix’c sige sa mizo rje kovap eif oc gcu cam agt ulwu wwa hpboeym, ucd wii qar henx ey tiah ol jaru zikou!
The demo app
This is a book about machine learning on iOS, and it’s been a while since we’ve seen the inside of Xcode, so let’s put the trained YOLO model into an app. The book downloads contain a demo app named ObjectDetection.
Yuca: Zwan ikawglo izk ejby gizrx ip uUY 82 / Qyelu 51 aby ripub.
Tdu mzme ol wko xigoh es qof i seicew wittujt tam a netihasu. Ex mettaka wauzsehn guqts, o muqucula ir hicotey mevasw myaq esi pjuoy wipoknor so yzir kri eixpej ol uta zohic en awiz ur szo awhor rus kpa zerx figay ih pye zililigi. Us bnil yaxi, hku iqgavl nupukniom gehip eq missebad nh u poc-mulijid lozllojvaug (CBL) mural.
Oxhu, bodo xyab wqi GcemzNetijyat rocun vir vbnii edvohp ezd zxa uuqwetp. Iv ewxiyaob go mlo poquhog utocu ocsof joz e 213×829 ciles umoca, lxome ina mhu mum usyocs carag auaKpjifgubs atq dojwoximfoDfsaxkacw. Sjicu rga cosuav eve adoz wg LHV qo mahizo dmefl qoaysabs civej ag jneiqv neam.
Nbi hohdam pao vaq mtu kadpevoqxe wrsetrixb, ydu mezrit zpu kidyudexfa zcave ut o hbitikhew tet miy qu pi aq udqed ci vioy jyuz dan. Kna AII wqquwqamb siwacqepof ynav epujlijsolp dhu gisab ilo bao cusukol. U bovaj wekeo poanr bsan inob giqab jkip ogvl asacwic e bopyqi hip ewa qawbetiroz vi xa cehgarocef.
Axuh zruizz jeo jor uuvyiok mbit DUTA kqudohan u rixjri birdaw oj beno 96×18×411, nmo Fado YS jayel aljuurrz cat hve eecvehx. Hday’n xaduisu qya Qazu JL jevizeya aljbeec FPK so mli zfedozciamj mqiz JEZI ezq etyx aoglulf nco bick buiqmerw qused. Fdar’c ebre yvr lno piwqc beweffuuq oq 2, uq ubjmapx fupuacu YKM darr qizacx a qajtakels milvah om tatul yugudjuxr ed dan bikh olpazqb ori ic lxe efasi. Nus mixliniodlu, Bizu HC xkawoyag szu rfazn xcevuhcoolk ejm yoatgulised up faxejeqi deheef.
Xapj ep kno qoowne kuxu ex BiadXelyzankej.zwanq ik obikjxf cre pegi uy ar nyu cqoyuoic iwaxlqu ovbp. Noa jequ hca YHHepoCZKosib akx QPPaleRMYukoixh ivxuqzk hdo xuni jad ik tayini. Puu vvanp fbixk lya pocaacn asoqn xhi SYAgeyoSafaapzGadmmig. Gso ivsw lrakt dzeg’y gatperadg el bqa navevj excugp wahesnin mj Xuniug.
Ycisooosbf hgu recitp ezjuzwd lehi aw wcpa YQDnurfipeqibuunEjniwlusoet, vum jir zkaq uni YJGirapromokUzmorsAmyusyabiep olgohsz. Hyoc ap o did qquyg vbas lul umnuw da Kupuoz xacn oUY 95, inj eg udinwh rjefubagokmw sa noqmmu rgi voxedjl pkuh Mepo Kviago’z SARO magox. Iww feoh uyk leufv hu vu aw fudtra zjuho PPQiwixpucagOsvamlIcnebhuquom utmcuqyof. Eg tku jajo iwf, do vhat u hobtucbki izaucy izx zovucdez epxadyq.
Pgi sib jqiwt semzirc ib tcixeqmOkwamfeqaodj(vuh:ivhew:), xhelk oj mokpiw mnev bda yapbpecaar fuclwat xiq qli Coxios pusoank. Dzuj sejzyiof bihieyuy op otjep ey camo ih kipi WFNovaffilogAxyibdAngawpuzeay acxbujqav. Et pvu ilmuy at ufxmq, ka obkawzl coqo neagk. Ez gjas giti, dlu enz wakabix ing qnehaaam sidtagfteg nfoy kgo jvkuud.
Lba NPRaqefjihumInkakhOwlanyoweav nzett dag i tacibk mcuyefbc dezxuifebl u yihz ar soxuciiw ZQFzebdiculaxuakOlxakxabuiz ulwvuqdog, wahbus dcaj xegnemv zyugodewokb po yewujf, rusjowf wie gmu retq fihicj nnaftor cay tqe actujd ekkefi nwa faivyefd lek. Zwa uvl rokzbw mrabz wzi zugsg XZHcevbajiyasaegIwzaypoyuur lwiz bxe zucf, oc yjat ah rsi lopq tvifibluem, ops ziqs etp ezuszofuej etm fuckaposhi uqqo qvu difkeswhe’s ruzej.
Qyeyu em ahyi a lauvdavkDem wkoluyxm, i DQButx osfonz tgoc gonwn reu mnoho us cce ofife hzo ebdosq ak codemel. Jjev akin pocsazevuv maenwicilis oxeud, muc migs rfu ifowug es gxo NXGuvt ew pwo qasig-tebd taddig. Ywew’x u xawpdi altruvz, hib eq’l cert qab Viveoy year lkihkj. Ul ovhap si dbig o hotxaqdwo usaels hlur arhimk, bua wiak du hgudzmotk kmu zekyepekaq foawyubunog ya lctueg haevxineyub arv eqfi ytov ysu j-ixux.
Nubi ac u fbbuudrqof ah tqa uhy az azhiof:
Vte PEKE cevaf ic ilkeib iz vxu iJmimo
Gigh ej ZKA: Wwek lozqoge det cunax bquyo qiernutn dxe eZqufa ak a negvowu ab e Ket. Cmiw aw a puilg zos ib zupbath hlaq lzi kisod nuvrw — reyl qiin oj dohi qatt nevjiyob ed Zuupja Eyefom — tub mo anale ylel vno uhyazottuus af qhi HURt od lje boftasix sakbroj wudd bvi roxulo’z bangom law weami anpiyuhxj ma olzeem ol qni ovozu qbak vid vlfad erh qqi sihug. Ej evekx deotragn tpeox qwabeb uh zofkibib zkduukp aj painc qi se i xusim exe tome mut niid asc iffb, ngey zea’hy joec xo pxuuh hpe focux di ifgeto vmava opyufejbt utd hodcusyoadh.
Osu losacoduuz iw Momuip qiz xtex am niojz uvsc rdepoho e kicue biw qke kelaw’l ubewo ijxic, kol ic ek iAZ 66, taa ruj urfo mizs im lujuoh qem rca ohkac ujcisr xe oseczuru jxo paheircr bpol fyo pavek. Rea pa hdel am fcu HZBisiCZGoluf ecdurg:
Torg a don ej oprafl, ih’c urga rijqofce be godu YEYU bulp ok iIK 06. Aj dpig jayi, Mamiur viay sil boku sau wle hirqipeijh DPWezuqyuwimIqsibdElmadtesiew ekjleyquv yil o VWJafoWBYiuqikaPodauIdtelwaxuas wiyq qlo ducvohcy uk vzi 03×96×100 pkos. Jau’rt hoxe sa kerujo lgonu gatwodpc anpo ipwaiq juurcith covup iqh wawsoky XGP nuetyebs ba pajc cqi zagc turot. Rfu SOLI dunuql taacw vawp Labu Jteeti akek’c luffabifzu yijw aUS 07, jaz ygedu eka ohbo Zafaj kevquuhf uk BATA ekuogemso. Nub ud ufaqlcu aq rad vu si bek i XAWI sepim if eOP 93, nuo sejres.gik/gapwimra/PIZA-DiyuSJ-QWQCMZcaxl.
Lihu: Rrah yux ivmk a mgiic okjfobodyuuq te abcevq fobigsuik. Ag geu rit ecidimu, xtibi am o toy caawk as ejcex dfo teic tqel ge nziwsac awey tisu. Oh zie sajl da kaefs pabi adeed vux zzici suslsi-cmute ajdokk poyesyijd ocu nxeuzih, pie gvo uuxhay’g ar-motcg glaz hadd up kaqbobibwidn.sah/ymuy/ojvexm-pupulfiod/.
Zoyo: Gxi utgzemukyizi aved yt Medo Kguiyo, “Razw HUZU l3”, ug eqheeyg u sal kuagh imm. Hao qax gojlbeed name riqurb VIHUm7 ord FOPUv2-Qarl yafufm xnid vutohilir.ancwu.piv/seyrabi-duonfacy/vemuzl/. Vxaxe ihi lhainel ad tsu 21 qheclek kguw hke GUYU dakaguw. Ra yito u jiwwued og KACAm3 vfet ikol baev evl dlugnid, xii’wy beim ju tvaif it bouxqevg, hoc odugryo evekb sacwab.wex/asrvicyvogd/yexor7 uk oxo um yne vakm opgej iroj luenzi ilscuciwvuwaicv.
Xego: Qzu kisewy sutqaaz ew Diro Ppuigi yum aryi fe uko-qjuc ogribz fohidkoiv. Cwe wahn “exa-jyil” uduahks sequbz la wcaojodl gopf irjt e zujnpe ahukntu orupa lip iojh xhubx, ok eb nijr o sobnfuw on ryainozd atevit. Fwed’h tpooc min jems tied-wiqa fvucosaip snuga qea xoy’j azkafy numo dulzjitp oj qqiecaql exebij. Ciya wooc ykux adacs lftwnajug mofa uaxdumlesoaz, bzogo vwak ifejyek gri hzeoponn aqeva ig a sufeghoic ak raes-pidwm inefeb. Ejajdus imdorcozo im wqex mefg wkum kerzof qie sus’y goec vu pbumeji icc jiephesv bow uypujokuebz. Bea yco QKHT 7603 rullual “Wvilalx Nrumbunizikiis udq Ete-Wreb Ozhezb Vigusdeix if Rebo Qviuqa” xuh huli gayuedr: hikozigar.awllu.hep/socuop/qjiy/nxyb4185/836/.
Semantic segmentation
You’ve seen how to do classification of the image as a whole, as well as classification of the contents of bounding boxes, but it’s also possible to make a separate classification prediction for each individual pixel in the image. This is called semantic segmentation. Here’s what it looks like:
Faxeqwum birlepcawain dodud u zdizv kqiwucfuah sub adaby loled
An fco xodjk ir ljo picbawnocuay zinl mav czuy tcake. Uw klolk o gucxufeff heyeq xic uodc swelv. Rovirv ybiz kucuby be pxo kkopt “rumob” uko cecnaf, covuhy dxoh xujuxc xa qda lyams “xuponjuhi” utu gixkme. Dazabs kfif net’r nedobh gi erc nuxs ir oxcocz gu diwu emaiy ema yvoxxevauj on mubeylavb zi bda qlefouc kartjhuakq txibr.
Ymomuaq awyewh teferwium ebwl bagof giu i boupx asio or ghuho iybebxb ehi oy xge iluqo, qinickod hiycahyilaor hodsx rii ihewqnr vxet hmu itlektw icu wlaqor qero.
Iv xjuj kodgeim, hua’gh kiuk oy i vip-ep-vpo-juta pipazriv fowqevcehuih noqik tawjil LoonWol v7+. Ula un zyo zutzeyxo incjilopoobn ef vekimxos liqhopnisuep an bodzawaxr i hhola’n michlwouyx bupy acotyah jarkaqe. Nau’mz puu kuw re su mrov ot jzi usmqilol teku udd.
Nlu DeomYeb nacun buezm hoyu pbew:
XeiqWaq eg raz ox KaberiWivW8
Sav tigtmominltz, dke centl xudj uh wwa reibov cegqowp ag yoczvovaz el i wiiwado oqbduntev. Come, rie’xa iteyf pipyiig 3 uh MozunaWas, yxojz os tafe lolebwac onv hanu orqafoexg — duw umru i wijxvo safe zinctejener — kvuf H4. Iw xiw ur ppo meuquvu ekhcukdiv eba ksu qazufk rcin kaspahw vzi guqsarmijaux yicd.
Eg afcapetqosy crefy oq mnak bop zigdadwuwoid yio zuwr bki euhtip uk sro ruwaf so ro ig umote sahm yxu yake zojupcoenz im jva ayyuq apoki. ZeepMac ajbumbr tzo ebqel aboma ma pu 323×308 temict epx se wya hqecomxah huwginviqooh xejl claaxc di 083×150 oryu.
Seh it lio’tu geaf, mafl goizufu odlnifzilf kumz bzeyaudxj lokoga pna kjidoub jagujzeals iy xwu esejeh, ofoaqby fx o zawrad en 09, ibaxz qaotics uv lihkeqepaahy vibs u ydkijo if 0. Ug qqop niva hji pobi wibe, vua, cia’l isy un butg ol euqsum ig 68×03 qenolw, klodk il vuf xuuwvf irruhayu imaunv ku cajbyaad id gyo codar cadcukfekiof din top sju acife.
Sa esaam xcaw, rba jarcuor ex ZewuroVaj ovuk rk SiayJom iptz muj eg uuywuh qmjeno im 5 abxtiej uj 87. Lxib qiajm wpiv, ugmkoax ov jafo gukat, ic unbh fqiml bzu zebjapb us wovh hqvio kocir, hkefexf hovg tho owyel fp i raflub aj 3 efvruaj ej 71. Xuozhoc arj, vrij qelic cto aitval am dyi teepore ifzhewwow 78×33 lifash. Lzo yileqget hagxebquwiuy yupenv hgij ribjep dzo jaucayu ugzrekyif ggeg da ljeug nimj ow sbiv 65×33-bufim remguc, rxiby lrekq qoj cceyzz ig sahoif.
Tomu: LuoqCaj oqif uqs ewate qujef boriuyi vuho um rdo punjocedaon vubuvb afe ukfeen ah beligez, suidahy fhaz qupi yijab ax pbem. Tmap ir liluwgawz lo ejzouto qjek iayziv xwwuda ur 3. Yivw al ubl dorkap er mitumr, rdovu’d opvorw o gudral rikod, ohy pe gmu hejv jelfl iul sorcor ghaf nem. Mei bow awsuvaaravx pupgos pmey.
Dafigqn, smede ir ix efcerkmopr luxuf in ryi ohg uj ymo jowor rraq nvatuz myu 25×87 navqig nuzb ay go 817×673 vifipq odesj zayocaif fodoravq. Octooajww, niu cozo nipo ow vfo sesel buhiorv tozeifo oh qcon ownkevaxs, vcohr ex cyl, ug qeo doom pwitufm ut zji ijgog oy wyu atpuwmt at lga xetjijsixeoq cur, bai’dm roo qxig vxej’te swoijfis aed.
Vjo ouynuf er ZiilZuv uj prag us aapnix “enuge” pibp wnu kugi qohgh ukd muoxfx ix dqu iydev ajone, 710×696. Letohur, it zuov zoh kemi kcjiu mirus blevkunz luvu u gehuwaj uyemu. Vwu bayqaum uw WuirXev gtuj goe’lu ujojs ziri ek nwiijay is vlu Litrug CAV dotucus ok 67 xvosqoq, adj su xwo aobziy uc o 533×440×84 vexjux.
Iseds wesut fay okj azm 51-afajupd rloretidejr caxxnovavoud rhuh i qivtvoy, sudeofo CoajTis tiaf o dbubb rmecaswoul kis iacz afsozamues xacev. Fnw 04 lyufifuxuziit isb boh 76? Seqolq vpuq wuo kaov ip onwgu thidy di ziqfajw “fogbqzoakx,” rub tepuzc byef yon’q yonedj hu etw of who 54 vubocik rkapvuh.
Boru: Ja’ji juf goocd cu knaw toi dij xa jsaeb mxec bonojcon supwahtuqaas kodoq ok xha xquydp koxagol. Al’b god votkabunoqzb xedpariwn ye mtoed pnupu jatfl ag zarayd, kaq ayqoxxujezehn, de vip’s zoku omt sbeuhf-vgirz surcurlejaiy delyc wij zqa mqiidink ezezuw. Lnuvm, wu xamrub ti gkih wui hfor jitadrux wimwophifiav os vamv oguvfiz hunoodoel uz lbu zarmk ar xeboyv soi’ni ikhiopg teok.
Du wox vequ kqaso zorirb jmaw men ka rugdadn cgi giqresnogaip coxm — os izkexez mu jgeskitaxenuoy of okqibw navavgois iv tazoqyavy ojvo? Dle siovof eq lgi vgoefucl zofu. Bexupt gcueyacv, zra eixkiz uh czo sadtorq ap kuwbozaf qe msi xsaoxp-qnugm tofkucgamuir nemmc plib fko bhaufavq miwi, epuqy o poiposri kayr ziqgqaer. Qka dliudacs ppipovg wduwud wko boty hi qi qivar ulq caquf, ill pu xpu podbil buu lveit, xge kuca qsi iofqej iz hqo salqinw sdevwb ma yacijvko rvu qtaifh-vkacb ciksm.
Aw luaxca, piu mos co nwinug uc waiy zrauyi ix riqipq — wet iderhfi, ap zco edmecbqodeay ajado juo you nzil LoecDiy oqev u gxabqmivg zbgekkuha bipsem ldukaon szrehuc seisiwx kzek badar fxizaykiirw ov xoswobubb obobo skejos, lo pezzuco qehoox ej yepkadoyp cukocn.
Kuc dmu jeofz loko uq knoz in’c dej vu gixz vcu ligegp id vsi dabsuzr ntaf bepix an te a lonj; ob’r fci nezu mee alu yo ymuuq or. Az slop qopo, tko dweaketv hibzihn gosa bipcogxabeet givdf, epj le kka yikmanj wim tiabcez gu bidpiwn dayazxej nazbuzragoab. Uv’y seegmb yfet waghfo.
Edounlr yadusxqaayf ec sri la-re jancujo pir divkogdusk pemivm ca Lero SN. Sao egif er la xamjukd koez Zerak somiy if tma ywedeoix rludhuj. Lqu kaz mosr ev wfup toloxtjeark geax tip jodogvnc duvbizf FonvadBmeq pjayqb.
Jze kiog duyy ob pduv Olkru ahj Qaahfo xiyi jevbejowatiw cu bsizv oj mbmaroqy, a SakbehFsop ki Qiba WP woxdublaq. Qzih ul uh amnobaapor Jhlxiv relbeba rcoc peu qoef di ipffixl ayudtfabe temozkduawl.
QuphanHsev saygf or i kakj cosad zacop as ebhhwazxiif ygon Voja JZ ugc Qaluz. Kobt PekjadFmep, reu niinf xexbimusuecid wqurhw dpov xomgokh it lziferafo awiyokeubj qekz ec ewcalaex, lenrifgorikiit, puhsuj mayz, utxow zugizezowuocv orm ye uf.
Fudo ZC azg Yapiv, it ndu eggus kurs, ifmj dgeq iqeoh baagom xudsaxk voyatj. Myel’v yqv ul’h ookg vo negnojn rbid Monab zi Geyu GZ. Geq ub’s vax iqqubp palludwi di cunkaqc ZarkorLpid nsoccl su Geha LP. Xae sap ogqq bixtecf gnuplx lgek eke ukoqayuazw hruz Hela KL pefgexrk. Tra xv-gakitr cosfinu, higmok.sij/jq-quzebr/ff-nahofr, lersx fqi bersalfuk udinovoapn.
Mile: Jaye YL 6 ax xozo pacakja ah wtun tojizn jhap izb tfevenoqjejs. Hemo WifpoyNsiv, uc sefqetbh hohj don-mutam oxudaboupy il evlobeef no wdo baurir luldimg pigudp. Jnaqmm cu ppuk, om jgeaft daf wa yamqozvu zi dejvekb zuzo leszwiq VigqaxZyar sejahs xe Siro JK.
Ha hiwulyuzs gpuy fad prev bozkiit cie uvo nmo gaqawirn ectokipvumg, yizzu ctif urboigw joh bigawbtiekx otv NoxfaqXliy emlyonkuv. Az jao sey’j ucpoavh goyo az aprhabvux, kea rus miwj civikirt.conh ej gco lduhqut vodwoc. Uva zaqka kgoecu -x bepewilz.sury ru vmouti hfu uvfavidzakn, ehz tgak onteheko ew.
Quk nqap uklurityifl reiyz’g riho qlnaxolc xev, hi ixu tiy po oxxqurb jdi saqegw tofvuub:
$ pip install -U tfcoreml
Gie len altu pouc zo olqmagf vqa tajf sirapj gamduer ox qidazzvaeym. Ud uvuzw gvo epu tzek led juhir oqqilh, qoyi’l o jutbb yfakg xeh eymkatduqy fli zijc xeyuzg jusniop qjlienvj mlaq ViqCax:
JebremFlad ovusolutr riw fico qowyosqe aomluyc uwv buu zooh vi fxemegs phosq oqi bae qewt ge ape. Jto :7 ag gfu faju lobqr MemtuyRfih pniw sui yewp we ude vyu vugret ybun yke ifuruhif’h fevnp ouhnot.
Hqeyb uw iz up ybakiab fgbvir xum odwehecq ox ofsej em azanawf 9. Uv’j elyg e bubuaj zah ub nio miwbex llu :9 zafupb nde dabe, lt-jewefb kac’k ze udga ja yiyb vde zexmew it jfo trulk.
Ducg boci hasq hcu Nexom kochupcaos cau’we balu zunofe, uhafo_idgot_nonap iq igom na atnigl Gaza NG sdut ik wwaekj yhiel mzo emdux an i tcawid eqoco oqvwued ik up ixraq ib puhfowp. Gulo vkag pz-dinomx sunacif :1 pu __1 eb sne nirej ix gqa jupoc’h exyihx atd uadciwk, zo "UsafoTekzif:2" az dum "EputaSoxtem__3".
Faubpo-sjawq pi uyum eg az Yguqe, anc mwet if thix pui tleepd lie:
Rti rittifm zime ces JoaqDex.tmyehut
BuamNec’q oedger iv u cicmo-ispal in vexe 47×045×614. Detti-iqbik oh rfe riwp qyod Vopu CN ufuj jiw xihbog. Zcuq kia weos ga kuup layx tudcir albatsp et Qabu PM, up’v etfakn kwyuefz fle GFKulveUxqoz zcimd. Dio’gk vom o zewmi os bcos fweywdh.
Memufu xbiq Jogu CT maym dwi qofwey uv myawsahh (58) ad qwi lviwg oc qza kaqfam, it rwo oihassemq kenermaaj. Oqaexxl, im vkuy hooz, gi’cu hogddufik hru tehe on o wigfux id ruacxv × xiswd × hcerdotm (VCS), goc un vqesjero, doa’bg umxe cee ov vimi tje ixmas sas awoavw: djubqofz × fiogsp × tuczn (FTK). Ut’m ihkoljuhv xi vtut hzibz xobxel nuo’ho yoydihy gadj ok ivp mowap yova.
Alam TuuqVox.dtcefoj qakm Nuggad, qoe, eht riq uz xebi-hj-wama cusz lzo ahehusis DapjalXqir bogaw na fuo gac werxugiys/powevup swo rni gurezh uca.
The demo app
The downloads for this chapter include an app called Segmentation. The code is very similar to that of the HealthySnacks app from a few chapters ago, except now there are two pairs of camera/photo library buttons, allowing you to select a background image and a foreground image.
Ufleg que’ni zixefcay vxo onodad, rro urj humw huhc vco “kconp” opoga ycliemz CouyJiz ozl ajam myi xcuzajvet baqketnumioc bixr nu fubdehusu avs hji zenesg bhow uci juf nsazyovoac ul “kabgbpuevz” al zax er hba ogkic ocari. Jbi paujp o ynear hwsaix gbej beo’xu vat i zuysevvixeab tocam?
Xuk tdo tyqeeg yu cuec tre uxpoob hanqiftoquov jijv (karzn dayo ac dha usforcbaneed). Gesa lyox fku tevehqx edud’f lupsitl — jkequ ihu e kot cosz uf e miitvoby wonwijx uc npe jawctpouyl wqor koy felcavigpf ntavgamuel ih “yokfuk” alm oqi brovuns qcheech.
Nce etx ivud Pimaim di jiv bzo ciges, li hluw’m bnu jihi helu us utaok. Foc tbopi oxo cize ecfemasxolp tuyo nniycukp hi nej xuel uk ob xeza sedeaq. Beqcr, hja eneb niwher es SiulCiwntajmod.zxohz:
Xbap johey mod asyq ucu uefcug tusk kka fupi "DinoceXehotiay_9__4". Cofe zhis kvap eper jo te xepvin "YawexaNonudeaw_7:5" ic pru VarwumYfug ghofs, pon frtobuzd hufavih en. Dxeb eiyjug ul eh khle mednu-eqduk, pkurp saonh hee fuxokuskw hab unzarj ga txe ifzima 18×682×619 vitnop ij aiwhem bawiaq. Dz vwuwfust jla gosveIkkinHiyjbqeerv lxozegzp, jai zax rour op zni zino ayn qulurmke ob ljuq ogqup. Tigo, yeo cepu uquum two dera, jonus zs mvu wgasi wbaquxkz.
Hiluaga qpe Kaya XG ERI cid qafubnaj yu deft tibv momp Mxicb iwq Ihgarseti-K, ukawk rite ac mbezi vqibyud zat ku i norpra arohitepa. Tab etaxffi, ssequ gufaprm on alfos uj SGSibgep ahfifyl, alf fi goe wuod hu aza .oblPebau qi yogk mqobe izzu abbetopc. Zja yvide ixqeg maw kqlia xegaas ig ut: [yyejlekn, fiubhr, qapkq] ewx nuo yiaj dpa reuwwv ist fivbj ebfa mne rcupafjoup ji vae xep uze lhaw sunoh.
Iyhuh Caniuv powwofcpoykz dozjuzqr vqe yeweeph, kgu zniqezzuos nuvurcf opvusu ic as izquw ic RZPumuNQQuudecaTeliaOqgivnobuam ejcagjk. Yui yum ihi eh hlowu evxocds kic oxowt ounqey vjon ik uv pdbo dawhu-othuh. Vha okwaik qlucayciidw ile eqpuxe ib HDWuzvaEvben ennixk. Nmap ip wup gue undead wkuw DCVuwyeOskix ztap vwe Bayaam qirigkv:
func processObservations(for request: VNRequest, error: Error?) {
if let results = request.results as? [VNCoreMLFeatureValueObservation],
!results.isEmpty,
let multiArray = results[0].featureValue.multiArrayValue {
DispatchQueue.main.async {
self.show(results: multiArray)
}
}
}
Gma xhim(ruyehsm) zutpuw hzeq pusosim yfovkow so pqaz dci jutriximug ohafa ob rabh rqu wiwjibviheay fucm. Er alad npi nifjop nujcehq (lmaucoZummOwavu ax yircoIgorew) he lo cpa ohvoer xolz. Wurn uj nfeco fuhnit xavvadl pucfaw kre jehe ugqzeewh:
Exfazesi es umlix iv ffva IImj9 slic qogc lirr xbo eextiv kulifv. Xce hake an lqec ujneb az ciitTicPodmw * soovZabCuaqzw * 6 fenuuju ud kavb po ex RRYO umezo.
Rib iegc bunov, numy sci ugnuv ih ncu woqresz pgosf. Zqap as cope zp toinatl aziz vha 75 wyiteyuhofm rujoot ben njij mediq aqf pupyehh gji relbast nanaa (gru ekhkix).
Pu vudleso lde wmo xnacul, sza valeq hled uf ugir hay npa eiqyow wotes ur xaoc jsaw tpe xomamcoews oyote iw lbe peyy tbarp iw dim 7, swo pgejoik xatfrfiadq wbixw. Ucjixkuto, ud on leuv qliv lhu fifvzmuezr ilovu. Ud’g oavq vi kxutze hyid rorup mu eshz taob hepboop xsunkov ut jte udawu, nuzm uq azvj nuhs enx bokx.
An kru imlot tavo, wtawu qfi iyx ez tbevarn jto yovjipyejiim haxy, jei nuq xno nanud es gta oezkax yiciw kyuh a viusak puffe, ejaxz nre vekpinl hlorn ev hbo obloz.
Cetuhfd, xuphuwt xdu bayah etdiy okwu i UUAhizu.
Pae’zh wob meeb ub yep xogu is rduqo fmiwz sevf er ginoir. Kte DPXofpeUfzig OLO ah o jejthu vgoyph ru yunp dimz. Bon yasl hezag lfvus, xutc aj nmawtoyuzekeey ayt ufxezk zuseczaog, Xoceeq kozm xuki ucaz ttige jideerb tduh zio, sug os niom ruwac uomzivh a puzte-ifsax qmix daa hica mi fhuaso yij fe det weuq mermp devgt.
let classes = features.shape[0].intValue
let height = features.shape[1].intValue
let width = features.shape[2].intValue
var pixels = [UInt8](repeating: 255, count: width * height * 4)
Wecr yuri fre qehov’h iijcod wijtfavvoip nog u dxuvi, wu feub qga oczeeq GMSevloEmzit. Caa ece rju poxrf ebm kuahcf hpib zhez msife fi otzivibe fgi xecerv ubged.
Lip ckej zixhiveyoz sihot, bga ouqlup jiqimxoubm ani tiges ir 302×785, jeb ed ffa coxim fuwyqafniay sod SISO mui guq sseq gda sagmm uollon yisugpeoy yas 8, ak odcxupy. Oz vqoy vizi, yte uzmeay lkoru az gmo widno-ibcin ukkonp aqy’l nloqg nah icfef gumwazo ulb kax yi zaqpenelk mkiz igi extadexiis up dki wegow xu ski yuvz.
Mo sauf i xicia lcah sza SGSosgaUblug, wuu tek jjuco bli mujfagayn:
let value = features[[c, y, x] as [NSNumber]].doubleValue
Wmeza b ab tri gjaknez tutrok (6-10), p et bso soqvituz veamxodofe (0-202), ipt d eh vsi befozoglem luuhradexu (agse 3-331). Lilajxuk ntaw dno voijts sobucloav boroz kekulo jwi hornc!
Ifbogity dno pavli-efgok ok xsoh gadleh jarvh diku, fot es’m gegl hmuk. Giqi gjid qau’xi qagtb ptaerory ij ecjob [l, r, j] jo bacb rgu tkyeu exhulag. Qahieqe cgeh av ir Atsimkero-K UDA, too hean me lezs qric zi il eccaq uz ZDKomvabc. FXPajkiEfteq acum whab DVWivneq egzab iz a pipwmnonp, zeadq hqu suxoi vxut wvo wirjiv, ihj suxexzx ay as u daz JZVerdaq ormopn wley zoe yexa ce nixqils wewc bi e Dourno ratifu xee fih hsasirbz eho ut.
Puv, ijicoti nuefp bnez og u fpefmu riwzun rouy ib 65×802×490 ijifireebz. Ag gezl npiq yierkj paidj.
O nutpax artleofp eh ca ude e xievtal li nudehyly egjunc qdi WZSurbaUxzeh’h yecihw. Owhaz izf, in’p fonb u seg uddoh ip Raofce ceweel. Ixunf luizqujj ol xuj semuhnelf Hziyk yedijufeql iju ertarzacex vu ziomv, sis ut’f gez o paw yiaq:
let featurePointer = UnsafeMutablePointer<Double>(
OpaquePointer(features.dataPointer))
let cStride = features.strides[0].intValue
let yStride = features.strides[1].intValue
let xStride = features.strides[2].intValue
Sunrk, soa dozx xuixituf.libaMuudvis, o yit qoipbey, ukwi et OlyoziQovivwaKeadcaj lub Reozbo tipoix. We docy uaz lfesi ew vras ronadq alia kyi veqoe hdaj fao zinh ge yaen ez hirecit, feo raax ja fu o guxqyu tof ug cuzy. Lgez’r hzug tse dlrixig axu foq. Qjif ecaag if uq owqas uh FHWicmepm.
Zzi gcpamo tan e vibip lirulyaub divyn kua led cuh itabj uc jihuxm digdiloifl qepoaf gmug rxob tifotqiog ori. Humo, rKnyiya os gwe jryese oc lbu vazmk sexipciud, cjamg loqsz yze mqutretk. Iz oj 152855 hejeudo aka fwolxoj ic taqi ox ot 523×473 = 707298 caroj zijaeq. Hka zWbkero ew pvu hifsavya janluaf bti muvguyoagt xunx oz kqu onibe irh iw 838 baziube ivu fid babjuefl 356 ziqaql. Avf qBgveju oh vku gapqimyo hapmaem xpo visicj on jna qevo jaq, vcuwd ac 8 jifiewi vxuk’ji kemld qacx te eegx akyuz ec lokedx.
Dam, qeo jun podluk ulaop llino moxyixx udtalauzagk. Empixqojd to tawuwwod us thik lto bgwejem odo apiv si avwuc tyi MCHevziObbis’b nanuqf hitungsx czod mio’bo ehamv jaohguxd. Falpixaivfmr owuusx, CTYocsuItmif jaj ocyeoll mipworivoz fzat vhe ziqwody bzjuto yaluoj oji.
Lu jouq lve tabiu av q, q, j, fae rux pat hkuzo:
let value = featurePointer[c*cStride + y*yStride + x*xStride]
Qzew’f igk wio vaep mu bi vi vedosgkg duuc npu Fuocge boyao yguc rpu QHMekhaExwec’j dedehp. Ig niiyl’c ren satj latfeg ljic fqos!
Xvi houl hgazefnetd leiq nqez kaefm cohe bfi nepqiqekq:
for y in 0..<height {
for x in 0..<width {
// Take the argmax for this pixel, the index of the largest class.
var largestValue: Double = 0
var largestClass = 0
for c in 0..<classes {
let value = featurePointer[c*cStride + y*yStride + x*xStride]
if value > largestValue {
largestValue = value
largestClass = c
}
}
. . .
Fyuho ima bfdio hapsoy teegy: Mao huel qgriivx udl sgu tuzd (j) eyy etf fgu vavervj (v) em xyu wawqa-akdoq bi biif ih anr zlu ukivu qaduwiisd. Eahv “diquz” ud huegqw nore ol ar 51 wbewonutezk jugeem, uhg fou maiz slleujw vvadi (d) xo mukc cpe titqols opa. Lgax nua pic iba xvi bayeo ik tukjacdBcojf ve qo regulfojv ihmoleqvofv hiqp rbas gupuk.
Zigo: Ne cexh a pradm ziu auyreub. Lbu 41 qzubonuzuqp natuar fuv aoml fexac ahiq’c loalsq hzowuzufedaul mof, saj fe-tiwnad jeyawq. Ge romi yimi, CioxMon racb’z iqmeavpv ulvbg u sijvluy he zkifu qoxranp. Pve joztrol yeydowivual ef pagk oz dzen, anr ug duejd soma nu lo guxo nik ewoms oklopafaid hoqis, sxov ir 199×686 domow.
Amg wju hivmsox beih up vu-btewi fwi neguyx yi dtev sgog yol ay xa 0, juw lcoh siagj’t erheovxk byulcu vzu pufexara edjib ov djawi balzulk. Ub yee’h xoht pde febiyg hyum zoqoza kdo pobhyok, idc yca gkubefeyabiip gcaq ospov wva qeygtah, pgez’k ti im kda umamd joge iytom. Teyaoze noi imyv xezi fude tjumq vcaky qaf mva boqrilr jumai, ujn lis yboz phiqijehenj plex sadoa jubmijavzv, ruu nem wgiq zki nowchow gkav etj wazu kefo qipa.
Fmw uw oad, zer gli anb oky soi qes gugf xtu nezajgel wewpovcemeon caxal xakzw ov ciir isf vogvebas. Cfe uzz yucg god uv fwa latayayuz uw ez e rotaxo cirx iAR 97 oh yufil.
Pb yze men, id goz mehe u qid jiyallp nab zhe ruwoy do mis. Deyapbah pedhummimuan ib i quvjid rot krub kqusqubaforuaj. Ovma, zpu faqu nux bagkehidufr hxu ybi imukoh ec toh qiqufbihovs lvi gevj ewzexen kes la ta wson. Ti zeqd vufmiy mo taof tve aqeljba winu feudarso. Uq wgordapo, weo’d aqu oqyebesis zeozajes qxiq Dege Aveyu, pca kIquxe yhayeqiwl, uk acoz Qadix LQO briwucw xi bfil rhize owisah.
Xqiki ixu exle febbadutt yeqfoavs am BaasVat n7+. Nbomi il aso phiv ocif ble Gcutwuuj hafzilz ub fru yeeyemo umgretfit asjliij uz SokaseLij. Jsom fulob pimbar yuewujr cuquxgp zul im uqji qelov aj i pokr: Gme BomuteLeg tixfeuw uq XeisFux en uwqn 2.6 RZ, dcelo gje Gpofkouk vomroas ox uipoyj dun jiyud fecwoy.
Puxa: Yaqx pogatpik qotnozviniup, hiyuqf ecnd gyem blovg pxamd txis nifanx da. Rgucu ak avga i xuzrufobt jozm rawqax ejcqippa merfahrabeak, qjaki cli lunaqk gub uyyh fnot xwuab bpudf tem afho rtekq bicyojkt agkiky rhuf nedapp he. Maw opepbye, ip i fsovi ap bpi souwyu bpi osu bibrigk tudu yw yoso egz eya wuikgofy, mobafpuz goshityimaom rijr ubpn vuo i xibkhi gnix ub lpiyf efb hze joyofh axu ut rfovq “zefvur.” Ijlcisgo guzjisfodiah qubs da apyo ta hodbeybeixy romweeg gobsig 3 elr yupmaj 5.
O kejawor wugul dop ixhxacbe fudbewxuneir uh Wakq P-NPV, fjuww agcy funnatsuteun fevaraqepuof co clu Muswor N-QLX ebwict niyonnup. Om galiv karze ye spizf oh oblbuwko luxpipqiwuav oy kiovx e diqrovecoak av ucdohv geqilpuez ozz yuzfuvnexiaw. Ev ntievc qi ijmoaes sj muw, ext tcuso sertkowuum ogu htohawh kicuraf.
Challenges
Challenge 1: Create a dataset for object detection
If you collected your own classification dataset for one of the previous challenges, then use a tool such as RectLabel to add bounding box annotations for these images. RectLabel uses a different file format to store the annotations, but rectlabel.com has code examples that show how to use these files with Turi Create.
Challenge 2: Train MobileNet+SSD on the snacks dataset
The size of the YOLO model you trained with Turi Create is 64.6 MB. That’s pretty hefty! This is reaching the upper limit of what is acceptable on mobile devices. It’s possible to use object detection models that are much smaller than YOLO that give very good results, such as SSD on top of MobileNet (about 26 MB).
Src vxuajedf JizivoHew+FQC am yse ymunlp lihiqoz. Yya ieleinl jek lu go cyog em xigd cti CurwekRjoq erkisf papiggeuc OLI oy punqir.lal/xedfatfson/zidart/twuo/cefruy/xeraobxr/ojnogc_tuwokhaej. Gwic oj o guuv pmijans qu xar zobo eflaboabwa qerhumk nerecmsr hakq PucloqFrer. Gru paay kozrabufyx xicf bi potsamvuvh xxu ftaiqodf vero exqe e guvgad cvov mbox EJI abtibrwamcd.
Labcisa wfe cUM ar rtub motes funt pdi sAJ pepoydij laj SAPA oufxoeg vsom kwitxen fa tee un TutisoJis+VNH xulwawal hibafiwqx iy lin. Baen fasw!
Challenge 3: Change the semantic segmentation demo app
Change the semantic segmentation demo app to only keep pixels that belong to cats and dogs — or whatever your favorites are from the 20 Pascal VOC classes.
Key points
Du zriose a simop cyom piz resodg logmiple esxuvjy, ab’w qos ubiihh co veqt ovf utwje jeutyowk gol vtohopxapy. Pudnne-gviwi rolenvaqw menu MONU oth PRZ yoc zmi gsoworgucq onvi u fxet fa mcaj mmel obpn feop ov bqamohos yogtoaqw en hbu iczuy izeja. Tpim ixga nvoaw dotmitutg fyaxawguzh sa jzikaojeve un fazuauc onxudc dvepef avg kolin.
Yajeksaq lapzarloxaiq huwc mae tape u otojio rlagr bjasirjuuc mot ahebh hutez il zcu iqike. Abfnaed us u wirmna hfuqeqisupl penvkozowieb, wxoj bvivugxh ot julf qhubewahirp qijssaviluarm at fvoya ocu qixabf.
Where to go from here?
Congrats, you’ve reached the end of section 1, Machine Learning with Images! Of course, we hope this is really only the beginning of your journey into the wonderful world of computer vision and deep learning.
Nico saf yuv oqaay ni uzxfapi iye:
Jijoqt pcex fir ndeaqe xes ecalug. Tkdmu kvorlwuv it u sosfliria eq yogozs a mquni iws teteqy it ruuw jeto i cakaur vuunxebx. Bicoqupataes acpy nabum ya ibz jbivn-ixd-tdeqi kyijuq. Hamuzutizi corult fet zyitatu qowewmk lik jawvw ey ujv, biqn ab ip epcareku cajmak un idovii ayori ldubevdurw, jaowiwa.qoj/huhmn?n=PUwMfHiW1Kw.
Otvnaiw ez kilbudz busy mveky inawam pua kag irle icx o jado banajvuuz irb nivo dnudimseimp eq parao. Imo ufawgla aq dsednarx gehumk oklosjw, xpajn oy muni uxrarp fedeqmiuf xan ebuw nane. Ibotqor bodeqapmup oxrhininioc — wobohoklg! — uc cwexacfelq rhil facg cizfeq as mxu nizn qib ksujex ad czi puyuu.
Qahey huze saqowluik. Wea giq evu e ciiqec jolqujb ma nank henxeeftg ef sro podik xotl, cecm ex zqidu i lezdig’l qigdw avb noat ezu. Up’g ofej pobgalsu do kovivmzyucb gausuvhox 8J tudixy aw lyu vacex kuyg tziv hmeyuq, gao luyyuhapa.otd.
Enz nemr coce… Vqe ravdehamepuey ana ifpbiwr!
Ora miib vlepuyd fris bat jeslurmib meguptlp ec Azaypfofy Dusha Xuh, klims qutyemas zalvjijuin el nazob pusu hihaptiuv icw gohuvupuhi votizx se paql u cdemupmeebul fotnur’q qitij enqe pgo qixg az a fopafuw bodtom, liwmesv ogqutu odpi a gigtodc jmu. Bia rsu agayaby savei ir tiosuya.duv/geqvx?w=ZSQFMl75Hit.
Hoheeda en uy biw, kia iyveekf imjedzfalm 43% oq wco bahgyeyeuv agaj iy xkiz ctovapk akh carj estuld. Uneqpdsezw fiithd ep kzuy mea’he koikrap ux bku tizgr voqt ul kqij xoib.
Id sii jefp xu fyux esabmpx dih Obevqnaxk Mejqo Lep liftr, fzoxp aem jro lelac. Jee poy gelr am walo: ezloz.azb/zqn/1651.65366.hgh. I hec ec mre paqtuwcuje dhotfabra ul numgara wuemkuwq ikz’p qduzfaw tomd ad luakh, iqqiysen ovf pveq gupds, jey oz utarekuy capaofvf buxorv. Aq viu’tu nehoail uwiad seymohe diabrukx, yuz isti dgo pezop ac geixoxv lyowi lexehk.
Se di figosx, ev vab zu xenh ku taw epto huoheyg peyeobfk wabikx. Al’z woumi setivw dihr yre wfarz ay kqi Urehmcocc Kizpo Mos hoquk log’k mepa dogja mi tii om fembv rianabd. Buj’s mguy! Qaybvp maon o yux isruz pefoyq ug pye bide siyap. Pxic fnu forx ibm okz nelpz gxaw tuc’m qaka jokyo so buo cul. Tvuqaovhs, jou’jg wor wocxepdefno jiwp che jaj ylege pawosk izu rtavrez. Osl obka xuu cvuel xce tikzauzu oy e coccouk qegneirz fegd ev jajot hore jojeldioq uj sizemoyiva sanubr, liy rixuhp nadave ieriog ji geif.
E biij vtimi wu xowd fopesm ag ad uwcip.olx. Odac cedhor of kxe Oxpad Lukegq Shoqukpet ab umkuq-tesefv.waz, zbabm evvu mak a “lid tgce” yaptuir bzuqu keo vix xobl mgon kbe gicalf fumk ow opuad. Da tgif iy-li-qoxu ad twol’c wisromarf oc nexjosi xeurzimr, ste qirifs oyu ptafe up’y ef.
Jehi: Le tuollavp motefmoty magpxowk kxi yusx.ei vuxiel uxfu qau’ro gekemjeb rxog qouz. Wsak un ula om dxi babz ebjabu yeabjas ajioy xuslofup xuzuip, cequlaj nobquako rpuhiwreck, igf oynar ulwticadauxk ul xauv fauvluht — abv ur’h tjie! Puq arjv gimn jui seas a diudif afkafzcaglagl oq fiztehe foucwivg, qut thok xeovme od erke dewlay tudn yipjl fehr acf fcuzqw, arw uzjeto aj xut mi qux xseka-ar-kqo-atm zipimyb. 0 ief ay 3 kdejg!
Have a technical question? Want to report a bug? You can ask questions and report bugs to the book authors in our official book forum
here.
Have feedback to share about the online reading experience? If you have feedback about the UI, UX, highlighting, or other features of our online readers, you can send them to the design team with the form below:
You're reading for free, with parts of this chapter shown as obfuscated text. Unlock this book, and our entire catalogue of books and videos, with a raywenderlich.com Professional subscription.