File size: 2,976 Bytes
7fc5a59 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #ifndef OPENPOSE_POSE_BODY_PART_CONNECTOR_CAFFE_HPP
#define OPENPOSE_POSE_BODY_PART_CONNECTOR_CAFFE_HPP
#include <openpose/core/common.hpp>
#include <openpose/pose/enumClasses.hpp>
namespace op
{
// It mostly follows the Caffe::layer implementation, so Caffe users can easily use it. However, in order to keep
// the compatibility with any generic Caffe version, we keep this 'layer' inside our library rather than in the
// Caffe code.
template <typename T>
class BodyPartConnectorCaffe
{
public:
explicit BodyPartConnectorCaffe();
virtual ~BodyPartConnectorCaffe();
virtual void Reshape(const std::vector<ArrayCpuGpu<T>*>& bottom, const int gpuID = 0);
virtual inline const char* type() const { return "BodyPartConnector"; }
void setPoseModel(const PoseModel poseModel);
void setMaximizePositives(const bool maximizePositives);
void setDefaultNmsThreshold(const T defaultNmsThreshold);
void setInterMinAboveThreshold(const T interMinAboveThreshold);
void setInterThreshold(const T interThreshold);
void setMinSubsetCnt(const int minSubsetCnt);
void setMinSubsetScore(const T minSubsetScore);
void setScaleNetToOutput(const T scaleNetToOutput);
virtual void Forward(const std::vector<ArrayCpuGpu<T>*>& bottom, Array<T>& poseKeypoints,
Array<T>& poseScores);
virtual void Forward_cpu(const std::vector<ArrayCpuGpu<T>*>& bottom, Array<T>& poseKeypoints,
Array<T>& poseScores);
virtual void Forward_gpu(const std::vector<ArrayCpuGpu<T>*>& bottom, Array<T>& poseKeypoints,
Array<T>& poseScores);
virtual void Forward_ocl(const std::vector<ArrayCpuGpu<T>*>& bottom, Array<T>& poseKeypoints,
Array<T>& poseScores);
virtual void Backward_cpu(const std::vector<ArrayCpuGpu<T>*>& top, const std::vector<bool>& propagate_down,
const std::vector<ArrayCpuGpu<T>*>& bottom);
virtual void Backward_gpu(const std::vector<ArrayCpuGpu<T>*>& top, const std::vector<bool>& propagate_down,
const std::vector<ArrayCpuGpu<T>*>& bottom);
private:
PoseModel mPoseModel;
bool mMaximizePositives;
T mDefaultNmsThreshold;
T mInterMinAboveThreshold;
T mInterThreshold;
int mMinSubsetCnt;
T mMinSubsetScore;
T mScaleNetToOutput;
std::array<int, 4> mHeatMapsSize;
std::array<int, 4> mPeaksSize;
std::array<int, 4> mTopSize;
// GPU auxiliary
unsigned int* pBodyPartPairsGpuPtr;
unsigned int* pMapIdxGpuPtr;
Array<T> mFinalOutputCpu;
T* pFinalOutputGpuPtr;
int mGpuID;
DELETE_COPY(BodyPartConnectorCaffe);
};
}
#endif // OPENPOSE_POSE_BODY_PART_CONNECTOR_CAFFE_HPP
|