[dff9e0]: / __pycache__ / predict_funs.cpython-37.pyc

Download this file

68 lines (65 with data), 7.0 kB

B

Ԙ®eLã@sêddlZej d¡ddlmZmZddlmZddlm	Z	ddl
Zddlm
Z
ddlZddlZddlZddlmZddlmZddlZddlmZddlmZdd	lmZdd
lmZddlmZmZddl m!Z!ddlmZddl"Z"dd
l#m$Z$ddl%mm&Z'ddl%m(Z(ddl)m*Z*ddl+m+Z+ddl,m-Z-ddl.m/Z/ddl0Z0ddl1Z2ddl3Z3ddl4Z4ddl5Z5ddlZddl6Z6ddl7Z7ddl8Te7 9¡Z:ddl;m<Z<d)dd„Z=dd„Z>d*dd„Z?d+dd „Z@d!d"„ZAd#d$„ZBd%d&„ZCd,d'd(„ZDdS)-éNz../)ÚSamPredictorÚsam_model_registry)ÚResizeLongestSide)Úattention_fusion)Úlabel)Únn)Údatasets)Ú
transforms)ÚImage)Ú
DataLoaderÚSubset)ÚVariable)ÚMRI_dataset)Úone_hot)ÚPath)Útqdm)ÚDiceLoss)Ú
dice_coeff)Ú*)ÚVNet皙™™™™é?cCs\t t |¡tjtj¡\}}| ¡}t ||d||¡t t |¡|t |¡d|d¡}|S)zKDraw edges of contour 'c' from segmented image 's' onto 'm' in colour 'RGB'éÿÿÿÿér)	Úcv2ÚfindContoursÚnpÚuint8Ú	RETR_LISTÚCHAIN_APPROX_SIMPLEÚcopyÚdrawContoursÚaddWeighted)ÚmÚsÚRGBÚsizeÚaÚcontoursÚ_Zm_old©r)úI/Users/hanxuegu/Documents/Documents/bone/bone_paper_codes/predict_funs.pyÚdrawContour/s
"r+cCs6t t ||¡¡}t |¡t |¡|d}||S)Ng:Œ0âŽyE>)rÚsumÚbitwise_and)ÚpmÚgtr&Úbr)r)r*ÚIOU>sr1©g
×£p=
ß?gÉv¾Ÿ/Ý?g–C‹lçûÙ?©gZd;ßOÍ?gyé&1¬Ì?gÍÌÌÌÌÌÌ?cCsltj||j|jd}tj||j|jd}|jdkr@| ddd¡}|jdkrX| ddd¡}| |¡ |¡|S)N)ÚdtypeÚdevicerr)ÚtorchÚ	as_tensorr4r5ÚndimÚviewÚmul_Úadd_)ÚtensorÚmeanÚstdr)r)r*Úinverse_normalizeDs

r?écCs^tjdtd}t||ƒ\}}x<td|dƒD]*}t ||k¡}t|dƒ|kr,d||<q,W|S)zÏ
    Removes small objects from a 2D array using only NumPy.

    :param array_2d: Input 2D array.
    :param min_size: Minimum size of objects to keep.
    :return: 2D array with small objects removed.
    )érA)r4rr)rÚonesÚintrÚrangeÚwhereÚlen)Zarray_2dÚmin_sizeÚ	structureÚlabeledÚncomponentsÚiÚ	locationsr)r)r*Úremove_small_objectsPs	rMcCs”|j\}}}}t |||f¡}xpt|ƒD]d}||}xV|D]N}	t|	dƒt|	dƒt|	dƒt|	dƒf\}
}}}
d||||
…|
|…f<q:Wq(W|S)NrrérA)Úshaper6ÚzerosrDrC)ÚboxesÚimgsr0r(ÚwÚhZbox_maskÚkZk_boxÚboxÚx1Úy1Úx2Úy2r)r)r*Úcreate_box_maskds
4r[cCs6dtdt|ƒ| ¡dƒ}| d¡ |¡j ¡S)Nrg{®Gáz„?r)ÚroundÚfloatÚnumelÚreshapeÚkthvalueÚvaluesÚitem)r<Ú
percentilerUr)r)r*Útorch_percentileqs rdcCsGdd„dƒ}ddd„}dd
d„}t |ddƒg¡}|jd
}t d¡}||ƒ}|j}	t |	d¡}	||	ƒ ¡}	t 	d¡||	ƒ}
WdQRXt 
|
¡}
|
 ¡ ¡ 
¡}
t|d|ƒ}t|ddƒ}t|ddƒ}
||t |
dd…dd…dd…dd…||
…f¡ƒƒS)Nc@s eZdZdZdd„Zdd„ZdS)z#pred_attention.<locals>.Normalize3Dz>Normalize a tensor to a specified mean and standard deviation.cSs||_||_dS)N)r=r>)Úselfr=r>r)r)r*Ú__init__xsz,pred_attention.<locals>.Normalize3D.__init__cSs||j|jS)N)r=r>)reÚxr)r)r*Ú__call__|sz,pred_attention.<locals>.Normalize3D.__call__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rfrhr)r)r)r*ÚNormalize3Dvsrm皙™™™™©?皙™™™™é?çü©ñÒMbP?c	Ssl||}d|d|}||k}||k||k@}||k}|||||<|||||||<d||<|S)Nrrr))	ÚprobZx_thresZy_thresÚepsZgrad_1Zgrad_2Úmask_epsÚmask_1Úmask_2r)r)r*Úprob_rescalesz$pred_attention.<locals>.prob_rescalerN皙™™™™¹?cSs0||k}d||<tj||d}|t |¡dS)Nr)Úaxisg:Œ0âŽyE>)rr,Úmax)Úmask_volumerxrrrsÚ	attentionr)r)r*Úview_attention_2d‹sz)pred_attention.<locals>.view_attention_2dgà?rA)é@r}r}rFr}é)rnrorp)rNrw)r	ÚComposerOÚtioÚResizeÚdatar6Ú	unsqueezer]Úset_grad_enabledÚsigmoidÚdetachÚcpuÚnumpyrCryÚminrÚsqueeze)ÚimageÚvnetÚslice_idrmrvr|Znorm_transformZdepth_imageÚresizeÚimage_tensorÚ	pred_maskZslice_id_reshapeÚ	slice_minÚ	slice_maxr)r)r*Úpred_attentionus&	




r“c	Cs|j|j ¡d|_|j}|r>||kr>tj|dd}||ƒ}|jd}|jd}|dk	rh||krpd}n|d}|dd…dd…|f}tj|| ¡| ¡| ¡ddtj	d	}t 
|dd…dd…dfd
d
dg¡}	t |	d¡}
|
 
¡}t d
¡|
ƒ}
t t ¡g¡}||
ƒ}
t|
ƒ}
|
 ¡dkr<tjjdd|
ƒ}
t tjdddgdddgd|
ƒd¡}
t ¡t| |
¡}|jdddd\}}|dk	r | ||¡}|j||j ¡||dd\}}|dd…d
dd…dd…f}WdQRXt|
  ¡dƒ}|||||fS)Ngð?Únearest)Úimage_interpolationrrNrgñh㈵øä>éÿ)r4rrAr$)iigš™™™™™¹?gš™™™™™é?)Úgammag
×£p=
ß?gÉv¾Ÿ/Ý?g–C‹lçûÙ?gZd;ßOÍ?gyé&1¬Ì?gÍÌÌÌÌÌÌ?)r=r>)ÚpointsrQÚmasksT)Úimage_embeddingsÚimage_peÚsparse_prompt_embeddingsÚdense_prompt_embeddingsÚmultimask_output)!r‚ryÚspacingr€ÚResamplerOrÚarrayr‰rÚtiler
Ú	fromarrayrr	rrÚToTensorÚmin_max_normalizer=ÚmonaiÚAdjustContrastr6rƒÚ	NormalizeÚno_gradÚ
image_encoderÚprompt_encoderrÚmask_decoderÚget_dense_per?r‡)Z	image_volÚmodelrÚtarget_spacingÚ	atten_mapZ
voxel_spacingÚresampleÚ	slice_numÚimg_arrÚimg_3cÚimgZPil_imgÚ
transform_imgrRÚimg_embÚ
sparse_embÚ	dense_embÚpredr(Zori_imgr)r)r*Úevaluate_1_volume_withattention¦sL

0$&


&r»)r)r2r3)r@)NNN)EÚsysÚpathÚappendÚ
models.samrrÚmodels.sam.utils.transformsrÚ"models.sam.modeling.prompt_encoderrÚpandasÚpdÚskimage.measurerrˆrÚosr6rÚtorch.optimÚoptimÚtorchvisionrÚmatplotlib.pyplotÚpyplotÚpltr	ÚPILr
Útorch.utils.datarrÚtorch.autogradr
rÚdataset_bonerÚtorch.nn.functionalÚ
functionalÚFrÚpathlibrrÚlossesrÚdscrrÚtorchior€ÚslicerioÚpickleÚnrrdr¦ÚcfgÚfuncsÚ
parse_argsÚargsÚmonai.networks.netsrr+r1r?rMr[rdr“r»r)r)r)r*Ú<module>s\



1