CMU-Perceptual-Computing-Lab / openpose_train

Training repository for OpenPose
https://github.com/CMU-Perceptual-Computing-Lab/openpose
Other
576 stars 184 forks source link

BODY_135 keypoint indices #20

Closed m-decoster closed 4 years ago

m-decoster commented 4 years ago

I would like to use the new model since it looks like it performs better on a dataset I am using.

I was wondering if there is information available about the keypoint ordering and indices, like there is on the original OpenPose repository, on this page, preferably without having to compile OpenPose.

Specifically, is it just 2 keypoints that are deleted, or are there any that are changed? If so, which?

gineshidalgo99 commented 4 years ago

You can look in the source code of OpenPose, and you will find POSE_BODY_25_BODY_PARTS (as the page you link shows), as well as POSE_BODY_135_BODY_PARTS. Anything that applies in that page can be found in the source code, and close to the 25 version, you can find its 135 analog. (Feel free to ask again if something is not clear)

Aigul95 commented 4 years ago

I would like to use the new model since it looks like it performs better on a dataset I am using.

I was wondering if there is information available about the keypoint ordering and indices, like there is on the original OpenPose repository, on this page, preferably without having to compile OpenPose.

Specifically, is it just 2 keypoints that are deleted, or are there any that are changed? If so, which?

Hey! Did you find POSE_BODY_135_BODY_PARTS?

m-decoster commented 3 years ago

@Aigul95 Sorry for the late reply, the keypoints are available here: https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/41d8c087459fae844e477dda50a6f732e70f2cb8/src/openpose/pose/poseParameters.cpp#L149

For future reference:

        {0,  "Nose"},
        {1,  "LEye"},
        {2,  "REye"},
        {3,  "LEar"},
        {4,  "REar"},
        {5,  "LShoulder"},
        {6,  "RShoulder"},
        {7,  "LElbow"},
        {8,  "RElbow"},
        {9,  "LWrist"},
        {10, "RWrist"},
        {11, "LHip"},
        {12, "RHip"},
        {13, "LKnee"},
        {14, "RKnee"},
        {15, "LAnkle"},
        {16, "RAnkle"},
        {17, "UpperNeck"},
        {18, "HeadTop"},
        {19, "LBigToe"},
        {20, "LSmallToe"},
        {21, "LHeel"},
        {22, "RBigToe"},
        {23, "RSmallToe"},
        {24, "RHeel"},
        // Left hand
        {H135+0, "LThumb1CMC"},       {H135+1, "LThumb2Knuckles"}, {H135+2, "LThumb3IP"},   {H135+3, "LThumb4FingerTip"},
        {H135+4, "LIndex1Knuckles"},  {H135+5, "LIndex2PIP"},      {H135+6, "LIndex3DIP"},  {H135+7, "LIndex4FingerTip"},
        {H135+8, "LMiddle1Knuckles"}, {H135+9, "LMiddle2PIP"},     {H135+10, "LMiddle3DIP"},{H135+11, "LMiddle4FingerTip"},
        {H135+12, "LRing1Knuckles"},  {H135+13, "LRing2PIP"},      {H135+14, "LRing3DIP"},  {H135+15, "LRing4FingerTip"},
        {H135+16, "LPinky1Knuckles"}, {H135+17, "LPinky2PIP"},     {H135+18, "LPinky3DIP"}, {H135+19, "LPinky4FingerTip"},
        // Right hand
        {H135+20, "RThumb1CMC"},      {H135+21, "RThumb2Knuckles"},{H135+22, "RThumb3IP"},  {H135+23, "RThumb4FingerTip"},
        {H135+24, "RIndex1Knuckles"}, {H135+25, "RIndex2PIP"},     {H135+26, "RIndex3DIP"}, {H135+27, "RIndex4FingerTip"},
        {H135+28, "RMiddle1Knuckles"},{H135+29, "RMiddle2PIP"},    {H135+30, "RMiddle3DIP"},{H135+31, "RMiddle4FingerTip"},
        {H135+32, "RRing1Knuckles"},  {H135+33, "RRing2PIP"},      {H135+34, "RRing3DIP"},  {H135+35, "RRing4FingerTip"},
        {H135+36, "RPinky1Knuckles"}, {H135+37, "RPinky2PIP"},     {H135+38, "RPinky3DIP"}, {H135+39, "RPinky4FingerTip"},
        // Face
        {F135+0, "FaceContour0"},   {F135+1, "FaceContour1"},   {F135+2, "FaceContour2"},   {F135+3, "FaceContour3"},   {F135+4, "FaceContour4"},   {F135+5, "FaceContour5"},   // Contour 1/3
        {F135+6, "FaceContour6"},   {F135+7, "FaceContour7"},   {F135+8, "FaceContour8"},   {F135+9, "FaceContour9"},   {F135+10, "FaceContour10"}, {F135+11, "FaceContour11"}, // Contour 2/3
        {F135+12, "FaceContour12"}, {F135+13, "FaceContour13"}, {F135+14, "FaceContour14"}, {F135+15, "FaceContour15"}, {F135+16, "FaceContour16"},                             // Contour 3/3
        {F135+17, "REyeBrow0"},  {F135+18, "REyeBrow1"},  {F135+19, "REyeBrow2"},  {F135+20, "REyeBrow3"},  {F135+21, "REyeBrow4"}, // Right eyebrow
        {F135+22, "LEyeBrow4"},  {F135+23, "LEyeBrow3"},  {F135+24, "LEyeBrow2"},  {F135+25, "LEyeBrow1"},  {F135+26, "LEyeBrow0"}, // Left eyebrow
        {F135+27, "NoseUpper0"}, {F135+28, "NoseUpper1"}, {F135+29, "NoseUpper2"}, {F135+30, "NoseUpper3"}, // Upper nose
        {F135+31, "NoseLower0"}, {F135+32, "NoseLower1"}, {F135+33, "NoseLower2"}, {F135+34, "NoseLower3"}, {F135+35, "NoseLower4"}, // Lower nose
        {F135+36, "REye0"}, {F135+37, "REye1"}, {F135+38, "REye2"}, {F135+39, "REye3"}, {F135+40, "REye4"}, {F135+41, "REye5"}, // Right eye
        {F135+42, "LEye0"}, {F135+43, "LEye1"}, {F135+44, "LEye2"}, {F135+45, "LEye3"}, {F135+46, "LEye4"}, {F135+47, "LEye5"}, // Left eye
        {F135+48, "OMouth0"}, {F135+49, "OMouth1"}, {F135+50, "OMouth2"}, {F135+51, "OMouth3"}, {F135+52, "OMouth4"}, {F135+53, "OMouth5"}, // Outer mouth 1/2
        {F135+54, "OMouth6"}, {F135+55, "OMouth7"}, {F135+56, "OMouth8"}, {F135+57, "OMouth9"}, {F135+58, "OMouth10"}, {F135+59, "OMouth11"}, // Outer mouth 2/2
        {F135+60, "IMouth0"}, {F135+61, "IMouth1"}, {F135+62, "IMouth2"}, {F135+63, "IMouth3"}, {F135+64, "IMouth4"}, {F135+65, "IMouth5"}, {F135+66, "IMouth6"}, {F135+67, "IMouth7"}, // Inner mouth
        {F135+68, "RPupil"}, {F135+69, "LPupil"}, // Pupils
ReetKaur15 commented 3 weeks ago

Hi @m-decoster , i am using 24 keypoints to fine-tune the OpenPose : 20 points are from first 24 points of body-135 model but remaining 4 points belongs to [H135+4, "LIndex1Knuckles"] and [H135+16, "LPinky1Knuckles"].

Do i need to define all the 135 points in my json file, i am not sure how to specify keypoints in the json file. Could you please guide ? how did you do that.

If i am fine-tuning body-135 model, do i need to make other points (0,0,0) or i can simply skip those by not specifying in json file? if former is true, then do i need to follow the same convention as {F135+0, "FaceContour0"}, {F135+1, "FaceContour1"}, .. so on... OR i can mention like { 128: "FaceContour0"}, {129: "FaceContour1"} in simple order with 1,2,3.... dictionary keys?

Your response would be helpful. Thanks in advance