I have those two layers wrapped up to create a drop-in replacement for nn.Conv2d, and they’re used in CIFAR-10 and ImageNet scale networks. The particular network that I profiled looks like this:
Input: 256x3x32x32

Conv2d(  3, 128, kernel_size=3, padding=1)

Conv2d(128, 128, kernel_size=3, padding=1, groups=128)
Conv2d(128, 128, kernel_size=1, padding=0)

Conv2d(128, 128, kernel_size=3, padding=1, groups=128)
Conv2d(128, 128, kernel_size=1, padding=0)
        
MaxPool2d(kernel_size=3, stride=2)
# Channels now sized 15x15
        
Conv2d(128, 128, kernel_size=3, padding=1, groups=128)
Conv2d(128, 128, kernel_size=1, padding=0)

Conv2d(128, 128, kernel_size=3, padding=1, groups=128)
Conv2d(128, 128, kernel_size=1, padding=0)
        
MaxPool2d(kernel_size=3, stride=2)
# Channels now sized 7x7
        
Conv2d(128, 128, kernel_size=3, padding=1, groups=128)
Conv2d(128, 128, kernel_size=1, padding=0)

Conv2d(128, 128, kernel_size=3, padding=1, groups=128)
Conv2d(128, 128, kernel_size=1, padding=0)
        
AvgPool2d(kernel_size=7)
# Channels now sized 1x1
        
Conv2d(128,  10, kernel_size=1, padding=0)

I’ve also tried the wrapped layers in copies of AlexNet, SqueezeNet and ResNet from the torchvision module. I haven’t profiled those. All trained to a reasonable accuracy, but each iteration was slower than their default counterparts.