내 오픈 소스 프로젝트 - 실시간 2D 포즈 추정을 위해 OnnxRuntime을 사용하여 CPU 측에 RTMPose를 배포합니다.

1RTM포즈

RTMPose 논문 주소: https://arxiv.org/abs/2303.07399 .

RTMPose는 하향식 패러다임의 2D 포즈 추정 프레임워크입니다. Momomomo는 Simcc를 수정하여 더욱 가볍고 효과적이며 보다 산업 응용 분야에 특화되도록 만들었습니다.

RTMPose의 하이라이트는 산업 수준의 추론 속도와 정확성이며, 이는 그의 논문 초록에도 강조되어 있습니다. 그의 논문 초록을 주의 깊게 읽어보세요.

2D 포즈 추정에 대한 최근 연구는 공개 벤치마크에서 뛰어난 성능을 달성했지만 산업계에서의 적용은 여전히 ​​무거운 모델 매개변수와 높은 대기 시간으로 인해 어려움을 겪고 있습니다. 이러한 격차를 해소하기 위해 패러다임, 모델 아키텍처, 훈련 전략 및 배포를 포함한 자세 추정의 핵심 요소를 경험적으로 탐색하고 MMPose를 기반으로 하는 고성능 실시간 다중 사람 포즈 추정 프레임워크인 RTMPose를 제시합니다. RTMPose-m은 Intel i7-11700 CPU에서 90+ FPS, NVIDIA GTX 1660 Ti GPU에서 430+ FPS로 COCO에서 75.8% AP를 달성하고, RTMPose-l은 130+ FPS로 COCO-WholeBody에서 67.0% AP를 달성했습니다. 중요한 실시간 애플리케이션에서 RTMPose의 기능을 추가로 평가하기 위해 모바일 장치에 배포한 후의 성능도 보고합니다. 우리의 RTMPose-s는 72를 달성했습니다. Snapdragon 865 칩에서 70FPS 이상을 제공하는 COCO의 2% AP로 기존 오픈 소스 라이브러리보다 성능이 뛰어납니다. 코드와 모델은 다음에서 공개됩니다.이 https URL .

논문 초록 소개에 따르면 RTMPose-m 모델은 COCO에서 75.8% AP 에 도달하지만 Intel i7-11700 CPU에서 ONNXRuntime을 사용하여 90+FPS 에 도달할 수 있고 NVIDIA GTX 1660 Ti GPU에서 TensorRT를 사용하여 **430+FPS에 도달할 수 있습니다. ... **RTMPose-s는 72.2% AP 성능으로 휴대폰 Snapdragon865 칩에 ncnn 배포를 통해 70+FPS를 달성합니다 .

너무 강력해서 꼭 갖고 싶어요! ! ! !

RTMPose가 MMPose에 통합되었습니다. Github 주소: https://github.com/open-mmlab/mmpose/tree/dev-1.x/projects/rtmpose

당시 RTMPose의 README.md 문서를 자세히 살펴보았는데 모델 배포에 대한 튜토리얼은 MMDeploy에 크게 의존하고 있으며 개인적으로 MMDeploy를 심층적으로 통합하는 것은 어려울 것이라고 생각합니다(물론 이것은 개인적인 의견일 뿐입니다. 비판하지 마세요) 그리고 더 많은 것을 가지고 있습니다. 우리는 로컬 배포 및 서버 배포 모델에 대한 경험이 있으므로 이 기사에서는 MMDeploy에 의존하지 않고 OnnxRuntime CPU C++ SDK를 사용하여 RTMDetnano+RTMPose-m에서 내보낸 onnx 모델을 배포합니다. 로컬 CPU에. 실시간 2D 포즈 추정을 수행하는 데는 GPU가 필요하지 않습니다. 제가 테스트한 이전 i5-7400 4H도 실시간 추정을 수행할 수 있으므로 서두르세요!

또한 이 예를 위해 Lightspeed Merge of Pr을 제공한 RTMPose( Jinglao Zhihu 홈페이지 ) 의 저자 Jinglao에게 감사의 말씀을 전하고 싶습니다 .

2 OnnxRuntime을 사용하여 CPU 측에 RTMDetnano+RTMPose를 배포합니다.

자, 이번 섹션에서는 OnnxRuntime을 사용하여 RTMDetnano+RTMPose 모델을 CPU 측에 배포하는 방법을 자세히 소개합니다.이 튜토리얼에서는 RTMDetnano+RTMPose를 기반으로 하는 Top-Down 2D 포즈 추정 예제를 구현하고 이를 사용합니다. 사람을 감지하는 RTMDetnano 그런 다음 감지 프레임에 따라 해당 이미지 영역을 자르고 자세 추정을 위해 RTMPose에 공급하고 프레임 건너뛰기 감지의 실시간 2D 포즈 추정을 위한 간단한 C++ 클래스가 수행됩니다. 좋아요, 즐겁게 시작합시다. .

본 글에 소개된 코드 예시는 오픈소스( https://github.com/HW140701/RTMPose-Deploy )이며, 미리 컴파일된 패키지가 제공되며, 컴파일이 너무 귀찮다면 미리 컴파일된 패키지를 직접 다운로드하여 실행할 수도 있습니다. 물론 Windows 컴퓨터에 VC 런타임이 있어야 합니다. 관심 있는 분들은 별표를 눌러주세요 . 감사합니다.

본 글의 코드는 주로 RTMDetnano+RTMPose를 기반으로 한 데이터 전처리 및 후처리 방법을 보여주고 있으며, 관심 있는 사람이라면 누구나 배울 수 있습니다.

이 문서의 샘플 코드는 MMPose dev1.x( https://github.com/open-mmlab/mmpose/pull/2316 )에 제출되었습니다 .

2.1 Onnx 모델 다운로드 및 Onnx 모델 변환

RTMPose 의 README.md 문서 에서 제공된 기본 내보내기 onnx 모델 예제를 찾으세요 . 다운로드 주소는 다음과 같습니다.

https://download.openmmlab.com/mmpose/v1/projects/rtmpose/rtmpose-cpu.zip

압축 해제가 완료되면 end2end.onnx라는 RTMDetnano+RTMPose의 onnx 모델이 표시됩니다.

그러나 여기의 RTMPose는 coco17 데이터 세트의 17가지 인체 핵심 포인트입니다. 다른 RTMPose onnx 모델이 필요한 경우 RTMPose의 README.md를 참조하여 onnx 모델을 내보내세요.

그런 다음 표적 탐지기는 RTMDetnano입니다. 물론 다양한 YOOOOOOOOOOOO와 같은 다른 표적 탐지기를 사용할 수도 있습니다. 개인적으로 표적 탐지기는 후속 포즈 추정에 거의 영향을 미치지 않는다고 생각합니다. 물론 이 표적 탐지기는 지연 탐지기가 아닙니다. .

2.2 RTMDetnano+RTMPose를 기반으로 한 하향식 2D 포즈 추정 예제 구현

2.2.1 RTMDetnano 기반 타겟 탐지

위 링크에서 제공하는 RTMDetnano는 Batch_size, image_height, image_width에 동적 크기를 가지므로 구현 시 입력 이미지의 너비와 높이가 고정되지 않습니다.

입력 이미지 정규화에 사용되는 image_mean 및 image_std의 값은 압축된 https://download.openmmlab.com/mmpose/v1/projects/rtmpose/rtmpose-cpu.zip 의 각 모델에 해당하는 파이프 라인.json 파일 에서 가져옵니다. 패키지. .

자세한 사항은 창고코드를 참고해주세요.

이미지 입력 ​​후 추론을 거쳐 카테고리 0이고 신뢰도가 가장 높은 검출 프레임을 이 웨어하우스에서 후속 포즈 추정을 위한 검출 영역으로 선택합니다. 이미지에서 타겟 탐지 확률이 가장 높을 것으로 추측되지만, 멀티 플레이어 제스처는 상대적으로 확장이 간단하고 작업 부하도 크지 않을 것으로 추정됩니다.

2.2.2 RTMPose 기반 태도 추정

타겟 감지가 완료된 후 RTMPose에 필요한 입력 크기가 1x3x256x192이기 때문에 감지 프레임과 아핀 변환에 따라 감지 프레임의 영역을 잘라낸 다음 잘라낸 이미지를 전처리하여 RTMPose에 공급하여 인식하게 되며, 17개의 키 키가 얻어집니다. 그런 다음 256x192의 점 좌표가 역아핀 변환을 통해 원래 입력 이미지로 역계산되어 올바른 좌표를 얻습니다.

자세한 사항은 창고코드를 참고해주세요.

2.2.3 실시간 비디오 스트림 포즈 추정: RTMPoseTracker

RTMDetnano 및 RTMPoseTracker의 추론 클래스를 구축한 후 실시간 비디오 스트림 감지를 처리하는 간단한 RTMPoseTracker를 구축했습니다. 기본적으로 RTMPoseTracker는 10프레임마다 대상 감지를 수행하므로 단일 프레임 추론 지연을 크게 줄일 수 있습니다. 실시간 2D 포즈 추정 성능.

관심이 있으시면 제 개인 웹사이트인 https://www.stubbornhuang.com/ 을 방문해 주세요.

추천

출처blog.csdn.net/HW140701/article/details/130431418