Thanks a lot ptrblck! The way to implement the first part of your answer is something like -
    model = models.vgg16(pretrained=True)
    first_conv_layer = list(nn.Conv2d(1, 3, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True))
    first_conv_layer .extend(list(model.features))  
    model.features= nn.Sequential(*first_conv_layer )  


?