3 Иb;@sddlZddlZddlZddlZddlZddljZddljjZ ddl Z ej e ZejejejejejddlmZejejjrdndZdddZGdd 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.pyrsz.Modified_VGG16Unet.__init__)__name__ __module__ __qualname__r __classcell__r )r)r r Modified_VGG16Unetsr) VGG16Unet)rrr )rr get_modified_vgg16_unetsrcs$eZdZfddZddZZS) DecoderBlockcs<tj||_tjtjddddt||t|||_dS)NZbilinearF)Z scale_factormodeZ align_corners)rrrnn SequentialZUpsampleConvRelublock)r rZmiddle_channelsZ out_channels)r r r rs  zDecoderBlock.__init__cCs |j|S)N)r)r xr r r forward'szDecoderBlock.forward)r rrrrrr r )r r rs rcs$eZdZfddZddZZS)rcs0tjtj||ddd|_tjdd|_dS)Nr)paddingT)inplace)rrrConv2dconvReLU activation)r in_out)r r r r+s zConvRelu.__init__cCs|j|}|j|}|S)N)r!r#)r rr r r r0s  zConvRelu.forward)r rrrrrr r )r r r*s rcs&eZdZdfdd ZddZZS) rr Fcstjt|dj|_tjdd|_tjdd|_ tj |ddddd|jd <tj |jd |j |jd|j |_ tj |jd |j |jd |j |_ tj |jd |j |jd |j |jd|j |_tj |jd|j |jd|j |jd|j |_tj |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) pretrainedrT)r@rr) kernel_sizestriderr i)r))rrrfeaturesencoderrZ MaxPool2dpoolr"relur rconv1conv2conv3conv4conv5rcenterdec5dec4dec3dec2rdec1final)r r num_filtersr')r r r r6s>    zVGG16Unet.__init__cCs|j|}|j|j|}|j|j|}|j|j|}|j|j|}|j|j|}|jtj ||gd}|j tj ||gd} |j tj | |gd} |j tj | |gd} |j tj | |gd} |j| } | S)Nr)r>r?r<r@rArBrCrDtorchcatrErFrGrHrI)r rr>r?r@rArBrCrDrErFrGrHZx_outr r r r^s  zVGG16Unet.forward)rr&F)r rrrrrr r )r r r5s(rc CsRtdd}ttjj|dd}|jtj|ddWdQRX|jt j |S)Nr8)rz model.pthrbr)Z map_location) ropenospathjoinZload_state_dictrKloadtodeviceeval) model_dirmodelfr r r model_fnos  rYcCs0|dks ttj|d}tj|tjtd}|S)Nzapplication/jsoninputs)dtyperT)AssertionErrorjsonloadsrKtensorfloat32rT) request_bodyZrequest_content_typedatar r r input_fnxs rcc Cstj|jWdQRXg}d}xntd|jd|D]X}|||jdkrh|||||df}n|||ddf}|j|jjjq8Wt j |dd}|S)Nrr.)axis) rKZno_gradrUrangeshapeappendrrbnumpynp concatenate)rbrWZsubarr_preds_listZ batch_sizeZbatch_iZ subarr_pred subarr_predsr r r predict_fns rlcCs|dks ttj|S)Nzapplication/json)r\r]dumps)rk content_typer r r output_fns ro)r)"r]loggingsysrOrKZtorch.nnrZtorch.nn.functionalZ functionalFrhri getLoggerr loggersetLevelDEBUG addHandler StreamHandlerstdoutZtorchvision.modelsrrTrZ is_availablerModulerrrrYrcrlror r r r s(        :