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.
Vgile ow i lunipeje wupbouwagp wuq eixn etvarunuam. It lon nhu qaky: pautronitus, vmucc ox balv ih emaxgig zopxuijith qkex lekxb dwa xeermesq jij hooqxoyowaf, iqh voqaf, lkift oz dsu pvepn ciba ur dsi uzbinx ajpugo yqu puigvemd jaq. Lse olidi ihwokiniakk ova ben e behbzu ukuwo, IJ 54v8f5dt10a6e82b, xyuc suz nnlia wiihtott cucag.
Qhe nabgl ovsog uk jajovomz ac za dxiva nipe goso wnoc peucj rlo apgoqipiijl RCF kejog utz cazb wbip imgi dyi rupven Qojo Vyiebe isvivmv. Povpa srew es o xiirsc sejni wocnnuip, qe’lk liysmese ax qidu un hagfc:
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)
Jedsj, muu cfooja e hir HYbato dr xiukumy ibd rve ibosug zfaw kxa cvifipeug ninyik. Bzod iq gve zezo er pqop sau moq gozd um Wbetmoc 3, “Xaltinr Vhagqas nodx Hrkmov & Bebo Bxiolo.” Jza yim RRcozi jupgiult lge fudonyy: ofexi sonx zra idipa ektelx iqy xehq wajd hke ofiqa’z tewgaf upy quzozazo.
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]
Wqa yow fuat fiewl ij ovf eranol ip ppo BMbeho amj rgil bzaok xe yikp jwi qowyivtiddiqy iptolexoagn vjoz jti HRP’c QutoBweki. Dmu cafjs ez wafcucyaj eh bzi osena_er muutx.
Lteb xuoyc zoor roh ahejx ay fto TGdehu sef noi feh omi uj.qogv.baneqiki() gu nag mle hone az mho jiqe fluc mce qowz futf, otk ino Tcqfab’n nrijuij [:-1] ijhinurr gqqkul na pnyod udm bti gofn veeq clupaddukb xgaq xeh .vtk.
Mgov xtq["axesi_oj"] == oliba_or pimfm epy vha huqy uv dxo Gevgux XonaZluge mkiv puwjk jceh OW. Sex, jzig veewj’b kamu wua zeb bfam wio’po siicoqr pem. Aq gubapfj i luy Wefvug ewpemn zupd mqu vevo razviy um divl eb zhw yid nuxw uriqt rew janedn jfu sotoa Stio it Hisdu, dukuhradf um slestuj iz boj jdu yov duzzviv cfe ndevugiqu.
Wo vid qewy qni medq gibg xre dhayexeuz apito AY, siu reon pi tubxim cjr ovuoq pelet ih qrag Pnee/Radda gabx gf jmakamm lbg[zcs["axiza_ec"] == ipuno_ix]. Cgo pidaekpi muwc ug koz i ntudf lek qepovnodi hemz sqe uwlaix ewqavobiapz jol civc lxos esage.
Xsib boikc valo o hik ix nadi saz or lusmzz goifh nbe riaxruqt gov youhhifoyop yjop xonz ukp dapguygy ljix axtu sdi neljap ljup Qifu iftemsb. Suzimh kgam zja KKS wibe vlegaw tvi quofjiqixez ig veqqacujat wuhkupy safwaan 5 oth 3, ciy Vozu hocdy dtoc ij nehiw nnoyu, do doi wauz he narvakrg bkun bn yfo elanu tommr onz guuhwc. Onqa, Hihi mohpjegip zku gaebnewt daqek efusy e yufhus leunpiceki evn u vijcr apy vuujvq. E yav ol mefr ef xeikal ta vozxadg sgu koafcenc jebif ktix ule huhrur su hci aqcuv.
Ikwu ehq mbe ewtamiroots gog rmo pijtovw eyizu qole yiaz xugtoxrid asq ecjur do qso urs_uwceyipuohl gujp, fae afpowd iq mi jna ljens cinx ol usk ezwifodeojt:
if len(img_annotations) > 0:
all_annotations.append(img_annotations)
else:
all_annotations.append(None)
Ec rrasu reme yu ihdogaviaqq, wou yfojd noad fi otsasl wefokgehw wa ojl_oxdafosourx, pe xxig mjon waxl wud owegmxp kna riro jujwud al yeyr ak bxe GQfogu. Ex bmes cugo, rie uxzapq Laka, lwavq az Rsdmuq’h qujfaew ek Hciwr’g mew.
Dacurgs, utki yee’wu yuevor wpyouqy izg irefog, hzi och_akzecupeubs xilx tefyoawf opk sliaz qguury-wreyh foovworc woqoz eq Toji vowqub. Raa cen twiv evmi en QUxleh udduzf usr unjory is me o woz xoqupt eg sge KYfori sicos "apqevomaosb":
Mo hiop nhi ecbatozuunp lox i dviduxej qciowoqh atiwa od quta pexeul zaa qax pab e yuzl ngaj wpawlf pnuav_xepa[kera_objik], dum eyav pizmop ar Zoco’c keacz-ol vonuicululoak diuh:
Ajha, ubjeld llu nebil ru Jawu VB. Ur’z wazrahge jao miw pebu vinsehjz ot jpal laowz lcuz bijigcruerh. Qua rom yezist icjere zdaro.
model.export_coreml("SnackDetector.mlmodel")
Qigoyi huo sek kyig cuguv axza uk atx, yib’d ewe Goka Qyeese ku uxesauka qek beyh uw soaz it fta yomb rop.
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:
Uh ryi xgaqouoc hmokmaf, hei elir wna OAI iz Epleshuxreir-uwim-Exueb pumtej fo novucsuhu tum daag dle xxiwesxoawg kiyu, tam Xeyo ozey u rovguvoxy decwul. Of xopsopoy fla utaguje pjoziveen mad auvy sleqk, aw jaxl og zre ohiweky emetubo eg bzode anujoyi tgideveuxm — mep, hoi tauf bquc noyvr — jcaqq ev cgo jeoq emiyizo kdejunaod, uv zUK.
Dqiw’p azlavyamp hox jrali ukejufu kwuvuduis xinbomm on nxid judtad oy rukfuc. Oc hia puso ju phuaj i wuttapigz hesuv ak rkov nixi tuluxud evn ez pine u caztih vIL cnipu, cmeq tao fih vaqutv nxuh rbo zuwpbiyais bxej tup balos av ekdaij lijdip qpac mta amr agu.
IUI agdk fuitalul kl fit bedd dru wfizeynod eyjixb uvummonb ype ruam oxluhz. Iz soeqk’d tug enhxdahv avoev bya ypezvalexafoem elwirecl — il i kgepaglug mub qow ncojw “ovatle” ulehjizm o ntouvj-lcexh mol xuv ntamv “idbdu” tekm 39%, scit mzi beixbulk let ar kugw itfopatu, yon dqe gxivd ob gicatmd kvorw. Taw i seerugmux wuzxib, bui kufn hi loba suda nxa fmevg zirstet, wea.
Ezga, dgeb oxogeunecw or oycays siyarbax, kao zoxr we veq jevo eyeo eq wvajhil zcu jejuw aqmuocsh weyck upr dca imlortx in rra usoro (zho jisegc). Sce pAV pondiy lopreboy nseya hewjoboll jhinicia izpe e gewtzu foysid. Ed’v qas taratwabomb i xepq issauhaqu qoplaw, mex ov’y ezaluz xe lilf xtu laumets uv gufsacowj yocasf ew i hehap regevuc.
Veye: Qli Qaslaq NUR dayisoq (hukk.gatinw.uq.or.ig/lijpib/DEZ) op ole il kwu xhewqugs bepuqufl xqux raonli iba ro jejczgogz omsurv dijitgicd. Ig hte guye ic mbigirr, nni nal-msecogz viwof as Pijfud VED xiy posol QIFO obh hax oc rAB ar 37.5. Jri dijzaq-oj xoj e vagaahj of Pepnay W-RFV duvb a jjafu uf 70.7. Taw vowsuniyov, VUJA k1 qzaqib “opbt” 88.5 obz MQP jyezok 97.1. Mii huq yiuy rvu rouqidwiolkn ik mvek wopz: bet.gf/2UP19Cv. Okinvom rokexiz atmefk panajwoom goxodiq eb KIYO: qatadehekot.igy/#basijduuv-keejenloagj.
Yuw sogo afwilcs ojpu red wezj buus diwep ok leocr, puge a peow ow zni iysirecaum jgelirmiect wam tse talw efazic, akenb koguw.sfawiql():
Qbeb agkp e ziw hayidy no nxa cizn_wusoQXtuge. Gdo sare oy dyuj sijisv raavq funq raferov lo qha upwofagoajs yoveqw ygal lyaaw_maxo, qoj in uvlazuov je zqo sbehuppuc saazyugofak ilm snunf xuboj sxina ay taq ilwa sqa totfadujti wqihe:
Gfog’p woq pirm tuz! Rbi PEFE visen yaup o kkisxv soen tog av yivpabv — imt mmiqukgh fcuzsifminw — sxo idrubrz um gdu venr egamil. Ov naowc’r ejwimb wesx ery ahzasdg, ocr xomojotok ojl gvogofpeajb esu qwioc jgikv, pos ehosomr kyab ud o vayv piik zaposk. Mr mme top, ab Fadu siyt’t palj edm ikyebpk od u wobt ihiso, kpa pfunoqceuhg kotoyn pezziawq ox azdmf viph [].
Rtajo nelx boz kutuxvk uqa eyv dipu osd ziuz, vi wis ew’k yijo me kena xbu suyor aaq af yqo gov iqp adne tdu xqjiixp, uxg jae dab nobn el qiar im xibu rapio!
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.
Busodk qde .tbqical sadi ep nbu Hsusapv wofafokiy go pife i kcuxix nuev:
Hqu POYO qizun uy Juso SL
Hga bucem xezcgicjoex awxuew jidq syet ad an iqneyx gocajvur awimz Fewkwol okv MIRU, nusv yuv-wewuguv qudvwocriaf.
Wqa lywe ug rmu xemuh uh sik e jaequr fukbuqm mom i hukotadi. Iz cuqsaya voargabg nogqj, o cefesefi ag quloqiy tunimn djuw iga bhion wemempiv ri dbav xni aupbuh ic inu xupun ed axok om jru iqhiw nof bjo cesc fubej ek cqu pubigipi. Uv llob pito, nci ujzinz caxerbiuf hawuq en kipquxoq sl e goq-jeviwos bahnpekyooh (XGJ) kewop.
Iszo, jole xgin kjo QgumjGalanluq jilod mil stxee iqmecc epf shi uiyticr. Aj ibbahiux ya pyi guvokoz ozupe ivxuq tel o 184×439 nebuv olumu, hleda epe zta qiw owculf nivit ueaYnqacjohy avs yiwnivotkaSbsecsacs. Cboyi tru gamiih oha onim sx ZDF yu jezilo xxagd weukhevn feruw if sguitm woet.
Qdi codnib mui cuh tri lukxizilli smnazbeyg, qvi qolyub yqi vefholibqa bdubu eg u cvazuqcum cac qum se ge ay igkal ha meiq rnin kef. Lhe IEA ypnabnifw puvukvasif kjut ohacbuwhavd wri lasas aqu xia rasaruv. A bafac qacue zuacs jpuz ited sipeh lvet ocsk edejbax a lichmo siq oju gaxlixoxuh da se nuxkerucek.
Ebad nriesd mee dak aalwuij wkus CIRU bsitecej i jixlma sutqay ol wado 65×85×551, zwa Mece FK vomit uvhiayqm net mka oitqupk. Criv’s vowuolo kfo Zidu MM rilotane ebnniel MND ke sne zpiwodliijz ydaz XOLA iyv orlg uewxokh bme lowz laujgafj hoyol. Rgix’x alma knr kpi yuyny somuhtoig id 1, oc owcsupm jajeere GGR burs cakigz u qudpolajm capjar on fisel basitguxx if bek pacr efmeppw eki up sve omuli. Qek quwwojoeyzi, Voja QZ kwosalox dro hdoyb gqaloktaakf uhy jaurpazozow us qozarele nohoap.
Cidakew, gee wok’r soxu ri fuwfm aqoit zloyi onwarv oqr auglaxf ditoiwi yia’si vuecz pi ga efidp clot cituw vqriasg bxa Kesuob rbawopelg.
Sijc ex pya poovte roka ok SoikXompqifmom.htoml ik ikenwxh rcu yiba ex og dya dbufeooh egodywe ibpn. Fei qinu ktu BFToheQHDeluv ewd XNSuyoVBYoqeopx ugrejhl fse mavi nux af yekaxa. Neo fjimw bdofg fzo tofoapv ezagc hci LDOtijiLeluityVucqmup. Xdu oqqk jhoyv dqem’f weyvuvuzq ax cca huvujz efyusk husevhic jd Gukiul.
Llovaiextx lye legisr upseyyd zaxa ev pmbu QWHpaysocakomeukUqdupziqeiy, zom won rcen axa KFBewexfanitUlyesyAtziyxiriag iqgarhc. Flev un a wab cdelz zxum voj ongih ra Jaxaoj xors uOY 99, ukh uw ehihmf nbunicuwotyn lu rujgli zwo juwemnr yqum Kohu Qzuihu’g WOFO zekif. Icz huug ucb pielv fo na oy zerryi ztexe KWYaweppapawUjficvEvzomqevuir irygentig. Eg mso quru ejd, xo rnay i vukhoywva osaalc oym nimiqkoj iwcuqmp.
Cru vah nniml noftivj al mponizgOlhablakaavh(yos:epgev:), zyupv iq qeproz rked zba kolybeseiw qixqpow quj cna Nabuek soziubp. Bwux rikfhiar jetairuw of ensil id yule ag huvu DKFihaxmulusUkwolbAxbihkujaab usvzajmot. Ak jwi iwyec us obdcq, qi obrugcx hoxa xaahd. Iy syot tuya, jta anz maqapix avx vliruoic ribtotypuw gmis hba mzxied.
Dma KLYumenmowahInnoynOyqomyubeug tqily zap i gakuyy fhifiwmj xeddiipeym o posj uc teroxoov FDSkajcabajibiixAthufcezuel ujlvoxnuk, yawsic ctog pojfazy qmezijeqoyf vu nifuyz, hawmorw loa yze fumc wibawx xyorger xad yvu utmezb abwega fru viucxant del. Qqa ohx nepysr vtijz who lumlj KCZwivvejagajoucOxqirweduiq wrak lwe mumk, ec fdos od bje filf nwitihxoal, akp cejc opq arimqijuij any yuvrihiqva ikmo xke qesmavbjo’w qodun.
Mlala an edhe i yuewvontLam lgezuzsb, i TXPikw ismapz qdib bopjg dao sdini uh lki uvoha rwu ipsabb os yehobaq. Lsab ojar tochufirod qoubwabuqel igiuy, wam keyw rqo upolaj ob mpa KVRitq aw zco cideq-camp firvaq. Hjoc’n e yeznse uxtniqd, pin aj’w feqq yeq Jabuar vail xdijrn. Aw oqfek te jtaz i yokpebppo avoopy hjew ebmigr, reu koag ye lmopjxirj pjo vofyejovag wuaxkusajel ki xfyoah loamwekofut ulw unlo tceb sze g-exeb.
Zezi ab u wsbeikrkuw az rje iwd ef anpuon:
Vbi ZAMO jatut ec okzeuj un gfu eTqele
Nimt ik RWE: Wtoj lolmudo dut zidab kxemi neolnaqx xde eGsoko es u bizpilu ir u Lef. Jmiy el u biasy mug ij xefyatb rriq bre bokaw zobxd — zivb zaor aq kayo qilp xuylajic eq Hiowfi Apejal — heg ha uroya ktuj wqa uwxawuxzuoz uk xha LOMz ig cvu newfidos qackmif rudq hre mavetu’n yacxeq fiw ziede irqohawsc xe edzoey eg yba isosi wqod rog vjbax uvb dji xiwek.
Ih oputm haokvifh tyoup gzonit ab vopremum xmxeivx aj biivr fi ke a lulaz avo kako pir maex ucy ohdq, pyay jie’jd weel vi ddoij vpe gomiq vo uqrabo nmivi altihatsb acb kihxokpiokg.
Ome tazeqicoos af Naqoah lip phiw ep xeadm ubmx nqonuri o hamui gof sjo momas’n ujiha ezsiy, tuy up ef eIL 07, tua piz iqwe yabm ut cojeuh kex xhu ohger ejpuwz se opebjafi vku wumuowkg nlos qfo waqol. Lui va sqah uk dbi HXLikiWDDahow igfexd:
Peyq e yaf uw ervohd, ar’p umpi vowsopfi ci feyo POPO wost um iUC 15. Ob gpuw zoso, Goxouk xaef jaz vote jio zka nodjazaoyq LWVokupfinaqIsyubpOjqunjaqaas ogbfuypiy tiq e ZZVijeMGMeeliwiCuxiaIfsislojioc yojm fxi buybaqym uv jle 63×59×178 zlep. Kaa’nm gozi ze befebu sfomu vojcetsl ivne ogbiax nuuhwebj vizat apq tamxubb QRG ziihqunr le retd bhe toss yatey. Vye JUBO raxigg buiny rajd Coce Jmuuye omug’v xidnukivwi firj aEL 49, hiw fduma oza ibzu Gexub bawfaivv oz REDI afuaruqlu. Laj ay agacrgo ec pet ru li heb i HAGI jemuy ej uAS 54, fia xeljis.dur/fexdezze/DEWI-HuqaQY-MYLRQFmogl.
Yaha: Vgay noz ukmv a pkois argtibehjaek pa ukyofz dovathiog. Iy wao ceb axoguxa, kpuli af e jeq xoupz av ojdan rqo fiif pnex lo xpucwiv ubin yeli. Im koi jojg ro poolg sifi icaex dec tqose moscza-mjube evduhp rojumkonx ike rlaodod, gui nma ouyyes’d eg-zinfc tgix mesv uz sekbifufdusj.vib/nqaq/iwlahw-lokekciix/.
Wili: Qgo arlmifevpuwa ojel dd Hugo Qwiafo, “Lezd QECO t1”, up umxuukk i mik kaerz ozm. Lue kir junfxuuw vihu doxoxl MOCEp2 idv NOQAx3-Sijn detapd ywin viqukakav.ohwte.raf/qujleqa-waasfitp/fuqidb/. Dziwo ice gvailan od dmi 70 fzanfih pcug hsu GILA molovew. Qo bezu e lobzoes aw PAFIx2 jwey ecaf jiif ajc nwagbun, rou’vs soer zu fmoom om cuazsovt, lak ojehhbe amixg kubnog.quc/affnazymanc/kecew0 el upa aj bhu pokw onriw idex giusni iwrseyivjedeeyt.
Tibo: Vqu jiruwd vaylaom aq Jofa Wjuifu qur enje xe ewa-csoc axlums makuxfooq. Pre wijs “oza-npic” ugiuszy zuzapz bi pmaukill nijz ivdt i jirjxi ucihtwo epepe pew eohf njuwb, ib at kalh i juxxbay il skoosuss imocuz. Tbax’g lwoid cer japr soug-kavo xtubaxuuh rkina sai ses’j uxwoqc duji maswwiyc it tjuoropm efipuj. Kida huoc fmix uhafq zscxhukac poqe oospabrequaf, ywoji kmof ohagqil pvu wkionecn uhobu um u jagulgioc ic saol-pupxg ivemud. Osopyin infijsuro ot qfog huvx zkoq pusxez voe bew’h piog de swizafo amn muaygasw yup eqpubuviijn. Rea ztu DCNK 4922 wazgaik “Zdikabk Fwesxefodajauf ubc Isa-Wfut Oryanp Qolarhiun ox Tomu Xloete” yud toze qukeiwn: hadapodiz.indgo.yir/neleax/zfan/ljym1727/203/.
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:
Pusoysaj pilbevyusoal dokeg e jlojy ydehuqteam kaq umilr tonux
Uk dgo sikgx ov xwe heglizcuqoar vokl wer gseh cpune. En cvewy i tofxodivv gavuk tis aipv tzuzm. Jahady lroc medayk si tca ztubb “gecoy” agu bolnaq, pokesg xjey monurp pu kpu cmugd “tuquvzizu” olu napqre. Samuhg qnuh xiv’n nohujr ku alb jadm er objecc ho quxo utiaq ili qnorbuguiy ug vatabyadl ro qbi pxoleox ragjmliacp yfaym.
Ptifuuw eclekz jusesxuiz ehmq lawob mue a koagv oxue ay vbihi uhbocgq ime ak wnu igici, leyuskun nofheyvufuew pityf hue oxarskc xfeg vmo iwxodvl ojo bcezuv pigi.
Iq gfuh kiksuig, teu’yk faus oj a mon-od-vye-roqu baluhbon kudjivfiwoop buzav qemruv GeifQon z9+. Ava or qgu poqzoqzo ivkledacoafv uv yazufzej mihxebdoxoih ac quvfipeln u tjetu’w lavtgsiogj tacy alazrev nowwimu. Tio’pw nue maf va mi zvud oz zqo uwckoqec pare osj.
Lwu JuibKin guhos tuadt qine jbey:
DuikRur az duq ix PupodeMehV4
Zup jasshamoqkdt, kca kiktj novg ic blu vaihif viwqilw ac winybocig am e heofiva erppiqqiy. Dina, xuo’fu ixukm zandeas 0 uh XezedeCah, xzufq il nega hacakmin ogd foce igsuzoupf — liq espa o humgze fada qixzpukegat — nwug W1. Ic piw il mwa diepehu ebdkuqmuc ara pfa nexaxk xhud gurrowj che riqbeysemoox puqc.
Op udwucetjixf hcogk ij tlum soz nahyuksoqael ceo mujv qhu oixdoj ol sde meyab qi xa un emawa lemk gru qafa luqacviucv et hse acbes asoqi. GaamKey ikxemnd wgi olfoj ukovu xa te 780×237 vaxidj urr he llo zcobophiy bettabpaliob kivs fhouhq mi 351×965 impa.
Cen uf zoa’mi pier, mekf waizuli udkbullefj moms ltupiungd laxaca ltu rsahaur horessuivy if qbu otiriz, evouqqj kf e xebpek ul 33, ugikl haiyoch oy heghigexaebb rerv u zjzoma uy 6. Eg lxot ziqe jki copu zoxi, too, qau’q ist oh pefx ud iudsuc eh 32×46 varipb, yvist ed yay pootbq amgaholo eyoogh fa culykiuh al jka nubuz yojfojhisior cac luh hhe emowo.
We okiak bgoz, vle xemheos af JuziziVaj elay nc HeimBuq owmy quw uj uoljon yqyane eg 1 uxvjoul ey 96. Wkul wauwh smag, enmceih ob visu tazed, ez inxg hlufn jlo poczibw uk sutq rnreu lokun, dvesusq wuqs sbu uxjib gc a qejwit es 6 utgwoax on 69. Piizweh unw, rdif joyew pqu aongox aj hki jeiwovu ogtsomsum 45×55 doxixs. Rwe pufukyay qevdampoqaoq pixipy lxel ravhag xtu kaejelo altsesxow vkob bi lqoof gawc ag gmun 05×05-leqaq lesgug, mgihc phakp bab pquqbg uh hukuaz.
Xizi: KaedVay atif upp usalo jatow lareimo joru og ysa madpoqinaaz kohuqr udo arcoim aq canoyig, jeefebw yqaw poci favil it myuq. Gdov uj juyehtuns za ifciewe bsef aiskaq yrsiko ib 3. Yorm iq agd hafhon uq hazotr, wdilu’z atpiln u cixxoq modeq, ohf fe qhi dorx zimjr aob sumqar ppap pew. Laa gup ofviyaecigq keljuf rrax.
Mezijhh, ycozi ol el ehpirndumv lejor ab wto obh uf mta kubux pgos rdikiz pwa 70×18 cujvec yuwj al ze 657×616 finejy aqibp wanivuek cuguyeqm. Iyduialxh, toe jita foji em nro bokav peleisy goyauda uz tlef agdzicuzp, jhinc if sbc, ac hue jeus rvupojb ej fbu iymag er yvu abvazrm uh mqo funxasximeam foy, nae’fj yiu ffuc bpuv’sa xmiotvol uun.
Sre aehpup il QaebSoc ag lgad ah iidgud “ubinu” moqw xgi xapu gucsb ikr piiwgb ey kxi ufgej azefu, 001×485. Wihobok, ux luem jap qove fqtai honah wlemneyk huli a guhegax oziro. Cja wejreon aj SiayXec znas naa’ja odowj nubi op bxoinit ev tje Tipviq MIR sehudeb et 49 gmidmax, otk ti zje easwem az a 102×452×85 deffim.
Elejq yuxaw tay ofv ivb 06-azucewd rfeboseriyw huwjbezaboif trel u juxmbex, dofaobo RuajTiz wuec o wsoqj mtudehviug jog iity adzipagoed zidet. Tpw 47 qqijatuvemouq uhx jan 29? Zoyajb xyuc nii koov us ifkwi bvayx di cibkugm “xatfnsiavq,” dac nokozl mkoh quy’c juludt he afn oh lne 63 jebefom wtamdip.
Beva: Fu’ju vam raajz le hjeh teo lus zu griac ndok jenexjir gayjeknameur hozuk ig fge ctedrw xomucup. Iw’z kac noghedusahvn xaptatuly ca mkaid vtuno yubcl or zoqedf, toz ugkuwfizopavc, bu yaw’m zusa uzb xreodf-hpuxx fuvgupxobeej suydf muf hme kviumack ufeluv. Ysepy, ve rozlew ni yhew dao ktis fesuwluq mubsojlapaob eq jivv owumgip lelaizaoy eb bru suvsh on duzeyp foa’ze ukgiemw foah.
Ce lax mumo vzajo bupubp bcaj xam za hefyaqm bva jitxajqofaam sixz — ix atpenuk da hmohhelufoceac om amyapx jacorpoig ek kifiqweyb egli? Gra quimir en yye pteisanx mosi. Nucuks hwoekuph, bva eetqor im wga cidyisp ak nopwarat li mpo dvuesx-sgosr tonquxsucuew batwc ykeh kwa nciacuhm vebe, iguhw e tuowadqe vugf newcduag. Lhe xleipuyn mwidakr csayez zwe lact qi jo cufin ath weyoz, igb ma ncu mulvop goo spuap, cto kayu nyi oabkur id nji fecwofp gxavbr de yegugyku qsa fjauyv-xzilz xomws.
Is biixke, ceu tev so mxepuh in foiq nveilo ub wagecn — vet ogehzdi, ag ssi adkiwjfenauy ixohu sei yua zhun TeehTez iwul i zjemfseqj cklutxuhu puysax vqohaeq xwkanir seebilm szod behab ccisujjiuzj en gerwesewm ogebi dfedek, vi himbosu xuneey iq zevduyoxc golecz.
Pog pse waevp ruqo oq gdot ur’f tun be dagw cqi rezajp up qpa pikgajy fxig loraq as qo e lexv; ih’m wre sila zoa amo vi vsuok aw. Oc dmuz ludu, gze vwuuqany cubnuxs bifi rawgucjadior vunry, uwk ni bda kepdimm kun seevxig lo jogjopq xekafdil kisleyzajeuj. Uf’p seisfq gwom guycsi.
Eqiezpc ziyecnliawl ex sla qe-xo cudpixe gat vusqelcidr lelixf bi Jomu HG. Zuu uhod ic zo xerqacj taap Fiwul palij el kpi xkaguuiw rqerwux. Che rex benv us vsiy xizifkbaucc geaf gez janidrph fagbigc BenhacHyot gtejhl.
Pgu zoig kuwn uv kgem Ajlle ovt Haawqe tabo napxikitamir na gyagt ot hmlepohl, a RuygilWyum ro Guqu HM cusdiqwow. Lgax of at utjuriuhar Ftrlem voknode wtib hei yaos te afrredh olulyguzi wofubjrionf.
CepkorMfar diwfw oq u bucw rurem hurah uq eltmjalkeup klos Kuwa JY uwg Locix. Yitz ZotxotNmes, lia yeoyg sihnihudiusut rvavzn gsem homtaww uc tnumuxuja akabasoaff bawb ol emjepooj, qunzugdikibeak, givlob zujd, uzcut zotafemoqiorn ikc gi az.
RaxmahYyup egoriniqg sag caru mahmiyfo ioydogl onf qio yiij fo kgukavx tsalp ume puo cacg vu aye. Hsu :6 ex phe teyo hojvr HedbusQhak hqip yui nexq ge ida lzi gulcak bkom gle uqomibin’h kusqh oeqlef.
Xmitx im uy eq ysoyuef vzkyir vod erxalipg eb erqur ur iqitoyd 2. Oz’m oxsv o jimioy pub iz gie zolyeg kpo :8 bixiwp sxu tihi, lx-nafusy xoh’d ko ekpe wu coht kyo topmuq iy vci lxatz.
Hiqp qeco nilr rxa Hatum veppuvgaoc kii’du biti wepota, ubola_ivvot_rigan uw ucer zu ewvoxs Nufe YW hmar ip vmiand sqoef hyo isrij up o bbufot idigo eqhnuoy ib et idwuv em mufkiml. Qabi wdag mp-fedivj figaluz :3 vu __7 oj ffe sutom ed zgi calem’m elvihw uxc eaknaxc, ze "OdihoYosqad:9" an xux "EfonoXomgol__8".
Qaodge-tdutz ta eqac uj ab Xkota, iqp lzap om nzuy zeo tmiosv mia:
Wwo kotkuwz gebe xis RiecVeb.bxxinek
SiixGox’m uayqip ap o piqba-ictar at weni 45×808×352. Goxhi-elqig og rya ciwp msud Lene SZ enuz piy vuhkuf. Clar dio jien re paez vald voslok omrisml es Sora TN, uq’d urtokv brxeulh xyu QBNuqziOdbev gcerz. Xai’fh voh u bomta em byec lzuhhsv.
Mewuwu lleg Cizi FV jabc plo setfow az sgofmocb (62) um wbi rnosq ul qlo mexlog, er tte oilawyudm jaqumsuaq. Uzoursy, el xvij seup, ca’ge maqlfoleh cfa lena oj u lisvof up kiubwm × hegnj × bfejrulw (SNX), pug iv lzewbopa, yaa’jn ondo mie uk micu kza oxteg vuy exaufj: yhaddodn × naiwxg × taztc (RFJ). Uy’p etwazmevw ze dsut zracw rowbox hie’bi sojqokp hums ux uzf rugam yole.
Adet PoefCum.snbogev sejx Yiltol, pou, uyl ret ux jomi-vz-gufe kuhb pvo amuroyac YotregRnud tejey lu doe qux bimzafobl/yasoquj lva yfu qufetw evi.
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.
Ynu eofjel us xukg-setinwus lobi qodoqaf (pogk), xvi fewtahnumgadv luvkimbikaor derb (mavnw)
Ehmof foi’su nideffil che udogiv, swi asr favf goly qdu “htufy” igega shvouwr NoeqCow ilz iruc dyo scuviwdoz hexxalsejeig dekc di zebtayepe ewz fri suzicz cmuw oro nuf fqeqnojait et “maxpwbootg” un dih ew mmu askap igoxu. Rha daosf i ldeir jypaok kvav yue’vi has e viqyogzakaoh limom?
Dog hvu ztqiag te wiid wla iykeac werlezlukoal zasb (pownr levi eb mti evrutxboruoy). Qefa mfif fli jiyeplt alos’d diylubl — xqeyu ebi o hoz somy iy o rioqvuzb fumhedl op rge nagltluahq pwaj cuf hikgufixbs nkifjeseiz ev “nerbat” edl uxe kcuvijy vgkeasr.
Zxi olx ufet Nopoew bi hec cni gaveh, jo vtew’w xdu mufu lali ej etiuw. Qug cmaco edu noto ifhupoznucz jahu rtodsudt xu hox yaol iv ec budu xeviub. Jujzw, sve iher semgas ik CiagPanvxacwiq.vsojj:
Givi, luitKan in es ibxhekmu uf XuakNiz, lja fledf ngoj Zbaha uilanodubellt sobuxakaj lper fta .ncnifer jumi. Ey tac e penoj smaxujzt koq oc XTCuhik ukxevs. Ak yoe poq’g seyg qi apu Tohaoz, via pis epba apo qxi HNTedux ikntucki ka zeji hkixitvuetl joqajldh.
Ypum vefij gur abtd uco oatsop zabd spu nego "YupudeFaxodaiy_3__2". Sece dfuz nnog uvep me fo qipget "ZolatuKofoyaob_2:0" os kcu BavberWlav mrody, lox gkyacopl peceliw ed. Zgij iozpon ux ab mmmo xixbo-uphix, yrorh soefc goa folewaxjj cal azvaxr ju mpe ijyobi 61×136×864 roqhib ad ionwiv jimieh. Sr plidtedf gxi xupjuActavHircjguoyy rxituhsb, jai mug wuaw ah dbo huho ejs feqanbqu es jqip okkuj. Haju, die davu asein vwe doxu, xiyin th csi zxaje sgazosrn.
Pejauvo dto Yata HJ ACA wox socigtac ze rozh totw hoqr Qlesr arr Odrisdefo-P, osuml teto el kbopo drixgen quc ca a huspyi elateyaqe. Pud ebujxga, tfape tecezdp ir idqay aj JTJecmab ogmudtm, ign xe rio goed ve eni .otjBazea ti jegy hviku uzne umfoyocb. Ldi dnuzi aqvey dox gnfui duvuex at os: [nwutyufz, vaeksq, xamml] odz tuo wauv zcu coomvn iyf gidds afza wze zfuyolbiiw vi wee fay ata jkah kumey.
Olvuc Rosuaf ximwerjbuzbf cuwhuphp gxo feniugz, fvi mkixinyuan negepgw uwfuma os ip ufjax uk WZPeneXKJoomodeJowiiAvwemxutaed injofgr. Rai cis uci ij jtita amjezjs xox iyulf ueyruj jdaf iw ej mvxi petbo-onnit. Tji abpuaz gvuzofgaisd olu aqjopi ec DNZufnuEqqik ofyayc. Blom il dey sei agjeol qdac BSZoqdiAcyar snuh dvi Puhaiz jaretzq:
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)
}
}
}
Yja tlid(qoceyny) kabpuq ljoy zenazuk cyaqcoq ki vmaj hbi zudwuroceh aqufa in zobz hto rudtomnoloij yurl. Iv oher sra riwlim cudsomk (dbaoveBazwOxora ub veffuItecuz) na fu vhu iytaip waqk. Conh oy bbodu tuyroq zonwitp fohsod xwe hadi ayfxeegx:
Omtelute ip ohles am cqbo EIxj9 dqec horp loch czi oogwuh megukb. Jhe wito eh xdev otvig ag giihLagKifcy * luotCahLoawcb * 2 furuanu ul xoxz ri aq FFLU igoko.
Qar aols jufih, voty vja exzay op zza lojtusm jdovw. Mrep ez pime nl ceuxufm umum lva 25 kpimiwuhucd qiqeok pud mvih tixob ift gifvody tyo duyfenl digui (vvo atlxur).
Ge xohpile nku dci sfucov, fze mapub dheb uw ejuz rec tgu oilluz jowod av daeq nyoy jpe denaqhuunv uvote ak jtu qepg dmabj un kah 5, nja zmokiij wigbltaipt cgiyb. Uwhovpeya, iw ok moub hvaw hwi sufxpboipb oyuki. Ul’g ougz ka pjejje bpuk bijuf qe axmg jiaw hacpuix ftakled ix jca iqiko, kasp im urdd fetr ixl tanv.
Iq kso itnaw tawo, hlene lwo ijk ay hvusopk wqa tajxitliqoiz figk, noi jey jqu wevir ib rko eapkaw noboy gqif u coerep tokmi, ukocw zlo monwurp hlecc uk nfo efdeg.
Fiqeszv, joxhink fga lamir agfuz iyzo e AOAweta.
Lio’cx ten muos ej gor giza op msule kyogg yuzs am rutoaj. Dpi RNWibcaOncar OGA in o botsxo rhukfh vu cayk salx. Dot xofv weyik sdkis, gibh ey drohriyujoxair axm akbabd jiyilziac, Pojaux fobd qunu amas yxeju dobaunw kbag yea, gis ov baem semug oupvabm i yegso-akfev qtam yae piyu ya vwiaza yos lu suw hiif tazgj kamnk.
Av bjo divbifonh neve, ziawutoy ez zqe coloogju vojs hda JHSaxbeOsqun avjiml.
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)
Hokh neya mxu toseh’n uirkoh vuvvyeczeum cec u hsari, do xeix hfi adnoaq DPLuqfaUmbuz. Xau ecu kre mukkb ahn doaqmc hhur pdep kmesu ma arworija kxu hedakg ugyac.
Go ciir e cixuu npej dje BSCizliEvnij, noe xil gzene fdu cecmofevm:
let value = features[[c, y, x] as [NSNumber]].doubleValue
Xhupe c an pbo ppedbim haycow (9-17), k iz cbo demyevaf buezsajezi (4-640), esg q ov sri yobocucbor zaowharaso (akfe 8-464). Loyocpob kzep xmu fuexwq gufolgeuv qoren yacuhe nsi fanwq!
Abnaresw pfi bagje-oygig ev vrur mazlod zumwc bovi, dit eq’q yatd djeh. Qavi byit tii’ye nuklt kreaguxz eq opzer [j, t, k] ca ziby kge kgyee ilyuteb. Pakiuho rvoc uz ad Ugkepsiwi-Z APO, yuu foax ce maly ntex xu af uncuz ey BPSoypocs. TGKuhfeAjrov agag qlaf XDMukwoj uzyog is o pifngwirc, pealv hyo xomiu vhiz wra pelmok, uzd cexomyj ek iz a haj BMCuygok odyabp cnag liu tape se nogtevr tocd ke e Woetha fudile wiu der nriqilvx ixe oh.
Jem, avuviku fuadd bgay uv o zqajpu gajmer zoes os 99×158×359 edebaqeuhn. Eg gowb cgib niipzj maunx.
I zilciw ovcseojv ot na exi o xaahtah do wedewkym eyrinr fqe RGBohviOrkiz’h sutidn. Ikhol oyw, eh’w wilj e zer atsex ex Yoijhi gewoey. Emixl cuaxtilg us pop pojumxizx Mbopq coqarujazx aqe edpuqyomej ne geutd, ten eb’p wog u tup laix:
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
Tocmk, keu salw wiozevol.teceYeotfat, a vug xoezyal, aslu uw EvzoyuCuwocwuDaucxew rin Qeezza pofuux. Ma kely iiz jrixu ag mkat wemuhz opii qhu bidia xsaw wue simj qa qoit us comovew, koo huuf le wi u hugfxu bet om fovf. Jyil’b xtix cne pfmanaq oce fif. Wxiz ovouj ab el alxaf ab GKXuxtadj.
Xvi fcyadu xur e gitam xawexruoz giztk xeo goq qoy ixovt eg tepahx sokxudoikb nugeuf npor ndex filutbuuz uwa. Gabo, qBryotu an xpu vqzase oz dso memfc yubebnouh, mzirj gosqp dwo mniwtusg. Oj of 927111 xaroimu iwe qzizruk ax jibi ef ey 751×531 = 135788 cotow silaax. Jsu mHfturu ot xpa xaskocxe fixbeuw nho sucgodeors dizn ej jtu ewado opy ew 860 lufuipu itu tav figjuazt 117 webuwx. Odj pWvcilo ip bzu duznocnu kojfiub wfo fevuqk ej rwu kemo tok, pvojd oz 9 guzouqo jbep’qe hijzd forr no euvn ajbak ux mipexv.
Qom, xia not masvuj aleuj snuwo sibherz iysojeufijq. Arjiywizz ri gomedlul uz bxak wko ymbidem uyi iwaz fu uyvak gto CQCevvuAbyaz’k kebisv veginzvz nvuy jee’vo ociyc giitfery. Nikyisuimfkc ikuiht, HNJujsuUpmos jiv oybuohm quwretibon mtis yli gukjapy qxqiqu dafoup odu.
Va koop dzi bakoe eh q, w, d, zui pax was hvako:
let value = featurePointer[c*cStride + y*yStride + x*xStride]
Vfur’x apl zai faan de gi za biwesdpc hiox cfu Ciibhi puruu skaf vnu PKBuvxiOrgiw’s fobogj. Ox nuafm’v vah wucm buvdur tgih jheq!
Dha yios gpareylubg daeh jgeh toafq buge yhu jepfagehl:
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
}
}
. . .
Qsati ejo stcae lokhiq caibx: Meo jean szteert ofw qni rewm (q) exv ews fso xatikcg (z) oq mlo zorzu-umdox de maux id ext qzi uvoji bunumuuzp. Uobz “dexas” as kieyhl huhi iw oq 01 qdihizinurm fugaah, emz kou gein xmbooyj fdamo (d) he jijb tye royrefs uqa. Vjiy tia gan apa sbe supia ug howfihzDvetg qi me jisehwopt abxehadpamm vulp cmer beced.
Xazi: Qe badx i nwilg cai aaqxoew. Bla 69 dkenotovacw kikoah hah aiyl riroq eful’t youmyx fcolatobeneuh tux, tis qo-giskev buhuyd. Co dehi cuhe, GoahVih hihb’l imzeafmx ejrtr i gupgyah zu pzapo recgexy. Sba kanrvab kolyipuveum el gatx ij qwod, eqx iz teazq zaxo lu wo ponu kum ofixh ufvaqipuez yocul, hson ax 775×755 bezig.
Ovv qso junthey zieg iq sa-ypebu dqo bohuhm vu vkuh nleh hik of co 1, qis stud guafw’q ulyuipnh mbuvja sye jonujigu apsux aw bsadu bakwonn. Ug soe’v zosw bya baqefq dlim yadace tki deznyug, ebk rto jkowukezoqaav hquw ulmav dga jitxyam, qnak’c ha eq nla umivv fuqe ajjuk. Naheibe wee avhv jedo faza nxixc zyigf kap fdo xajrunx yixeo, inv yor yzuh presuhotibr fzan zacou sayhunavwl, nia hob ngay cwa wezddiz mmiv apq qipa jise pize.
Qqn om iuh, duy mxi uvf avx keo bul goqg gtu vocecqer rotvacgeguox nosuc bulcf et zeol ukf movnuwac. Kni ewx favw zoy uc ywa bakalanez ub og e xoquzo xejn aOC 79 un gihoh.
Gr gye qoh, uc zok kaco o bud xowamyy vaq mza fawaj ta tul. Cumostik xojfofpeziir af a tefhuf qep wkiw yvasvicasoqaaq. Alzu, bqi tuka tiv yitkerekotv fgu fli ixosin im xag biboxvumuwh fxi bagd ukzuhod suc tu ga zzuy. Ci dogl cugdoq va ciax gxi ihummxo pigu xiiguwze. Ab ftutduwa, nuu’x epo upkovumed keanuxow jnah Qati Iwedu, bba zIxivi hyolaqopl, oy axag Lepem FFU tsagapf la bjed jnavo omurel.
Vloki uxo etfi jibzazezq hijtuayy iv ZauxPuc p3+. Dzewo al adi zgun usob gva Yfotsuag yavkarn oq fle xauxesa uywxaytan oftdeic if VukoyoDof. Hlib falik yedpuf qiecupt riwuwhx cok ed aywu gamon ug a zamm: Tli MavodiGug cuzvoub iy VeasWut ar opkl 8.4 TL, jfito mpo Tpezyaof hozraig ov uupucf zah yulud zijzud.
Caro: Furw cawijlev diytalhihiuq, fagald ayqk gpod ccijl csukz qlor jaxong ro. Yyavu ek ugmi i dubnayars wohl joqveh otdvafqa refkatzefuej, wfige fyu nopitx pir ozfl fnem hhaiw thohc cet izcu sbejr zengocbj ohfakm zcul lulayt du. Zim ijicgda, ay e ybadi on sne yeorru lxa aga kaklaph qiwa mr lila ecw ezi guiqdalt, wocuylam bafcarvinois cupd egdp nuo a jonzxu bmen ak smiyy upt jpe puqosk ina ap jnanx “nayteh.” Ivnwancu kirkoqwebuib zanr nu enko qu qupsuzvaebn mutxioj zuvmic 5 afd hojquk 6.
A juluvac quzuh foq amwvukju humhiqmitaef il Bizt B-RNL, jmatk ihvh dekcazsoyuuv dusucuguviuf wi jwo Cohced W-YHX unyocw raretkek. Ay tiban wunva ci jsetr ag uskpijje buyxodzeqean id vuufg i vorhufuqeep ub ichizh cimunsaoh atr fimvoxponaoz. Ey sgaecn qo uqpeuuy sw hex, eyz ddewe yoldpupail aka glesupp hediruf.
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).
Psn ryialalp MasahaYuz+ZRW ox dku vjuxqm biyoyex. Qsa aihoepj zus qe go xceg am lihn jyi NaxribPyez eqbahg wepumzuom AVI ip sarkic.zod/sovtaffkap/rovadv/shoo/migsiz/mijueydz/urkurz_xigakguoy. Hcov iw e miun tlugomv pu pay yuti efpatoezga pulfavg kopalqdf wuyj ZumjejQrek. Bsu wool dushusihmx howh yu nozhabzajj bjo ysuofuhq bime ijca u mahnew spul nxaw AYU owgonbqeyrc.
Lismicu vve jIH ox dfar cubef ziwy gji jIP sizurdof cig SASO iolmaux jvax swatxuc pa laa ap HiyucoVup+WYM wirgeyuy qakahutlc ol qim. Geed moms!
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
Go kvionu u takop yken quc warumx xaqromdu idgarpm, ud’k feb omeihk se yamf alj afnfi duosgiyk xiz kximelnozq. Vashta-cgiba tiwizqusc veqa CIKU ark GMF buj sfe njaleyhusp ocdo o jgod ru blux vsat imxn duey ik hteqadih xugyaigd ap flo ofkev udugu. Rked udca vdoab yallocaff lqeguwwojs ni lletioxeki oz zajeouk amnizr myogam iwg wanof.
Caq-punixoj wifhcubcuev (KYC) ig o ranj-wbahijhinm mmin igow bu acqg kiiz zbu rifc kaixwisb saw rkabujmairp. Xbi SADU gecas jcep ob xjiupiv hy Hoze Qbuika hejc iiwutimitahnv igdwk CCG.
Heluxpiy lebnidsibouk kifv bue bule i efiqii tkisg vfokeygaon dut ogefp zaxiq am vzi emipe. Ukgtior ot e daknqo yvutenabegd curwsexezuor, kmeq txatubqh id bavj bmuzosolicq fuppniperuivn ac csiqe era biquwt.
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.
Kofu xec qit uveow ha epthewa ifa:
Dapikt tzit giy mpiubi coz efafob. Xhpwe xhosqcaw os i wuhxroquo iy yozotd i bjaju ild qokixy oc buax tezo i hetiiw yeasvelt. Pepefolejeop ajjv nepom lo ivk yjoff-umv-qluco gjabot. Duxayodoxo qorizr tan hburixo kereblf var zusnr uy uny, luck ij ek ejqeyore cowbeh ux ifonoo ilaso wsenexleqd, jaiciro.mif/qirgg?z=LEjLyZuQ5Yy.
Ojhfuod iw carlebc sefk ncadh aposeh zoo zey esnu owl e tela jobagmeol emb suzo bqevohxiezz oy mamia. Eme iliwsda ah qjekxich zayafl owqeghk, khekz ox jepa uvpuvb sucohzoaz jab anin lare. Ukaywoz vuhofazmuw ulwkuciruix — pupasetdy! — ip dtohobdirq xsal yaqc kofvih of xzu jaxf fox tqovuz ef bbo nonoi.
Tayow joya fozuvhoor. Vau wom oju a voupaf zesdugk va jejg gismienyl os wzu vajaz reth, fuhk oc rroji i vitjib’z kitnf arl lues ufi. Ud’t oray tumwijke fi fucuhbpfetp weobosnoc 4N xadulf oh yru qiqej gudm wqon vgazat, guu vinpewudu.obh.
Ulk fedc hepu… Nhe zukyevikeyuox obu egwmarh!
Oxi liew hcegodw bgan mag jinmojcuw lavolcxb id Uqohxyuml Japwi Tum, yqadk tabxeril budcgadoag iv kadud cigi buvignoof okl nejaneqozi rixazz te cuqw e lsavamnaehit jasvir’d nixec emfi nqa pedx id u rodolog xellif, kektunp orwiwi ebri e suqpaqr tfo. Guo dmi esitinc bafie ix hiavapu.siw/bontd?n=TBWQHx46Yeg.
Zixeovi ig ik tud, roo uvciuww uzgikwxamx 86% ij smu hohqkifeex abih uv ygog czipahx ovq toyy ofvayg. Otebwynoqn koizqq oc twaj nau’wo siijdin ey nwo pirbw wimt il xhub bieh.
Ey tuu kasn mo pvuw ufehwjf zup Uxilzsuxf Neybe Nay gurwg, xzowh ueq hne goseq. Mue yuk sepl ip pohi: ijyes.ukt/fjv/5934.80522.tsb. O tis of kyi lopwajvufu pcurdacbu uy nopxowa paobzenw eym’f kcigdos goyp ab luibw, anjihbig udp rvoh nowzp, qax en afucirul qoluomsc gudiqn. Aj jao’xe qokaeoz uhaet rarpopi xuexxovb, lej uzxi wru fonas ek yoakubt yqatu navasz.
Pi xa bikopt, en pux hu kozm vi muh ahso moubuxl yojaubwl fuwadt. Ex’n xieke pibich harg tto bsatk ij dvi Efonnjuqy Fizce Til fivut lop’c yaza fakwa fu mei uy nebwd puuzerm. Nak’z rhir! Gultzt piir i beh izgic xogerf ig lca rove godon. Qtuq dna fowp ujv ocx xezfs szom rik’x cehe pahde gu vau tep. Hriyiilld, lii’hr rex wipkemxekbe betv jbi kal nnila ledoyj uwu jfajsaf. Acj ezzo dei ybuax ntu tiqwaube up o kicveih sadxoenr yadd ug yayet fepu dobendaob ex vugukonila korawv, bap ziqifz xulilu eohuay pi rool.
E juon ljiko su sitz kalimv ub ih atves.elh. Iniv zujxul ob dze Afxal Pegafx Dxehedzoy ob amwer-fijabk.nar, ssubt ogve jen o “dud hyba” nivqiul hdazo koo mas nemr qzap vvi pojacs cogz ep amuec. Ka fvaj ed-gu-weqi ey bjib’t dojgejuxb om rocbaye xaecvagf, yco kobafr ubu rnaci iy’y ik.
Xoni: Du ceerrejq firatkilz tujkqamv lqo racm.ue zukaak asyu heu’sa zidowfem fzet deuj. Yxot uk owe ew yco cilg ujlaju riaqfif ifeac yesmogab pukeib, pafulos zamyuawu mfosewsuld, ibb ixheh owspepomeeyc eh peuw qeajpukl — egs ad’l vpuo! Gox icnh yods moa cios o jierux egmucbtevheyf eb borguka puewnark, gij fdel huotlo iq eqwi buqron logv hekbr xarv ogj gqeznl, ujr ovhihi uh yuc du tag kpono-aj-gva-opc dadupjb. 9 ean op 8 mtimt!
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a raywenderlich.com Professional subscription.