[27c943]: / pathflowai / __pycache__ / unet2.cpython-36.pyc

Download this file

269 lines (269 with data), 17.7 kB

3

ƲA]âbã@sHddlmZmZddljZddljjZddlZ	ddl	Z	Gdd„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZ
Gd	d
„d
ej
ƒZGdd„dej
ƒZGd
d„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZGdd„dej
ƒZGdd „d ej
ƒZdS)!é)Úprint_functionÚdivisionNcs(eZdZdZ‡fdd„Zdd„Z‡ZS)Ú
conv_blockz
    Convolution Block
    cshtt|ƒjƒtjtj||dddddtj|ƒtjddtj||dddddtj|ƒtjddƒ|_dS)NééT)Úkernel_sizeÚstrideÚpaddingÚbias)Úinplace)	ÚsuperrÚ__init__ÚnnÚ
SequentialÚConv2dÚBatchNorm2dÚReLUÚconv)ÚselfÚin_chÚout_ch)Ú	__class__©úA/Users/joshualevy/Documents/GitHub/PathFlowAI/pathflowai/unet2.pyr

s
zconv_block.__init__cCs|j|ƒ}|S)N)r)rÚxrrrÚforwards
zconv_block.forward)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
rÚ
__classcell__rr)rrr	srcs(eZdZdZ‡fdd„Zdd„Z‡ZS)Úup_convz
    Up Convolution Block
    c
sLtt|ƒjƒtjtjddtj||dddddtj|ƒtjddƒ|_	dS)Né)Úscale_factorrrT)rrr	r
)r)
rr!r
rrÚUpsamplerrrÚup)rrr)rrrr
"s
zup_conv.__init__cCs|j|ƒ}|S)N)r%)rrrrrr+s
zup_conv.forward)rrrrr
rr rr)rrr!s	r!cs*eZdZdZd‡fdd„	Zdd„Z‡ZS)	ÚU_NetzR
    UNet - Basic Implementation
    Paper : https://arxiv.org/abs/1505.04597
    rrcsŽtt|ƒjƒd}||d|d|d|dg}tjddd|_tjddd|_tjddd|_tjddd|_t	||dƒ|_
t	|d|dƒ|_t	|d|dƒ|_t	|d|d	ƒ|_
t	|d	|dƒ|_t|d|d	ƒ|_t	|d|d	ƒ|_t|d	|dƒ|_t	|d	|dƒ|_t|d|dƒ|_t	|d|dƒ|_t|d|dƒ|_t	|d|dƒ|_tj|d|dddd
|_dS)Né@r"ééé)rrrrr)rrr	)rr&r
rÚ	MaxPool2dÚMaxpool1ÚMaxpool2ÚMaxpool3ÚMaxpool4rÚConv1ÚConv2ÚConv3ÚConv4ÚConv5r!ÚUp5ÚUp_conv5ÚUp4ÚUp_conv4ÚUp3ÚUp_conv3ÚUp2ÚUp_conv2rÚConv)rrrÚn1Úfilters)rrrr
5s*zU_Net.__init__cCs|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j	|ƒ}t
j||fdd}|j|ƒ}|j
|ƒ}t
j||fdd}|j|ƒ}|j|ƒ}	t
j||	fdd}	|j|	ƒ}	|j|	ƒ}
t
j||
fdd}
|j|
ƒ}
|j|
ƒ}|S)Nr)Údim)r0r,r1r-r2r.r3r/r4r5ÚtorchÚcatr6r7r8r9r:r;r<r=)rrÚe1Úe2Úe3Úe4Úe5Úd5Úd4Úd3Úd2ÚoutrrrrVs.

















z
U_Net.forward)rr)rrrrr
rr rr)rrr&0s!r&cs*eZdZdZd‡fdd„	Zdd„Z‡ZS)ÚRecurrent_blockz(
    Recurrent Block for R2Unet_CNN
    r"c	sNtt|ƒjƒ||_||_tjtj||dddddtj|ƒtj	ddƒ|_
dS)NrrT)rrr	r
)r)rrMr
Útrrrrrrr)rrrN)rrrr
‚szRecurrent_block.__init__cCs8x2t|jƒD]$}|dkr"|j|ƒ}|j||ƒ}qW|S)Nr)ÚrangerNr)rrÚirLrrrrs

zRecurrent_block.forward)r")rrrrr
rr rr)rrrM~srMcs*eZdZdZd‡fdd„	Zdd„Z‡ZS)ÚRRCNN_blockz?
    Recurrent Residual Convolutional Neural Network Block
    r"csFtt|ƒjƒtjt||dt||dƒ|_tj||dddd|_dS)N)rNrr)rrr	)	rrQr
rrrMÚRCNNrr=)rrrrN)rrrr
™s

zRRCNN_block.__init__cCs |j|ƒ}|j|ƒ}||}|S)N)r=rR)rrÚx1Úx2rLrrrr¢s

zRRCNN_block.forward)r")rrrrr
rr rr)rrrQ•s	rQcs*eZdZdZd	‡fdd„	Zdd„Z‡ZS)
ÚR2U_NetzM
    R2U-Unet implementation
    Paper: https://arxiv.org/abs/1802.06955
    rrr"csÀtt|ƒjƒd}||d|d|d|dg}tjddd|_tjddd|_tjddd|_tjddd|_tj	dd|_	t
||d|d	|_t
|d|d
|d	|_t
|d
|d|d	|_
t
|d|d|d	|_t
|d|d|d	|_t|d|dƒ|_t
|d|d|d	|_t|d|dƒ|_t
|d|d|d	|_t|d|d
ƒ|_t
|d|d
|d	|_t|d
|dƒ|_t
|d
|d|d	|_tj|d|d
d
dd|_dS)
Nr'r"r(r)r*)rr)r#r)rNrr)rrr	)rrUr
rr+ÚMaxpoolr,r-r.r$rQÚRRCNN1ÚRRCNN2ÚRRCNN3ÚRRCNN4ÚRRCNN5r!r5Ú	Up_RRCNN5r7Ú	Up_RRCNN4r9Ú	Up_RRCNN3r;Ú	Up_RRCNN2rr=)rÚimg_chÚ	output_chrNr>r?)rrrr
®s,zR2U_Net.__init__cCs|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j	|ƒ}t
j||fdd}|j|ƒ}|j
|ƒ}t
j||fdd}|j|ƒ}|j|ƒ}	t
j||	fdd}	|j|	ƒ}	|j|	ƒ}
t
j||
fdd}
|j|
ƒ}
|j|
ƒ}|S)Nr)r@)rWrVrXr,rYr-rZr.r[r5rArBr\r7r]r9r^r;r_r=)rrrCrDrErFrGrHrIrJrKrLrrrrÖs.

















zR2U_Net.forward)rrr")rrrrr
rr rr)rrrU©s(rUcs(eZdZdZ‡fdd„Zdd„Z‡ZS)ÚAttention_blockz
    Attention Block
    c	s˜tt|ƒjƒtjtj||dddddtj|ƒƒ|_tjtj||dddddtj|ƒƒ|_tjtj|ddddddtjdƒtj	ƒƒ|_
tjdd|_dS)NrrT)rrr	r
)r)
rrbr
rrrrÚW_gÚW_xÚSigmoidÚpsirÚrelu)rÚF_gÚF_lÚF_int)rrrr
szAttention_block.__init__cCs8|j|ƒ}|j|ƒ}|j||ƒ}|j|ƒ}||}|S)N)rcrdrgrf)rÚgrÚg1rSrfrLrrrrs


zAttention_block.forward)rrrrr
rr rr)rrrbýsrbcs*eZdZdZd‡fdd„	Zdd„Z‡ZS)	ÚAttU_NetzS
    Attention Unet implementation
    Paper: https://arxiv.org/abs/1804.03999
    rrcsútt|ƒjƒd}||d|d|d|dg}tjddd|_tjddd|_tjddd|_tjddd|_t	||dƒ|_
t	|d|dƒ|_t	|d|dƒ|_t	|d|d	ƒ|_
t	|d	|dƒ|_t|d|d	ƒ|_t|d	|d	|dd
|_t	|d|d	ƒ|_t|d	|dƒ|_t|d|d|dd
|_t	|d	|dƒ|_t|d|dƒ|_t|d|d|dd
|_t	|d|dƒ|_t|d|dƒ|_t|d|ddd
|_t	|d|dƒ|_tj|d|dddd|_dS)
Nr'r"r(r)r*)rrrrr)rhrirjé )rrr	)rrmr
rr+r,r-r.r/rr0r1r2r3r4r!r5rbÚAtt5r6r7ÚAtt4r8r9ÚAtt3r:r;ÚAtt2r<rr=)rr`rar>r?)rrrr
%s2zAttU_Net.__init__cCs8|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j	|ƒ}|j
||d}tj||fdd}|j
|ƒ}|j|ƒ}	|j|	|d}
tj|
|	fdd}	|j|	ƒ}	|j|	ƒ}|j||d}tj||fdd}|j|ƒ}|j|ƒ}
|j|
|d}tj||
fdd}
|j|
ƒ}
|j|
ƒ}|S)N)rkrr)r@)r0r,r1r-r2r.r3r/r4r5rorArBr6r7rpr8r9rqr:r;rrr<r=)rrrCrDrErFrGrHÚx4rIÚx3rJrTrKrSrLrrrrKs6

















zAttU_Net.forward)rr)rrrrr
rr rr)rrrm s&rmcs*eZdZdZd	‡fdd„	Zdd„Z‡ZS)
Ú
R2AttU_Netz|
    Residual Recuurent Block with attention Unet
    Implementation : https://github.com/LeeJunHyun/Image_Segmentation
    rrr"cstt|ƒjƒd}||d|d|d|dg}tjddd|_tjddd|_tjddd|_tjddd|_t	||d|d|_
t	|d|d	|d|_t	|d	|d|d|_t	|d|d
|d|_
t	|d
|d|d|_t|d|d
ƒ|_t|d
|d
|dd|_t	|d|d
|d|_t|d
|dƒ|_t|d|d|d	d|_t	|d
|d|d|_t|d|d	ƒ|_t|d	|d	|dd|_t	|d|d	|d|_t|d	|dƒ|_t|d|ddd|_t	|d	|d|d|_tj|d|d	d	dd
|_dS)Nr'r"r(r)r*)rrr)rNrr)rhrirjrn)rrr	)rrur
rr+r,r-r.r/rQrWrXrYrZr[r!r5rbror\r7rpr]r9rqr^r;rrr_rr=)rrrrNr>r?)rrrr
}s2zR2AttU_Net.__init__cCs8|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j	|ƒ}|j
||d}tj||fdd}|j
|ƒ}|j|ƒ}|j||d}tj||fdd}|j|ƒ}|j|ƒ}	|j|	|d}tj||	fdd}	|j|	ƒ}	|j|	ƒ}
|j|
|d}tj||
fdd}
|j|
ƒ}
|j|
ƒ}|S)N)rkrr)r@)rWr,rXr-rYr.rZr/r[r5rorArBr\r7rpr]r9rqr^r;rrr_r=)rrrCrDrErFrGrHrIrJrKrLrrrr£s6

















zR2AttU_Net.forward)rrr")rrrrr
rr rr)rrruxs&rucs$eZdZ‡fdd„Zdd„Z‡ZS)Úconv_block_nestedcsdtt|ƒjƒtjdd|_tj||dddd|_tj|ƒ|_	tj||dddd|_
tj|ƒ|_dS)NT)rrr)rr	r
)rrvr
rrÚ
activationrÚconv1rÚbn1Úconv2Úbn2)rrZmid_chr)rrrr
Ñszconv_block_nested.__init__cCs@|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|j|ƒ}|S)N)rxryrwrzr{)rrÚoutputrrrrÙs





zconv_block_nested.forward)rrrr
rr rr)rrrvÏsrvcs*eZdZdZd‡fdd„	Zdd„Z‡ZS)	Ú
NestedUNetzP
    Implementation of this paper:
    https://arxiv.org/pdf/1807.10165.pdf
    rrcsVtt|ƒjƒd}||d|d|d|dg}tjddd|_tjdddd	|_t||d
|d
ƒ|_	t|d
|d|dƒ|_
t|d|d|dƒ|_t|d|d|dƒ|_t|d|d|dƒ|_
t|d
|d|d
|d
ƒ|_t|d|d|d|dƒ|_t|d|d|d|dƒ|_t|d|d|d|dƒ|_t|d
d|d|d
|d
ƒ|_t|dd|d|d|dƒ|_t|dd|d|d|dƒ|_t|d
d|d|d
|d
ƒ|_t|dd|d|d|dƒ|_t|d
d|d|d
|d
ƒ|_tj|d
|dd
|_dS)Nr'r"r(r)r*)rrÚbilinearT)r#ÚmodeÚ
align_cornersrrr)r)rr}r
rr+Úpoolr$ÚUprvÚconv0_0Úconv1_0Úconv2_0Úconv3_0Úconv4_0Úconv0_1Úconv1_1Úconv2_1Úconv3_1Úconv0_2Úconv1_2Úconv2_2Úconv0_3Úconv1_3Úconv0_4rÚfinal)rrrr>r?)rrrr
ës*""""&&&&&&zNestedUNet.__init__cCs„|j|ƒ}|j|j|ƒƒ}|jtj||j|ƒgdƒƒ}|j|j|ƒƒ}|jtj||j|ƒgdƒƒ}|j	tj|||j|ƒgdƒƒ}|j
|j|ƒƒ}|jtj||j|ƒgdƒƒ}	|jtj|||j|	ƒgdƒƒ}
|j
tj||||j|
ƒgdƒƒ}|j|j|ƒƒ}|jtj||j|ƒgdƒƒ}
|jtj||	|j|
ƒgdƒƒ}|jtj|||
|j|ƒgdƒƒ}|jtj|||||j|ƒgdƒƒ}|j|ƒ}|S)Nr)rƒr„rrˆrArBr‚r…r‰rŒr†rŠrrr‡r‹rŽrr‘r’)rrZx0_0Zx1_0Zx0_1Zx2_0Zx1_1Zx0_2Zx3_0Zx2_1Zx1_2Zx0_3Zx4_0Zx3_1Zx2_2Zx1_3Zx0_4r|rrrrs"
  "
zNestedUNet.forward)rr)rrrrr
rr rr)rrr}æs r}cs2eZdZdZddejf‡fdd„	Zdd„Z‡ZS)ÚConvolutionBlockzConvolution blockrTcs^tt|ƒjƒ||_||_tj|||dd|_tj|ƒ|_	tj|||dd|_
tj|ƒ|_dS)Nr)r	)rr“r
ÚbnÚlast_activerrÚc1rÚb1Úc2Úb2)rÚ
in_filtersÚout_filtersrÚ	batchnormr•)rrrr
)szConvolutionBlock.__init__cCsL|j|ƒ}|jr|j|ƒ}tj|ƒ}|j|ƒ}|jr>|j|ƒ}|j|ƒ}|S)N)r–r”r—ÚFrgr˜r™r•)rrrrrr3s





zConvolutionBlock.forward)	rrrrrrgr
rr rr)rrr“&s
r“cs*eZdZdZd
‡fdd„	Zdd	„Z‡ZS)ÚContractiveBlockzDeconvuling Blockrr"çà?Tcs@tt|ƒjƒt||||d|_tj|dd|_tj|ƒ|_	dS)N)ršr›rrœT)rÚ	ceil_mode)
rržr
r“r–rr+Úp1Ú	Dropout2dÚd1)rršr›Ú	conv_kernZ	pool_kernÚdropoutrœ)rrrr
Bs

zContractiveBlock.__init__cCs|j|ƒ}||j|j|ƒƒfS)N)r–r£r¡)rrÚcrrrrIs
zContractiveBlock.forward)rr"rŸT)rrrrr
rr rr)rrrž?sržcs*eZdZdZd	‡fdd„	Zdd„Z‡ZS)
ÚExpansiveBlockzUpconvole Blockrr"çà?csHtt|ƒjƒtj|||dddd|_tj|ƒ|_t||||ƒ|_	dS)Nr"r)rr	Úoutput_padding)
rr§r
rÚConvTranspose2dÚt1ÚDropoutr£r“r–)rZin_filters1Zin_filters2r›Ztr_kernr¤rr¥)rrrr
QszExpansiveBlock.__init__cCs.|j|ƒ}tj||gdƒ}|j|j|ƒƒ}|S)Nr)r«rArBr–r£)rrZ
contractive_xZx_upsZx_concatZx_finrrrrWs
zExpansiveBlock.forward)rrr"r¨)rrrrr
rr rr)rrr§Nsr§cs*eZdZdZd	‡fdd„	Zdd„Z‡ZS)
Ú	Unet_dictz2Unet which operates with filters dictionary valuesrnçà?Tc	shtt|ƒjƒi}d|g}xntdƒD]b}|jdt|ƒt|d|d|dƒ|d|df|dt|ƒ<|d|d<|dd|d<q$Wt|d|d|d|_|d|df|d<x€t	tdƒƒD]p}|jd	t|ƒt
|d|dt|ƒd|dƒƒ|d|df|d	t|ƒ<|d|d<|dd|d<qÄWtj|d|dd
|_
|d|f|d<||_dS)Nrr(Zcontractive_rr)rœr"Ú
bottleneckZ
expansive_)rr|)rr­r
rOÚ
add_moduleÚstrržr“r¯Úreversedr§rrr|Úfilters_dict)rÚn_labelsZ	n_filtersZ	p_dropoutrœr³Z	filt_pairrP)rrrr
as&&&zUnet_dict.__init__cCsž|j|ƒ\}}|j|ƒ\}}|j|ƒ\}}|j|ƒ\}}	|j|	ƒ}
tj|j|
|ƒƒ}tj|j||ƒƒ}tj|j	||ƒƒ}
tj|j
|
|ƒƒ}tj|j|ƒddS)Nr)r@)
Z
contractive_0Z
contractive_1Z
contractive_2Z
contractive_3r¯rrgZexpansive_3Zexpansive_2Zexpansive_1Zexpansive_0Úsoftmaxr|)rrZc00Úc0Úc11r–Úc22r˜Zc33Úc3ZbottleÚu3Úu2Úu1Úu0rrrr{s
zUnet_dict.forward)rnr®T)rrrrr
rr rr)rrr­^sr­)Ú
__future__rrÚtorch.nnrZtorch.nn.functionalÚ
functionalrÚtorch.utils.datarAÚModulerr!r&rMrQrUrbrmrurvr}r“ržr§r­rrrrÚ<module>s&
NT#XW@