From 2c1a03f58b2a5d32985de66bfc674b315b0b12c6 Mon Sep 17 00:00:00 2001 From: Haris Iqbal Date: Mon, 24 Dec 2018 16:02:07 +0100 Subject: [PATCH] added Unet example --- examples/Unet/Unet.pdf | Bin 0 -> 38954 bytes examples/Unet/Unet.tex | 164 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 examples/Unet/Unet.pdf create mode 100644 examples/Unet/Unet.tex diff --git a/examples/Unet/Unet.pdf b/examples/Unet/Unet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..afac47066ad4fc54a2e6bfbfef5d9fe47e861c51 GIT binary patch literal 38954 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

$vnpGeRg=*aNRtGP#T&i-K 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

Cf_t;V2I3MTU^|cTUxfIjY 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 z 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 literal 0 HcmV?d00001 diff --git a/examples/Unet/Unet.tex b/examples/Unet/Unet.tex new file mode 100644 index 0000000..25f366b --- /dev/null +++ b/examples/Unet/Unet.tex @@ -0,0 +1,164 @@ +\documentclass[border=8pt, multi, tikz]{standalone} +%\usepackage{blocks} +\usepackage{import} +\subimport{../../layers/}{init} +\usetikzlibrary{positioning} + +\def\ConvColor{rgb:yellow,5;red,2.5;white,5} +\def\ConvReluColor{rgb:yellow,5;red,5;white,5} +\def\PoolColor{rgb:red,1;black,0.3} +\def\UnpoolColor{rgb:blue,2;green,1;black,0.3} +\def\FcColor{rgb:blue,5;red,2.5;white,5} +\def\FcReluColor{rgb:blue,5;red,5;white,4} +\def\SoftmaxColor{rgb:magenta,5;black,7} + + +\newcommand{\copymidarrow}{\tikz \draw[-Stealth,line width =0.8mm,draw={rgb:blue,4;red,1;green,1;black,3}] (-0.3,0) -- ++(0.3,0);} + +\begin{document} +\begin{tikzpicture} +\tikzstyle{connection}=[ultra thick,every node/.style={sloped,allow upside down},draw=\edgecolor,opacity=0.7] +\tikzstyle{copyconnection}=[ultra thick,every node/.style={sloped,allow upside down},draw={rgb:blue,4;red,1;green,1;black,3},opacity=0.7] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Draw Encoder +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% conv1_1,conv1_2 +\pic[shift={(0,0,0)}] at (0,0,0) {RightBandedBox={name=cr1,% + xlabel={{"64","64"}},zlabel=I,fill=\ConvColor,bandfill=\ConvReluColor,% + height=40,width={2,2},depth=40}}; +%pool1 +\pic[shift={(0,0,0)}] at (cr1-east) {Box={name=p1,% + fill=\PoolColor,opacity=0.5,height=32,width=1,depth=32}}; +%%%%%%%%%% +% conv2_1,conv2_2 +\pic[shift={(1,0,0)}] at (p1-east) {RightBandedBox={name=cr2,% + xlabel={{"128","128"}},zlabel=I/2,fill=\ConvColor,bandfill=\ConvReluColor,% + height=32,width={3.5,3.5},depth=32}}; +%pool2 +\pic[shift={(0,0,0)}] at (cr2-east) {Box={name=p2,% + fill=\PoolColor,opacity=0.5,height=25,width=1,depth=25}}; +%%%%%%%%%% +% conv3_1,conv3_2 +\pic[shift={(0.75,0,0)}] at (p2-east) {RightBandedBox={name=cr3,% + xlabel={{"256","256"}},zlabel=I/4,fill=\ConvColor,bandfill=\ConvReluColor,% + height=25,width={4.5,4.5},depth=25}}; +%pool3 +\pic[shift={(0,0,0)}] at (cr3-east) {Box={name=p3,% + fill=\PoolColor,opacity=0.5,height=16,width=1,depth=16}}; +%%%%%%%%%% +% conv4_1,conv4_2,conv4_3 +\pic[shift={(0.5,0,0)}] at (p3-east) {RightBandedBox={name=cr4,% + xlabel={{"512","512"}},zlabel=I/8,fill=\ConvColor,bandfill=\ConvReluColor,% + height=16,width={6,6},depth=16}}; +%pool4 +\pic[shift={(0,0,0)}] at (cr4-east) {Box={name=p4,% + fill=\PoolColor,opacity=0.5,height=8,width=1,depth=8}}; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Bottleneck +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% conv5_1,conv5_2,conv5_3 +\pic[shift={(0.75,0,0)}] at (p4-east) {RightBandedBox={name=cr5,caption=Bottleneck Conv,% + xlabel={{"1024","1024"}},zlabel=I/16,fill=\ConvColor,bandfill=\ConvReluColor,% + height=8,width={8,8},depth=8}}; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Draw Decoder +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% unpool4, +\pic[shift={(1.2,0,0)}] at (cr5-east) {Box={name=up4,% + fill=\UnpoolColor,opacity=0.6,height=16,width=1,depth=16}}; +\pic[shift={(0,0,0)}] at (up4-east) {RightBandedBox={name=ucr4,% + xlabel={{"512","dummy"}},fill=\ConvColor,bandfill=\ConvReluColor,% + height=16,width=6,depth=16}}; +\pic[shift={(0,0,0)}] at (ucr4-east) {RightBandedBox={name=cat4,% + xlabel={{"512",""}},fill={rgb:white,1;black,3},bandfill={rgb:white,1;black,2},opacity=0.2,height=16,width=6,depth=16}}; +\pic[shift={(0,0,0)}] at (cat4-east) {RightBandedBox={name=ucr4a,% + xlabel={{"512","512"}},zlabel=I/8,fill=\ConvColor,bandfill=\ConvReluColor,% + height=16,width={6,6},depth=16}}; +%%%%%%%%%% +%% unpool3, +\pic[shift={(1.5,0,0)}] at (ucr4a-east) {Box={name=up3,% + fill=\UnpoolColor,opacity=0.6,height=25,width=1,depth=25}}; +\pic[shift={(0,0,0)}] at (up3-east) {RightBandedBox={name=ucr3,% + xlabel={{"256","dummy"}},fill=\ConvColor,bandfill=\ConvReluColor,% + height=25,width=4.5,depth=25}}; +\pic[shift={(0,0,0)}] at (ucr3-east) {RightBandedBox={name=cat3,% + xlabel={{"256",""}},fill={rgb:white,1;black,3},bandfill={rgb:white,1;black,2},opacity=0.2,height=25,width=4.5,depth=25}}; +\pic[shift={(0,0,0)}] at (cat3-east) {RightBandedBox={name=ucr3a,% + xlabel={{"256","256"}},zlabel=I/4,fill=\ConvColor,bandfill=\ConvReluColor,% + height=25,width={4.5,4.5},depth=25}}; +%%%%%%%%%% +%% unpool2, +\pic[shift={(1,0,0)}] at (ucr3a-east) {Box={name=up2,% + fill=\UnpoolColor,opacity=0.6,height=32,width=1,depth=32}}; +\pic[shift={(0,0,0)}] at (up2-east) {RightBandedBox={name=ucr2,% + xlabel={{"128","dummy"}},fill=\ConvColor,bandfill=\ConvReluColor,% + height=32,width=3.5,depth=32}}; +\pic[shift={(0,0,0)}] at (ucr2-east) {RightBandedBox={name=cat2,% + xlabel={{"128",""}},fill={rgb:white,1;black,3},bandfill={rgb:white,1;black,2},opacity=0.2,height=32,width=3.5,depth=32}}; +\pic[shift={(0,0,0)}] at (cat2-east) {RightBandedBox={name=ucr2a,% + xlabel={{"128","128"}},zlabel=I/2,fill=\ConvColor,bandfill=\ConvReluColor,% + height=32,width={3.5,3.5},depth=32}}; +%%%%%%%%%% +%% unpool1, +\pic[shift={(1.5,0,0)}] at (ucr2a-east) {Box={name=up1,% + fill=\UnpoolColor,opacity=0.6,height=40,width=1,depth=40}}; +\pic[shift={(0,0,0)}] at (up1-east) {RightBandedBox={name=ucr1,% + xlabel={{"64","dummy"}},fill=\ConvColor,bandfill=\ConvReluColor,% + height=40,width=2.5,depth=40}}; +\pic[shift={(0,0,0)}] at (ucr1-east) {RightBandedBox={name=cat1,% + xlabel={{"64",""}},fill={rgb:white,1;black,3},bandfill={rgb:white,1;black,2},opacity=0.2,height=40,width=2.5,depth=40}}; +\pic[shift={(0,0,0)}] at (cat1-east) {RightBandedBox={name=ucr1a,% + xlabel={{"64","64"}},fill=\ConvColor,bandfill=\ConvReluColor,% + height=40,width={2.5,2.5},depth=40}}; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Classifier +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pic[shift={(0.75,0,0)}] at (ucr1a-east) {Box={name=out,caption=Softmax,% + zlabel=I,fill=\SoftmaxColor,height=40,width=1,depth=40}}; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Draw connections +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\draw [connection] (p1-east) -- node {\midarrow} (cr2-west); +\draw [connection] (p2-east) -- node {\midarrow} (cr3-west); +\draw [connection] (p3-east) -- node {\midarrow} (cr4-west); +\draw [connection] (p4-east) -- node {\midarrow} (cr5-west); +\draw [connection] (cr5-east) -- node {\midarrow} (up4-west); +\draw [connection] (ucr4a-east) -- node {\midarrow} (up3-west); +\draw [connection] (ucr3a-east) -- node {\midarrow} (up2-west); +\draw [connection] (ucr2a-east) -- node {\midarrow} (up1-west); +\draw [connection] (ucr1a-east) -- node {\midarrow} (out-west); +%\draw [connection] (out-east) -- node {\midarrow} ++(2,0,0); + +\path (cr4-southeast) -- (cr4-northeast) coordinate[pos=1.25] (cr4-top) ; +\path (cr3-southeast) -- (cr3-northeast) coordinate[pos=1.25] (cr3-top) ; +\path (cr2-southeast) -- (cr2-northeast) coordinate[pos=1.25] (cr2-top) ; +\path (cr1-southeast) -- (cr1-northeast) coordinate[pos=1.25] (cr1-top) ; + +\path (cat4-south) -- (cat4-north) coordinate[pos=1.25] (cat4-top) ; +\path (cat3-south) -- (cat3-north) coordinate[pos=1.25] (cat3-top) ; +\path (cat2-south) -- (cat2-north) coordinate[pos=1.25] (cat2-top) ; +\path (cat1-south) -- (cat1-north) coordinate[pos=1.25] (cat1-top) ; +% +\draw [copyconnection] (cr4-northeast) +-- node {\copymidarrow}(cr4-top) +-- node {\copymidarrow}(cat4-top) +-- node {\copymidarrow} (cat4-north); +% +\draw [copyconnection] (cr3-northeast) +-- node {\copymidarrow}(cr3-top) +-- node {\copymidarrow}(cat3-top) +-- node {\copymidarrow} (cat3-north); +% +\draw [copyconnection] (cr2-northeast) +-- node {\copymidarrow}(cr2-top) +-- node {\copymidarrow}(cat2-top) +-- node {\copymidarrow} (cat2-north); +% +\draw [copyconnection] (cr1-northeast) +-- node {\copymidarrow}(cr1-top) +-- node {\copymidarrow}(cat1-top) +-- node {\copymidarrow} (cat1-north); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\end{tikzpicture} +\end{document}