【20200404更新】关于如何将matlab训练的深度学习网络进行c代码生成

按照官方教程使用cmake编译出的mkldnn内库文件为x64文件,若尝试使用这些DLL在VS中编译x86工程会报错。

但在cmake编译时设定编译x86的DLL文件呢?(待试)

0. 环境配置

直接看图看链接

Deep Learning with MATLAB Coder
https://www.mathworks.com/help/coder/deep-learning-with-matlab-coder.html?s_tid=CRUX_lftnav

Prerequisites for Deep Learning with MATLAB Coder
https://www.mathworks.com/help/coder/ug/prerequisites-for-deep-learning-with-matlab-coder.html

在这里插入图片描述
下载mkl-dnn(这是老版本,新版本更改了名字
https://github.com/intel/mkl-dnn)

安装CMAKE
https://www.cnblogs.com/saucerman/articles/5608134.html

WIN下安装CMAKE
https://blog.csdn.net/u011231598/article/details/80338941

MATLAB那边的配置(ps:一定要仔细检查啊,弄错一步都会导致失败)
https://www.mathworks.com/matlabcentral/answers/447387-matlab-coder-how-do-i-build-the-intel-mkl-dnn-library-for-deep-learning-c-code-generation-and-dep

且网页内的这一步,貌似缺少了一个文件,mklbl.lib也需要复制到文件夹内,否则会导致这个错误
在这里插入图片描述
在这里插入图片描述

安装matlab内的coder支持,就是下图的这个玩意
在这里插入图片描述

1.正文,干活(大号字体说一句:CODER真的好慢啊!!!!!!!!!)

1.1 方法1,基于matlab自带的封面为辣椒的例子修改

这里使用了VGG16的深度学习网络。请自行在matlab内安装。图片使用这只小喵喵(我也不知道是什么品种,VGG16网络也不知道,哈哈哈哈)
在这里插入图片描述
函数如下

function y = ff(im) %输入im为224*224*3的UINT8图片数据

persistent mynet ;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('vgg16');
end
y = predict(mynet,im)';
end

啰嗦一句,如下两个命令必须确认是否已经运行,否则无法识别mkldnn.dll。编译报错

setenv('INTEL_MKLDNN', 'C:\Program Files\mkl-dnn\')
setenv('PATH', [getenv('INTEL_MKLDNN') filesep 'lib' pathsep getenv('PATH')])

为 ff 函数生成 MEX 代码。
要从ff.m 函数生成 MEX 函数,请将 codegen 与针对 MKL-DNN 库创建的深度学习配置对象结合使用。将该深度学习配置对象附加到传递给 codegen 的 MEX 代码生成配置对象。

 cfg = coder.config('mex');
 cfg.TargetLang = 'C++';
 cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');
 codegen -config cfgff -args {ones(224,224,3,'single')} -report

对测试图像调用 predict,可见283号的概率为最大。283号为tiger cat

im = imread('test.png');
im = imresize(im, [224,224]);
imshow(im);
predict_scores = ff_mex(single(im));

在这里插入图片描述
为 resnet_predict 函数生成静态库
要从 resnet_predict.m 函数生成静态库,请将 codegen 与针对 MKL-DNN 库创建的深度学习配置对象结合使用。将该深度学习配置对象附加到传递给 codegen 的代码生成配置对象。

cfg = coder.config('lib');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');
codegen -config cfg ff -args {ones(224,224,3,'single')} -report
%
codegendir = fullfile(pwd, 'codegen', 'lib', 'ff');

1.2方法2

这里使用了VGG16的深度学习网络。请自行在matlab内安装。
一般的,m文件内结果输出使用classify函数,但该函数不支持coder。
使用predict函数代替,输出各categories的概率,找到最大概率值对应的class,即为分类结果

function y = f(im) %输入im为224*224*3的UINT8图片数据
classes = {"tench";"goldfish";"great white shark";"tiger shark";"hammerhead";"electric ray";"stingray";"cock";"hen";"ostrich";"brambling";"goldfinch";"house finch";"junco";"indigo bunting";"robin";"bulbul";"jay";"magpie";"chickadee";"water ouzel";"kite";"bald eagle";"vulture";"great grey owl";"European fire salamander";"common newt";"eft";"spotted salamander";"axolotl";"bullfrog";"tree frog";"tailed frog";"loggerhead";"leatherback turtle";"mud turtle";"terrapin";"box turtle";"banded gecko";"common iguana";"American chameleon";"whiptail";"agama";"frilled lizard";"alligator lizard";"Gila monster";"green lizard";"African chameleon";"Komodo dragon";"African crocodile";"American alligator";"triceratops";"thunder snake";"ringneck snake";"hognose snake";"green snake";"king snake";"garter snake";"water snake";"vine snake";"night snake";"boa constrictor";"rock python";"Indian cobra";"green mamba";"sea snake";"horned viper";"diamondback";"sidewinder";"trilobite";"harvestman";"scorpion";"black and gold garden spider";"barn spider";"garden spider";"black widow";"tarantula";"wolf spider";"tick";"centipede";"black grouse";"ptarmigan";"ruffed grouse";"prairie chicken";"peacock";"quail";"partridge";"African grey";"macaw";"sulphur-crested cockatoo";"lorikeet";"coucal";"bee eater";"hornbill";"hummingbird";"jacamar";"toucan";"drake";"red-breasted merganser";"goose";"black swan";"tusker";"echidna";"platypus";"wallaby";"koala";"wombat";"jellyfish";"sea anemone";"brain coral";"flatworm";"nematode";"conch";"snail";"slug";"sea slug";"chiton";"chambered nautilus";"Dungeness crab";"rock crab";"fiddler crab";"king crab";"American lobster";"spiny lobster";"crayfish";"hermit crab";"isopod";"white stork";"black stork";"spoonbill";"flamingo";"little blue heron";"American egret";"bittern";"crane";"limpkin";"European gallinule";"American coot";"bustard";"ruddy turnstone";"red-backed sandpiper";"redshank";"dowitcher";"oystercatcher";"pelican";"king penguin";"albatross";"grey whale";"killer whale";"dugong";"sea lion";"Chihuahua";"Japanese spaniel";"Maltese dog";"Pekinese";"Shih-Tzu";"Blenheim spaniel";"papillon";"toy terrier";"Rhodesian ridgeback";"Afghan hound";"basset";"beagle";"bloodhound";"bluetick";"black-and-tan coonhound";"Walker hound";"English foxhound";"redbone";"borzoi";"Irish wolfhound";"Italian greyhound";"whippet";"Ibizan hound";"Norwegian elkhound";"otterhound";"Saluki";"Scottish deerhound";"Weimaraner";"Staffordshire bullterrier";"American Staffordshire terrier";"Bedlington terrier";"Border terrier";"Kerry blue terrier";"Irish terrier";"Norfolk terrier";"Norwich terrier";"Yorkshire terrier";"wire-haired fox terrier";"Lakeland terrier";"Sealyham terrier";"Airedale";"cairn";"Australian terrier";"Dandie Dinmont";"Boston bull";"miniature schnauzer";"giant schnauzer";"standard schnauzer";"Scotch terrier";"Tibetan terrier";"silky terrier";"soft-coated wheaten terrier";"West Highland white terrier";"Lhasa";"flat-coated retriever";"curly-coated retriever";"golden retriever";"Labrador retriever";"Chesapeake Bay retriever";"German short-haired pointer";"vizsla";"English setter";"Irish setter";"Gordon setter";"Brittany spaniel";"clumber";"English springer";"Welsh springer spaniel";"cocker spaniel";"Sussex spaniel";"Irish water spaniel";"kuvasz";"schipperke";"groenendael";"malinois";"briard";"kelpie";"komondor";"Old English sheepdog";"Shetland sheepdog";"collie";"Border collie";"Bouvier des Flandres";"Rottweiler";"German shepherd";"Doberman";"miniature pinscher";"Greater Swiss Mountain dog";"Bernese mountain dog";"Appenzeller";"EntleBucher";"boxer";"bull mastiff";"Tibetan mastiff";"French bulldog";"Great Dane";"Saint Bernard";"Eskimo dog";"malamute";"Siberian husky";"dalmatian";"affenpinscher";"basenji";"pug";"Leonberg";"Newfoundland";"Great Pyrenees";"Samoyed";"Pomeranian";"chow";"keeshond";"Brabancon griffon";"Pembroke";"Cardigan";"toy poodle";"miniature poodle";"standard poodle";"Mexican hairless";"timber wolf";"white wolf";"red wolf";"coyote";"dingo";"dhole";"African hunting dog";"hyena";"red fox";"kit fox";"Arctic fox";"grey fox";"tabby";"tiger cat";"Persian cat";"Siamese cat";"Egyptian cat";"cougar";"lynx";"leopard";"snow leopard";"jaguar";"lion";"tiger";"cheetah";"brown bear";"American black bear";"ice bear";"sloth bear";"mongoose";"meerkat";"tiger beetle";"ladybug";"ground beetle";"long-horned beetle";"leaf beetle";"dung beetle";"rhinoceros beetle";"weevil";"fly";"bee";"ant";"grasshopper";"cricket";"walking stick";"cockroach";"mantis";"cicada";"leafhopper";"lacewing";"dragonfly";"damselfly";"admiral";"ringlet";"monarch";"cabbage butterfly";"sulphur butterfly";"lycaenid";"starfish";"sea urchin";"sea cucumber";"wood rabbit";"hare";"Angora";"hamster";"porcupine";"fox squirrel";"marmot";"beaver";"guinea pig";"sorrel";"zebra";"hog";"wild boar";"warthog";"hippopotamus";"ox";"water buffalo";"bison";"ram";"bighorn";"ibex";"hartebeest";"impala";"gazelle";"Arabian camel";"llama";"weasel";"mink";"polecat";"black-footed ferret";"otter";"skunk";"badger";"armadillo";"three-toed sloth";"orangutan";"gorilla";"chimpanzee";"gibbon";"siamang";"guenon";"patas";"baboon";"macaque";"langur";"colobus";"proboscis monkey";"marmoset";"capuchin";"howler monkey";"titi";"spider monkey";"squirrel monkey";"Madagascar cat";"indri";"Indian elephant";"African elephant";"lesser panda";"giant panda";"barracouta";"eel";"coho";"rock beauty";"anemone fish";"sturgeon";"gar";"lionfish";"puffer";"abacus";"abaya";"academic gown";"accordion";"acoustic guitar";"aircraft carrier";"airliner";"airship";"altar";"ambulance";"amphibian";"analog clock";"apiary";"apron";"ashcan";"assault rifle";"backpack";"bakery";"balance beam";"balloon";"ballpoint";"Band Aid";"banjo";"bannister";"barbell";"barber chair";"barbershop";"barn";"barometer";"barrel";"barrow";"baseball";"basketball";"bassinet";"bassoon";"bathing cap";"bath towel";"bathtub";"beach wagon";"beacon";"beaker";"bearskin";"beer bottle";"beer glass";"bell cote";"bib";"bicycle-built-for-two";"bikini";"binder";"binoculars";"birdhouse";"boathouse";"bobsled";"bolo tie";"bonnet";"bookcase";"bookshop";"bottlecap";"bow";"bow tie";"brass";"brassiere";"breakwater";"breastplate";"broom";"bucket";"buckle";"bulletproof vest";"bullet train";"butcher shop";"cab";"caldron";"candle";"cannon";"canoe";"can opener";"cardigan";"car mirror";"carousel";"carpenter's kit";"carton";"car wheel";"cash machine";"cassette";"cassette player";"castle";"catamaran";"CD player";"cello";"cellular telephone";"chain";"chainlink fence";"chain mail";"chain saw";"chest";"chiffonier";"chime";"china cabinet";"Christmas stocking";"church";"cinema";"cleaver";"cliff dwelling";"cloak";"clog";"cocktail shaker";"coffee mug";"coffeepot";"coil";"combination lock";"computer keyboard";"confectionery";"container ship";"convertible";"corkscrew";"cornet";"cowboy boot";"cowboy hat";"cradle";"crane (machine)";"crash helmet";"crate";"crib";"Crock Pot";"croquet ball";"crutch";"cuirass";"dam";"desk";"desktop computer";"dial telephone";"diaper";"digital clock";"digital watch";"dining table";"dishrag";"dishwasher";"disk brake";"dock";"dogsled";"dome";"doormat";"drilling platform";"drum";"drumstick";"dumbbell";"Dutch oven";"electric fan";"electric guitar";"electric locomotive";"entertainment center";"envelope";"espresso maker";"face powder";"feather boa";"file";"fireboat";"fire engine";"fire screen";"flagpole";"flute";"folding chair";"football helmet";"forklift";"fountain";"fountain pen";"four-poster";"freight car";"French horn";"frying pan";"fur coat";"garbage truck";"gasmask";"gas pump";"goblet";"go-kart";"golf ball";"golfcart";"gondola";"gong";"gown";"grand piano";"greenhouse";"grille";"grocery store";"guillotine";"hair slide";"hair spray";"half track";"hammer";"hamper";"hand blower";"hand-held computer";"handkerchief";"hard disc";"harmonica";"harp";"harvester";"hatchet";"holster";"home theater";"honeycomb";"hook";"hoopskirt";"horizontal bar";"horse cart";"hourglass";"iPod";"iron";"jack-o'-lantern";"jean";"jeep";"jersey";"jigsaw puzzle";"jinrikisha";"joystick";"kimono";"knee pad";"knot";"lab coat";"ladle";"lampshade";"laptop";"lawn mower";"lens cap";"letter opener";"library";"lifeboat";"lighter";"limousine";"liner";"lipstick";"Loafer";"lotion";"loudspeaker";"loupe";"lumbermill";"magnetic compass";"mailbag";"mailbox";"maillot";"maillot, tank suit";"manhole cover";"maraca";"marimba";"mask";"matchstick";"maypole";"maze";"measuring cup";"medicine chest";"megalith";"microphone";"microwave";"military uniform";"milk can";"minibus";"miniskirt";"minivan";"missile";"mitten";"mixing bowl";"mobile home";"Model T";"modem";"monastery";"monitor";"moped";"mortar";"mortarboard";"mosque";"mosquito net";"motor scooter";"mountain bike";"mountain tent";"mouse";"mousetrap";"moving van";"muzzle";"nail";"neck brace";"necklace";"nipple";"notebook";"obelisk";"oboe";"ocarina";"odometer";"oil filter";"organ";"oscilloscope";"overskirt";"oxcart";"oxygen mask";"packet";"paddle";"paddlewheel";"padlock";"paintbrush";"pajama";"palace";"panpipe";"paper towel";"parachute";"parallel bars";"park bench";"parking meter";"passenger car";"patio";"pay-phone";"pedestal";"pencil box";"pencil sharpener";"perfume";"Petri dish";"photocopier";"pick";"pickelhaube";"picket fence";"pickup";"pier";"piggy bank";"pill bottle";"pillow";"ping-pong ball";"pinwheel";"pirate";"pitcher";"plane";"planetarium";"plastic bag";"plate rack";"plow";"plunger";"Polaroid camera";"pole";"police van";"poncho";"pool table";"pop bottle";"pot";"potter's wheel";"power drill";"prayer rug";"printer";"prison";"projectile";"projector";"puck";"punching bag";"purse";"quill";"quilt";"racer";"racket";"radiator";"radio";"radio telescope";"rain barrel";"recreational vehicle";"reel";"reflex camera";"refrigerator";"remote control";"restaurant";"revolver";"rifle";"rocking chair";"rotisserie";"rubber eraser";"rugby ball";"rule";"running shoe";"safe";"safety pin";"saltshaker";"sandal";"sarong";"sax";"scabbard";"scale";"school bus";"schooner";"scoreboard";"screen";"screw";"screwdriver";"seat belt";"sewing machine";"shield";"shoe shop";"shoji";"shopping basket";"shopping cart";"shovel";"shower cap";"shower curtain";"ski";"ski mask";"sleeping bag";"slide rule";"sliding door";"slot";"snorkel";"snowmobile";"snowplow";"soap dispenser";"soccer ball";"sock";"solar dish";"sombrero";"soup bowl";"space bar";"space heater";"space shuttle";"spatula";"speedboat";"spider web";"spindle";"sports car";"spotlight";"stage";"steam locomotive";"steel arch bridge";"steel drum";"stethoscope";"stole";"stone wall";"stopwatch";"stove";"strainer";"streetcar";"stretcher";"studio couch";"stupa";"submarine";"suit";"sundial";"sunglass";"sunglasses";"sunscreen";"suspension bridge";"swab";"sweatshirt";"swimming trunks";"swing";"switch";"syringe";"table lamp";"tank";"tape player";"teapot";"teddy";"television";"tennis ball";"thatch";"theater curtain";"thimble";"thresher";"throne";"tile roof";"toaster";"tobacco shop";"toilet seat";"torch";"totem pole";"tow truck";"toyshop";"tractor";"trailer truck";"tray";"trench coat";"tricycle";"trimaran";"tripod";"triumphal arch";"trolleybus";"trombone";"tub";"turnstile";"typewriter keyboard";"umbrella";"unicycle";"upright";"vacuum";"vase";"vault";"velvet";"vending machine";"vestment";"viaduct";"violin";"volleyball";"waffle iron";"wall clock";"wallet";"wardrobe";"warplane";"washbasin";"washer";"water bottle";"water jug";"water tower";"whiskey jug";"whistle";"wig";"window screen";"window shade";"Windsor tie";"wine bottle";"wing";"wok";"wooden spoon";"wool";"worm fence";"wreck";"yawl";"yurt";"web site";"comic book";"crossword puzzle";"street sign";"traffic light";"book jacket";"menu";"plate";"guacamole";"consomme";"hot pot";"trifle";"ice cream";"ice lolly";"French loaf";"bagel";"pretzel";"cheeseburger";"hotdog";"mashed potato";"head cabbage";"broccoli";"cauliflower";"zucchini";"spaghetti squash";"acorn squash";"butternut squash";"cucumber";"artichoke";"bell pepper";"cardoon";"mushroom";"Granny Smith";"strawberry";"orange";"lemon";"fig";"pineapple";"banana";"jackfruit";"custard apple";"pomegranate";"hay";"carbonara";"chocolate sauce";"dough";"meat loaf";"pizza";"potpie";"burrito";"red wine";"espresso";"cup";"eggnog";"alp";"bubble";"cliff";"coral reef";"geyser";"lakeside";"promontory";"sandbar";"seashore";"valley";"volcano";"ballplayer";"groom";"scuba diver";"rapeseed";"daisy";"yellow lady's slipper";"corn";"acorn";"hip";"buckeye";"coral fungus";"agaric";"gyromitra";"stinkhorn";"earthstar";"hen-of-the-woods";"bolete";"ear";"toilet tissue"};

persistent mynet ;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('vgg16');
end
possibility = predict(mynet,im)';
number = find(possibility == max(possibility));
y = classes{number(1),1};
end

这结果也行吧,至少能够识别是个喵呀!!手动无奈。
在这里插入图片描述
打开coder吧,看图说话
在这里插入图片描述
在这里插入图片描述
这里有几个警告,不知道为什么,也不知道有没有影响。先放在这吧
在这里插入图片描述
CODER完成,依然有警告信息。不过可以看见:f.c已经生成
在这里插入图片描述
在这里插入图片描述

3.最后啰嗦一点

不要忘记吧mkldnn的库和深度网络的相关文件放入文件夹,否则是无法运行的
在这里插入图片描述

同理,在LABVIEW内运行,也是需要吧mkldnn内的dll和lib文件放到文件夹内。
识别结果为282,也就是第283个类别概率最大。283为tiger cat。正确

在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
生成对抗网络(GAN)是一种深度学习模型,由生成器(Generator)和判别器(Discriminator)组成。生成器试图生成逼真的样本,而判别器则试图区分生成的样本和真实的样本。GAN在很多领域,如图像生成、语音合成等方面取得了巨大成功。 GAN的matlab代码解读如下: 1. 导入所需工具包,例如图像处理工具包、深度学习工具包等。 2. 定义生成器函数,输入为一个随机噪声向量,输出为生成的样本。生成器通常由卷积和反卷积层组成,其中反卷积层用于将随机噪声逐渐转化为生成样本。 3. 定义判别器函数,输入为一个样本,输出为该样本为真实样本的概率。判别器通常由卷积和全连接层组成,用于提取样本的特征并进行分类。 4. 定义生成器和判别器的优化器,通常使用随机梯度下降(SGD)算法。 5. 通过定义损失函数,将生成器的输出与判别器的输出进行对比,从而指导网络训练。常用的损失函数有交叉熵损失函数、均方误差损失函数等。 6. 定义训练循环,每次循环中进行以下操作: a. 生成一个随机噪声向量,作为输入给生成器。 b. 通过生成器生成一个样本。 c. 将真实样本和生成样本输入给判别器,计算判别器的输出。 d. 计算生成器的损失函数,并更新生成器的权重。 e. 计算判别器的损失函数,并更新判别器的权重。 7. 循环进行多次实验,直到生成器能够生成逼真的样本。 通过以上步骤,GAN可以训练出逼真的样本,并且生成器和判别器会不断互相提升,达到一种平衡状态。GAN的优点在于能够生成新颖、多样的样本,但也存在一些挑战,如训练稳定性和模式崩溃等问题,需要进一步的优化和调参。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值