3 '^b@sddlmZmZmZmZmZmZmZmZm Z m Z m Z m Z m Z ddlmZddlmZddlmZddlmZddlmZddlmZddlmZmZmZmZdd lm Z dd l!m"Z"dd l#Z#dd l$j%Z&dd l'Z'dd l(Z(dd l)Z)dd l*Z*dd l+Z+dd l,Z,dd l-Z-dd l.Z.dd l/Z/dd l0m1Z1dd l2Z2e/j3e4Z5e5j6e/j7e5j8e/j9e*j:d dZ;ddZe2j?dZ@e2jAdZBdddZCddZDddZEe>fddZFd S)) AsDiscrete AsDiscretedEnsureChannelFirstdComposeCropForegroundd LoadImaged OrientationdRandCropByPosNegLabeldScaleIntensityRangedSpacingd EnsureTyped EnsureTypeInvertd) from_engine)UNet)Norm) DiceMetric)DiceLoss)sliding_window_inference) CacheDataset DataLoaderDatasetdecollate_batch) print_config)download_and_extractN)Pathc Cstjtjjrdnd}tddddddtjd }td |td tj |t tj j |dd}|j tj|WdQRX|j|S)Ncudacpu @) spatial_dims in_channels out_channelschannelsstrides num_res_unitsnormz model_dir iszinside model_dir isz model.pthrb)r!r"r#r$r%)r r r r )torchdevicer is_availablerrBATCHprintoslistdiropenpathjoinload_state_dictloadto) model_dirr/modelfr>V/home/ec2-user/SageMaker/MONAI-MedicalImage-SageMaker/Segmentation/source/inference.pymodel_fn-s  r@c Csttddgdtddgdtddgdddtddgd d tdgdd d dddtddgddtddgdg}t||dd}t |dd}|S)Nimagelabel)keys?@bilinearnearest)rCpixdimmodeRAS)rCaxcodes9gg?T)rCa_mina_maxb_minb_maxclip)rC source_key)data transform cache_rater) batch_size)rDrDrE)rFrGi) rrrr rr rr rr) val_filesval_transformsval_ds val_loaderr>r>r?get_val_data_loaderCs    r\zapplication/jsonzapplication/x-npys3cCstj|}x|jj|dD]p}|dkr,|jntjj|tjj|j|}tjj tjj |sltj tjj ||jddkr|q|j |j|qWdS)z Download the contents of a folder directory Args: bucket_name: the name of the s3 bucket s3_folder: the folder path in the s3 bucket local_dir: a relative or absolute directory path in the local file system )PrefixNr/) r]Bucketobjectsfilterkeyr3r6r7relpathexistsdirnamemakedirs download_file) bucket_name s3_folder local_dirbucketobjtargetr>r>r?download_s3_folderes rpcCsttjtjjrdnd}tjd|td||dkr`tj|}|d}|d}tdt td |d |d }t |||d t t j t jj|d d}t t j t jj|dd}t|t|krHddt||D} tdtd| t| } tdx4t| D](\} } | dj|| dj|} }qWtj|td| Stdt|dt|ntd|dSdS)NrrzReceived request of type:zserialized_input_data is---zapplication/jsonrmrdzloaded label is:zbucket:z key is: z test/dataset)rlimagesTrz*.nii.gzlabelsTrcSsg|]\}}||dqS))rArBr>).0 image_name label_namer>r>r? szinput_fn..zDownload finished!z0Start to inference for the files and labels >>> zget_val_data_loader finished!rArBz0removed the downloaded files after loading them!z/Inputs for Labels and Images are not matched: z!= z-Requested unsupported ContentType in Accept: )r.r/rr0loggerinfor2jsonloadsrBrpsortedglobr3r6r7lenzipr\ enumerater:shutilrmtree Exception)Zserialized_input_data content_typer/rTrmrkrlimageslabels data_dictsr[ival_data val_inputs val_labelsr>r>r?input_fnys8        rcCsFtdj|td||jd}d}tt|||}td|j|S)NzGot input Data: {}zinput_fn in predict:z$response from modeling prediction is)rrr)r2formatevalrrshape) input_datar<roi_size sw_batch_size val_outputsr>r>r? predict_fns  rcCsX|tkrHtd|tj|ddjjdddddddfj}|Std|dS)Nzresponse in output_fn isr)dimrz-Requested unsupported ContentType in Accept: )NUMPY_CONTENT_TYPEr2r.argmaxdetachrnumpyr)Zprediction_outputacceptpredr>r>r? output_fns  2r)N)Gmonai.transformsrrrrrrrr r r r r rmonai.handlers.utilsrmonai.networks.netsrmonai.networks.layersr monai.metricsr monai.lossesrmonai.inferersr monai.datarrrr monai.configr monai.appsrr.matplotlib.pyplotpyplotplttempfilerr3sysr|argparsery subprocessloggingpathlibrboto3 getLogger__name__rwsetLevelDEBUG addHandler StreamHandlerstdoutr@r\ZJSON_CONTENT_TYPErclient s3_clientresourcer]rprrrr>r>r>r?s<<         0      ;