U Иb;@sddlZddlZddlZddlZddlZddlmZddlmmZ ddl Z e e ZeejeeejddlmZeejrdndZdddZGdd d ejZGd d d ejZGd d d ejZddZddZddZ ddZ!dS)N)vgg16cudacpucsGfdddt}|S)zL Get a modified VGG16-Unet model with customized input channel numbers. cseZdZfddZZS)z3get_modified_vgg16_unet..Modified_VGG16UnetcstjddS)N in_channels)super__init__)self) __class__r_/home/ec2-user/SageMaker/vegetation-management-remars2022/remars2022-workshop/code/inference.pyr sz.Modified_VGG16Unet.__init__)__name__ __module__ __qualname__r __classcell__r rr r Modified_VGG16Unetsr) VGG16Unet)rrr rr get_modified_vgg16_unetsrcs$eZdZfddZddZZS) DecoderBlockcs<t||_ttjddddt||t|||_dS)NZbilinearF)Z scale_factormodeZ align_corners)rr rnn SequentialZUpsampleConvRelublock)r rZmiddle_channelsZ out_channelsrr r r s zDecoderBlock.__init__cCs ||SN)rr xr r r forward'szDecoderBlock.forwardrrrr r rr r rr rs rcs$eZdZfddZddZZS)rcs0ttj||ddd|_tjdd|_dS)Nr)paddingTinplace)rr rConv2dconvReLU activation)r in_outrr r r +s zConvRelu.__init__cCs||}||}|Sr)r'r)rr r r r 0s  zConvRelu.forwardr!r r rr r*s rcs&eZdZdfdd ZddZZS) rr Fcstt|dj|_tdd|_tjdd|_ tj |ddddd|jd <t |jd |j |jd|j |_ t |jd |j |jd |j |_ t |jd |j |jd |j |jd|j |_t |jd|j |jd|j |jd|j |_t |jd|j |jd|j |jd|j |_td|dd|d|_td|d|dd|d|_td|d|dd|d|_td|d|dd|d|_td|d|dd||_td|||_tj |ddd|_dS)N) pretrainedrTr$@rr") kernel_sizestrider#r i)r/)rr rfeaturesencoderrZ MaxPool2dpoolr(relur&rconv1conv2conv3conv4conv5rcenterdec5dec4dec3dec2rdec1final)r r num_filtersr-rr r r 6s       zVGG16Unet.__init__cCs||}|||}|||}|||}|||}|||}|t ||gd}| t ||gd} | t | |gd} | t | |gd} | t | |gd} || } | S)Nr")rDrErBrFrGrHrIrJtorchcatrKrLrMrNrO)r rrDrErFrGrHrIrJrKrLrMrNZx_outr r r r ^s  zVGG16Unet.forward)rr,Fr!r r rr r5s(rc CsRtdd}ttj|dd}|tj|ddW5QRX|t  |S)Nr>rz model.pthrbr)Z map_location) ropenospathjoinZload_state_dictrQloadtodeviceeval) model_dirmodelfr r r model_fnos  r_cCs0|dks tt|d}tj|tjtd}|S)Napplication/jsoninputs)dtyperZ)AssertionErrorjsonloadsrQtensorfloat32rZ) request_bodyZrequest_content_typedatar r r input_fnxs rjc Cst|W5QRXg}d}td|jd|D]X}|||jdkrf|||||df}n|||ddf}||jq6t j |dd}|S)Nr"r.)axis) rQZno_gradr[rangeshapeappendrrinumpynp concatenate)rir]Zsubarr_preds_listZ batch_sizeZbatch_iZ subarr_pred subarr_predsr r r predict_fns(  rscCs|dks tt|S)Nr`)rcrddumps)rr content_typer r r output_fns rv)r)"rdloggingsysrUrQZtorch.nnrZtorch.nn.functionalZ functionalFrorp getLoggerrloggersetLevelDEBUG addHandler StreamHandlerstdoutZtorchvision.modelsrrZrZ is_availablerModulerrrr_rjrsrvr r r r s(       :