UniPose
UniPose copied to clipboard
MPII weight is not compatible
Thanks for your work Btw I tried to used pretrained weight file (MPII version) and it failed. It seems for me that the reason is : weight file has 16 chanel output as final result of decoder.last_conv(), but actual model structrue has 17 channel output, as denoted as num_classes + 1
class Decoder(nn.Module):
def __init__(self, dataset, num_classes, backbone, BatchNorm):
super(Declass Decoder(nn.Module):
def __init__(self, dataset, num_classes, backbone, BatchNorm):
super(Decoder, self).__init__()
if backbone == 'resnet':
low_level_inplanes = 256
if dataset == "NTID":
limbsNum = 18
else:
limbsNum = 13
self.conv1 = nn.Conv2d(low_level_inplanes, 48, 1, bias=False)
self.bn1 = BatchNorm(48)
self.relu = nn.ReLU()
self.conv2 = nn.Conv2d(2048, 256, 1, bias=False)
self.bn2 = BatchNorm(256)
self.last_conv = nn.Sequential(nn.Conv2d(304, 256, kernel_size=3, stride=1, padding=1, bias=False),
BatchNorm(256),
nn.ReLU(),
nn.Dropout(0.5),
nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1, bias=False),
BatchNorm(256),
nn.ReLU(),
nn.Dropout(0.1),
nn.Conv2d(256, num_classes + 1, kernel_size=1, stride=1))
# nn.Conv2d(256, num_classes+5+1, kernel_size=1, stride=1)) # Use in case of extacting the bounding box
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
self._init_weight()coder, self).__init__()
if backbone == 'resnet':
low_level_inplanes = 256
if dataset == "NTID":
limbsNum = 18
else:
limbsNum = 13
self.conv1 = nn.Conv2d(low_level_inplanes, 48, 1, bias=False)
self.bn1 = BatchNorm(48)
self.relu = nn.ReLU()
self.conv2 = nn.Conv2d(2048, 256, 1, bias=False)
self.bn2 = BatchNorm(256)
self.last_conv = nn.Sequential(nn.Conv2d(304, 256, kernel_size=3, stride=1, padding=1, bias=False),
BatchNorm(256),
nn.ReLU(),
nn.Dropout(0.5),
nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1, bias=False),
BatchNorm(256),
nn.ReLU(),
nn.Dropout(0.1),
nn.Conv2d(256, num_classes + 1, kernel_size=1, stride=1)) #HERE!
# nn.Conv2d(256, num_classes+5+1, kernel_size=1, stride=1)) # Use in case of extacting the bounding box
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)
self._init_weight()
As I think, final output should have 16 channel, one for each joint. I would appreciate if you can help me to go throught this problem. Thx in advance!
- some may say I can simply just replace num_classes + 1 to num_classes, but it causes error in get_kpts I'm quite not sure why for loop in get_kpts() starts with index 1, not 0..,