[7e66db]: / __pycache__ / utils.cpython-36.pyc

Download this file

132 lines (128 with data), 15.3 kB

3

ÔŌēYū<„
@sHddlZddlTddlTddlTddlTddlTddlTddlm	Z	ddl
m
Z
ddlZddlmZddl
jZddljZddljZddlZddlmZddljZddĄZd	d
ĄZdvd
dĄZddĄZddĄZ gddddfddĄZ!ddĄZ"ddĄZ#ddĄZ$dwddĄZ%dd ĄZ&d!d"ĄZ'dxd$d%ĄZ(dyd&d'ĄZ)dzd)d*ĄZ*d{d,d-ĄZ+d.d/ĄZ,d0d1ĄZ-d2d3ĄZ.d4d5ĄZ/d|d6d7ĄZ0d~d:d;ĄZ1dd<d=ĄZ2d>d?ĄZ3dÄd@dAĄZ4dBdCĄZ5dĀdIdJĄZ6dKdLĄZ7dādOdPĄZ8dQdRĄZ9dSdTĄZ:dUdVĄZ;dWdXĄZ<dYdZĄZ=e9Z>e;Z?d[d\ĄZ@d]d^ĄZAd_d`ĄZBdadbĄZCdcddĄZDdedfĄZEdgdhĄZFdidjĄZGdkdlĄZHdmdnĄZIdodpĄZJdqdrĄZKdsdtĄZdS)ÉťN)ŕ*)ŕisfile)ŕtqdm)ŕglob)ŕClientcCsBtt|jÉdt|jÉÉdt|jÉÉdt|jÉÉÉdS)Nz - Min: z	 - Mean: z - Max: )ŕprintŕstrŕshapeŕminŕmeanŕmax)ŕx©rķ6/Users/pietz/Dev/Python/knee-mri-segmentation/utils.pyŕ
print_infosrcCsĄt|jÉdkrdnd}tjjt|ÉÉ}źxVtd|dÉDź]D}tjddćźx(tdÉDź]}tjd	dd	|dÉ|rä||||d
dfn|||dd|d
df}tj	dÉtj
|jd
ÉÉtjd	dd|dÉ|||jdd	kźr(|źr
||||d
dfn|||dd|d
df}n.|źr>||||n|||dd|f}tj	dÉtj
|jd
ÉÉqTWtjÉq6WdS)NťTFrťťť)ŕfigsizeť.ťŕoffŕfloat32)rrťˇˇˇˇ)
ŕlenr	ŕnpŕrandomŕpermutationŕrangeŕpltŕfigureŕsubplotŕaxisŕimshowŕastypeŕshow)r
ŕyŕnumZtwo_dŕrndŕiŕjŕimgrrrŕshow_sampless 6
:.
r-Tťc	Cst|Édkstā|r(t|Ét|Éks(tātjjt|dÉÉ}xńt|ÉD]ł}tj|dćxětt|ÉÉD]é}tjdt|É|dÉ||||j	d	dkrģ||||ddfn||||}|rŐtj
dÉ|rřtj||Étj|j
dÉddćqdWtjÉqFWdS)
Nrr)r.rrŕgray)Zcmapr)rŕAssertionErrorrrrrr r!r"r	r#ŕtitler$r%r&)	r
r(ZtitlesZaxis_offŕsizer)ŕrowŕcolr,rrrŕshow_samples_2d,s@
r5cCs(tjjt|ÉÉ}||}||}||fS)N)rrrr)r
r'Zpermrrrŕshuffle=sr6cCsLtt|É|É}|d|Ö}|d|Ö}||dÖ}||dÖ}||||fS)N)ŕintr)r
r'Ztr_sizeZx_trZy_trZx_teZy_terrrŕsplitCsr8FŕminimumcCs®t|jÉdkstāt|jÉdkr$dnd}|o>|dko>t|Édkźr§gg}}	źx,|Dź]"}
|
dkźržtjj|ddÖddÖd|
Öfd	d
|
dfdf|É}|j|É|r‹tjj|ddÖddÖd|
Öfdd
|
dfdf|É}n|}|	j|ÉqTtjj|ddÖddÖ|
dÖfddd|
fdf|É}|j|É|źrjtjj|ddÖddÖ|
dÖfddd|
fdf|É}n|}|	j|ÉqTWtj|tj|ÉfÉ}tj|tj|	ÉfÉ}|źrÝtj|ddć}tj||fÉ}|źrÍtj|ddć}tj||fÉ}ntj||fÉ}|źrLtj|ddć}tj||fÉ}|źr>tj|ddć}tj||fÉ}ntj||fÉ}|źr†tj	|ddć}tj||fÉ}|źrítj	|ddć}tj||fÉ}ntj||fÉ}||fS)NrrFTrr)r#)ŕaxes)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)
rr	r0rŕlibŕpadŕappendŕconcatenateŕflipŕrot90)r
r'Zh_shiftZv_flipZh_flipr@Z	edge_modeŕsegZtmp_xZtmp_yZshftŕtmprrrŕaugmentKsT

4
66
8rCcCshtj|jd|d|d|jdfÉ}x<t|jdÉD]*}tj|||d|dfdddć||<q6W|S)NrrZconstantT)ŕmodeZpreserve_ranger)rŕzerosr	rŕtrŕresize)r,r2ŕimg2r*rrrŕ	resize_3d}s&*rIcCsHt|jÉdkstātj||jd|jd|jd|jd|jdfÉS)Nrrrrťr)rr	r0rŕreshape)r
rrrŕto_2dÉsrLcCsDt|jÉdkstātj||jd|||jd|jd|jdfÉS)NrrrrrJ)rr	r0rrK)ŕimgsŕzrrrŕto_3dásrOcCs~tj|jddć|kÉd}|d|dd}|d}tj|jddćjddć|kÉd}|d|dd|d}|||fS)Nr)r#rrrr)rŕwhereŕsum)r,ŕ	thresholdZy_arrr2r'Zx_arrr
rrrŕ
get_crop_areačs"rScCsDtj|djdÉÉ}tj|dddÉ}tj||É}tj|ÉdtjfS)N.rrrť»).r)ŕsitkZGetImageFromArrayr%Z
OtsuThresholdZN4BiasFieldCorrectionZGetArrayFromImagerŕnewaxis)r,ŕmaskrrrŕn4_bias_correctionďsrXcCs>|jddkr|ddÖ}n|jddkr:tjj|ddÉ}|S)
Nrťrr.rr9r©rr©rr©rr©rr)rZr[r\r])r	rr;r<)r,rrrŕhandle_specialsôs
r^rJcCsJ|jddć}x.tt|ÉÉD]}tj||tj|ÉÉ||<qW|dtjfS)Nr)r#.r)rQrrŕmoŕerosionŕsquarerrV)rMŕamountr*rrrŕerode†srccCsr|jddć}xVtt|ÉÉD]F}|ddkrFtj||tj|ÉÉ||<qtj||tj|ÉÉ||<qW|dtjfS)Nr)r#rr.r)	rQrrr_Zdilationrar`rrV)rMrbr*rrrŕ	add_noise¶srdrc	Csd||}tt||ÉÉ}tjt|É|fÉ}|||}x(tt|ÉÉD]}d||t||Éf<qDW|S)Nr)r7ŕroundrrErr)	r'ŕstartŕendŕstepZ	age_rangeZnum_classesŕlabelsŕidxr*rrrŕ
to_classes≤srkťdcCsX|jddćjddćjddć}tj|tj|É|ddć||Ö}tjtj|ÉÉjÉ|S)Nr)r#rŕsame)rDrr)rQrŕconvolveŕonesŕgradientŕargmax)r,Zsmoothŕcropr'Zy_vecrrrŕy_centerĽs$rscCs8g}x(|D] }xt|ÉD]}|j|ÉqWq
Wtj|ÉS)N)rr=rŕarray)r'ŕfactorŕarrŕelr*rrrŕlengthen√s

rxcCs6g}x&tdt|É|ÉD]}|j||ÉqWtj|ÉS)Nr)rrr=rrt)r'rurvr*rrrŕshorten srycCs||jÉ|jÉS)N)rŕstd)r
rrzrrrŕ	normalize–sr{cCs™|dkr$d||dk<d||dk<|S|jÉ|}|jÉd}tj|jd|jd|jd|fÉ}x@t|ÉD]4}d||d|k|f<d||d|kdf<||8}qjW|SdS)	Nrg{ģGŠzĄ?rgģGŠzģÔ?r.).r).r)rrrEr	r)r,ŕchannelrhZdividerrHŕcrrrŕ
multilabel”s$r~cCs∆tj|ddćdtjfjdÉ}t|É}|dkr8t||Én|}|rz|ddÖ|d|d|dÖ|d|d|dÖfn|}|rĆt||Én|}|rút|Én|}|rł||j	É|j
Én|}|jdÉS)	NZ	simpleitk)ŕplugin.Zfloat64rrrr)ŕioZimreadrrVr%r^r~rIrXrrz)ŕpathŕlabelrrr2ŕbiasŕnormr,rrrŕread_mhd‚sBrÖťťŗcCst|É}gg}}xšttt|ÉÉÉD]–}	t||	É}
t|
É\}}}
t||	||||
f|dć}
|rzx"|
D]}|j|ÉqfWn
|j|
É||	jdddÉ||	<||	jdddÉ||	<t||	|||
f|||dć}
|rÍx"|
D]}|j|Éq÷Wq$|j|
Éq$Wtj	|É}tj	|É}||fS)N)rārrr2z/VOI_LABEL/z/MHD/rz_LABEL.z_ORIG.)rrr2rÉrĄ)
rrrrrÖrSr=ŕreplacerrt)rĀrār2rÉrĄŕto2dŕfilesr
r'r*r,ŕtopŕleftŕdimŕlayerrrrŕ	load_dataŪs(





rŹcCsŰt|É}gg}}xńttt|ÉÉÉD]į}	|rX|rXt||	É}
t|
É}||dd|d<t||	||||dć}
||	jdÉ}t|dÉt|dÉd}
|rņx6|
D]}|j|É|j|
ÉqĘWq$|j|
É|j|
Éq$Wt	j
|É}t	j
|É}||fS)Nrr)rrr2rÉrĄŕ_rJrg(@)rrrrrÖrsr8r7r=rrt)rär2rrrÉrĄrČZ
smart_cropr
r'r*r,r}ŕfZagerérrrŕ
load_data_ages(





rícCstj|É}zžt|jjÉÉr0tdj|ÉÉtdÉx&|jjÉD]\}}tdj||ÉÉq<Wt|jÉÉdkrldSxÜ|jÉD]z\}}tdj|ÉÉtdÉx&|jjÉD]\}}tdj||ÉÉq†Wtd	Éx*|jÉD]}||}tdj||jÉÉqőWqvWWd|j	ÉXdS)
zv
    Prints out the structure of HDF5 file.

    Args:
      weight_file_path (str) : Path to the file to analyze
    z
{} contains: zRoot attributes:z  {}: {}rNz  {}z    Attributes:z      {}: {}z    Dataset:)
Zh5pyŕFilerŕattrsŕitemsrŕformatŕkeysr	ŕclose)Zweight_file_pathrĎŕkeyŕvalueréŕgZp_nameŕparamrrrŕ
print_weightss&
rĚcCsvt|d|ddć|É}|r"tÉ|Én|}|r6t|É|Én|}t|d|ddć|É}|r\tÉ|Én|}|rrtÉ||gÉS|S)NrJrm)ŕ
activationŕpadding)ŕConv2DZBatchNormalizationŕDropoutŕAdd)ŕmrćŕactiŕbnŕresŕdoŕnrrrŕ
conv_block>sr©c
Cs–|dkrļt|||||	É}
|r&tÉ|
Ént|ddddć|
É}t|t||É|d|||||||	É
}|rĄtÉ|É}t|d|ddć|É}nt|dd|ddć|É}tÉ|
|gÉ}
t|
||||	É}nt|||||	|É}|S)	NrrJrrm)ŕstridesrür)rěrü)r™rěrü)r©ZMaxPooling2Dr†ŕlevel_blockr7ZUpSampling2DZConv2DTransposerĘ)r£rćŕdepthŕincr§rßr•ŕmpZupr¶r®rrrręFs"&
ręť rÁū?ŕeluÁŗ?c
CsBt|dć}t|||||||||	|
É
}t|dddć|É}t||dćS)N)r	rŕsigmoid)rě)ŕinputsŕoutputs)ŕInputręr†ŕModel)
ŕ	img_shapeZout_chZstart_chr¨Zinc_raterěŕdropoutZ	batchnormZmaxpoolZupconvZresidualr*ŕorrrŕUNetVs
rĽcCs»|dkr†t|d|ddć|É}|r,t|É|Én|}t|d|ddć|É}td	É|É}t|t||É|d|||É}td
É|É}t|d|ddć|É}tddć||gÉ}t|d|ddć|É}t|d|ddć|ÉS)NrrJrm)rěrürrr)r#)rrr)rrr)ŕConv3Dr°ZMaxPooling3Dŕlevel_block_3dr7ZUpSampling3DZConcatenate)r£rćr¨rur§rĻr®rrrrĹ]srĹrÁÝ?c	Cs:t|dć}t||||||É}t|dddć|É}t||dćS)N)r	rr≥)rě)rīrĶ)r∂rĹrľr∑)	rłZn_outrćr¨rur§rĻr*rļrrrŕUNet_3Djs
rŅcCsFtj|É}tj|É}tj||É}d|dtj|Étj|ÉdS)Ng@gū?)ŕKŕflattenrQ)ŕy_trueŕy_predŕy_true_fŕy_pred_fŕintersectionrrrŕf1ss

r«cCs(d||jÉd|jÉ|jÉdS)Ng@gū?)rQ)r¬r√rrrŕf1_npysr»cCsdt||ÉS)Nr)r«)r¬r√rrrŕf1_loss|sr…cCsJtj|É}tj|É}tj||É}d|ddtj|Étj|ÉdS)Ng@gū?g@)rņrŃrQ)r¬r√rńrŇr∆rrrŕf2s

r cCsdt||ÉS)Nr)r )r¬r√rrrŕf2_lossÖsrňcCsFtj|É}tj|É}tj||É}|dtj|Étj|Éd|S)Ngū?)rņrŃrQ)r¬r√rńrŇr∆rrrŕioučs

rŐcCs,||jÉ}|d|jÉ|jÉd|S)Ngū?)rQ)r¬r√r∆rrrŕiou_npĎsrÕcCst||ÉS)N)rŐ)r¬r√rrrŕiou_lossēsrőcCs8tj|É}tj|É}tj||É}|dtj|ÉdS)Ngū?)rņrŃrQ)r¬r√rńrŇr∆rrrŕ	precisionės

rŌcCs||jÉd|jÉdS)Ngū?)rQ)r¬r√rrrŕprecision_npěsr–cCs8tj|É}tj|É}tj||É}|dtj|ÉdS)Ngū?)rņrŃrQ)r¬r√rńrŇr∆rrrŕrecall°s

r—cCs||jÉd|jÉdS)Ngū?)rQ)r¬r√rrrŕ	recall_npßsr“cCstj|É}tj|É}t||ÉS)N)rņrŃZmae)r¬r√rńrŇrrrŕmae_img™s

r”cCstj|É}tj|É}t||ÉS)N)rņrŃZbinary_crossentropy)r¬r√rńrŇrrrŕbce_imgĮs

r‘cCst||Ét||ÉS)N)r…r‘)r¬r√rrrŕf1_bceīsr’cCs0tj|É}tj|É}tjtj||ÉÉtdÉS)Nráiń)rņrŃrQŕabsŕfloat)r¬r√rńrŇrrrŕerrorłs

rōcCs t||ÉjÉtt|jÉÉÉS)N)r÷rQr◊rrŃ)r¬r√rrrŕerror_npĹsrŔcCs&d}d}t||dć}|j||dćdS)NZu96ub3t5wu1nexmgi22xjs31jeb8y6Zavfytsyktracxood45myebobtry6yd)Z	api_token)r1)rŕsend_message)r1ŕmessageŕuserŕapiŕclientrrrŕpushover¬srŖ©r.r.)NTrŗ)r)rJ)rJ)r)r.rl)rNNFF©rÜrárá)rrŠFFF)NNFFFF)r)
rrĮrrįrĪr≤FTTF)rrrJrĺrĪN)LŕnumpyrZkeras.modelsZkeras.layersZkeras.optimizersZkeras.callbacksZkeras.lossesZkeras.preprocessing.imageŕos.pathrrrrZ
skimage.iorÄZskimage.transformŕ	transformrFZskimage.morphologyZ
morphologyr_Z	SimpleITKrUrŖrŕmatplotlib.pyplotŕpyplotr rr-r5r6r8rCrIrLrOrSrXr^rcrdrkrsrxryr{r~rÖrŹrírĚr©ręrĽrĹrŅr«r»r…r rňZdiceZ	dice_lossrŐrÕrőrŌr–r—r“r”r‘r’rōrŔrrrrŕ<module>sÜ




2



	



!