Detectron 샌드 박스 준비를위한 빠르고 쉬운 가이드

https://flic.kr/p/XtFVeG

2020 년 3 월 업데이트 :

이제 차세대 Detectron 버전이 있습니다. Detectron v1에 엄격하게 관심이 없다면 v2 항목으로 이동하십시오.

Detectron2 : 기본적인 엔드 투 엔드 튜토리얼

객체 감지는 딥 러닝에서 흥미로운 주제이며, 이미지에서 객체를 분류하는 기본 아이디어를 다음 단계로 넘어 가서 객체가 이미지 내부에있는 위치와 경계 윤곽이 무엇인지 찾아야합니다. 많은 딥 러닝 모델이 있으며 그중 일부는 ONNX 모델로도 제공됩니다. 이러한 모델 중 하나는 YOLO이며 Azure Machine Learning Service를 사용하여 호스팅 및 사용에 대한 게시물 이 있습니다.

Facebook AI 연구는 2018 년에 Detectron이라는 새로운 시스템을 출시했습니다. Detectron은 Caffe2 딥 러닝 라이브러리를 기반으로하며 Mask R-CNN 및 RetinaNet과 같은 여러 기본 아키텍처와 함께 사용할 수 있습니다. 홈페이지 에서 식별 된 물체의 윤곽선을 감지 할 수 있다는 점이 특히 멋져 보였기 때문에 한 번 해보고 싶었습니다.

Detectron을 사용하는 것은 GitHub의 시작 페이지에 따라 간단해야합니다. 불행히도 이것은 Caffe2의 최신 변경 사항에 특별히 해당되지 않습니다. Caffe2는 2018 년에 PyTorch에 병합되었으며 Detectron을 사용하기위한 Caffe2 환경을 구축하기위한 대부분의 가이드가 작동하지 않았습니다. 나는 다른 조합을 시도했지만 항상 벽에 부딪 혔지만 그것은 내 문제 일 수 있습니다.

어쨌든, 나는 다시 시도하려고 생각했고 Caffe2 환경을 준비하는 대신 유효한 Caffe2 설정이 있다고 가정하고 PyTorch 환경을 만들기 위해 전환했습니다. 이 접근 방식은 2019 년 1 월부터 잘 작동했으며 공유 할 생각이었습니다. 그럼 요리하러 가자!

PyTorch GPU 지원 Docker 컨테이너 만들기

우리는 처음부터 시작하지 않을 것이므로 쉬운 방법은 PyTorch의 GPU 지원 도커 컨테이너를 만드는 것입니다. 공식 PyTorch 이미지는 도커 허브의 PyTorch 페이지 에서 찾을 수 있습니다. 다양한 이미지가 있지만 두 가지 이유로 pytorch / pytorch : nightly-devel-cuda9.2-cudnn7 을 선택했습니다. 첫 번째는 PyTorch의 최신 빌드가 있다는 것입니다. 이는 아마도 Caffe2가 번들로 포함될 것임을 의미합니다. 두 번째는 Cuda 9를 사용한다는 것입니다. Cuda 10을 사용해 보았지만 도중에 실패했습니다. Detectron 문서에 따르면 Cuda 및 Python의 특정 버전에서 테스트되었으므로 가장 최신의 최신 버전을 가져 오는 것이 항상 작동하지 않을 수 있습니다. 이 설정이 작동하는 또 다른 것은 nvidia-docker 입니다. PyTorch GPU 지원 버전이 있으므로 호스트에서 컨테이너로 GPU 패스 스루가 필요합니다. 최신 버전의 Windows Server (2016 년 또는 2019 년)가 아니면 어려울 수있는 Windows 상자에서. macOS 옵션에 대해서는 모르지만 Linux 배포판을 실행하지 않는 한 클라우드의 도움이 필요합니다. Azure가 여기에서 구출되었고 딥 러닝 가상 머신을 간단히 만들 수 있습니다 . 프로비저닝 할 설정이 여러 가지 있지만 주로 OS 버전 및 HW 사양에 관한 것입니다. 단일 GPU가있는 Linux는 충분할 것이며 Docker, nvidia-docker 및 GPU 드라이버가 사전 설치되어 제공됩니다.

무료 평가판 Azure 계정이 없지만 동일한 아이디어가 다른 클라우드에 적용되는 경우 만들 수 있습니다. nvidia GPU, nvidia-docker 및 드라이버가 설치된 Linux VM 만 있으면됩니다.

VM이 생성되면 Azure Portal에서 공용 IP 주소를 사용하여 VM에 SSH로 연결하는 데 사용할 수 있습니다. 첫 번째 단계는 필요한 이미지를 가져 와서 컨테이너를 생성하는 것입니다.

sudo docker pull pytorch/pytorch:nightly-devel-cuda9.2-cudnn7
sudo nvidia-docker run --rm -it pytorch/pytorch:nightly-devel-cuda9.2-cudnn7

python -c "import torch;print(torch.cuda.get_device_name(0))"

인터넷 검색 단계를 저장하기 위해 Python 모듈 protobuf 및 향후 누락 때문입니다. 따라서 설치되면 Caffe2에서 잘 작동합니다.

pip install protobuf
pip install future
python -c "from caffe2.python import workspace; print(workspace.NumCudaDevices())"

레시피에 Detectron 추가

에 따라 설치 페이지 Detectron의, 다음 코드가 빌드하는 동안 경고의 몇 가지있을 것입니다하지만 그들은 다 치신하지 않습니다, 그것은 설치 얻을 것이다.

git clone https://github.com/facebookresearch/Detectron
pip install -r ./Detectron/requirements.txt
cd Detectron && make

python ./detectron/tests/test_spatial_narrow_as_op.py

먼저 누락 된 종속성을 설치하고 OpenCV가 정상인지 확인합니다.

# credit goes to : https://www.kaggle.com/c/inclusive-images-challenge/discussion/70226
apt-get update 
apt-get install libgtk2.0-dev
python -c "import cv2; print(cv2.__version__)"

cd /workspace
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make install
cd /workspace/Detectron/

이제 GitHub의 Detectron 시작 페이지에 언급 된 간단한 명령 중 하나를 실행하여 제대로 작동하는지 확인해야합니다.

python tools/infer_simple.py \
    --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
    --output-dir /tmp/detectron-visualizations \
    --image-ext jpg \
    --wts https://dl.fbaipublicfiles.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl \
    demo

이 오류는 Detectron과 함께 제공되는 테스트 스크립트가 OpenCV v 3.x를 가정하고 현재 v 4.0.0을 사용하기 때문입니다. findContoursv 3.x에서는 세 개의 값을 반환 하는 함수가 있지만 v 4.0.0에서는 두 개의 값만 반환합니다. 우리가 해결해야 할 작은 변화입니다.

멋진 Linux 텍스트 편집기 중 하나를 사용하여 /detectron/utils/vis.py 파일을 편집하고 추가 반환 값이있는 두 가지 항목을 수정할 수 있습니다. 하지만 Detectron repo를 포크하고 다음과 같은 작은 버전을 확인하려고 생각했습니다.

그것은 작동하지 않을 4.1것이지만 그것은 또 다른 이야기입니다. 이제 필요한 것은 현재 Detectron 폴더를 삭제하고이 Detectron 분기 버전을 가져 와서 빌드하는 것입니다.

cd /workspace
rm -rf ./Detectron
git clone https://github.com/ylashin/Detectron
cd Detectron && make

위의 OpenCV 문제는 이제 수정되었으므로 더 이상 걱정할 필요가 없으며 분기 된 복사본을 사용하는 위의 단계는 사용하지 않는 것이 좋습니다.

좋습니다. 동일한 테스트 스크립트를 다시 시도해 보겠습니다.

python tools/infer_simple.py \
    --cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
    --output-dir /tmp/detectron-visualizations \
    --image-ext jpg \
    --wts https://dl.fbaipublicfiles.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl \
    demo

PDF를 가져 와서 검사를 위해 다운로드하는 방법은 귀하에게 달려 있습니다. 나 자신을 위해 docker를 사용하여 컨테이너에서 호스트 VM으로 복사했습니다. 그런 다음 호스트 VM에서 /notebooksAzure 딥 러닝 VM이 Jupiter를 포트 8000 (HTTPS 사용)에 설치하고 외부에 게시 한 상태로 제공되므로 일부 폴더에 저장 했습니다. 그래서 Windows 랩톱에서 브라우저를 사용하여 파일에 액세스하고 PDF를 로컬로 다운로드 할 수있었습니다.

내 이미지 중 일부로 Detectron을 시도하면 다음과 같은 결과가 나타납니다.

고해상도 이미지가있는 경우 Detectron은 확대 / 축소하지 않고 이미지를 볼 때조차 알아 채지 못할 수있는 작은 물체를 찾을 수 있습니다 😃

이제 뭐

멋지고 멋졌고 잊기 전에 다른 SSH 창을 열고 해당 컨테이너를 로컬 이미지로 커밋하는 것이 좋습니다. 다른 사람들이 직접 사용할 수 있도록 도커 허브로 푸시 할 수도 있습니다.

따라서 시간을 절약하고 싶다면 최종 이미지를 시도해 볼 수 있습니다.

sudo docker pull ylashin/detectron
sudo nvidia-docker run --rm -it ylashin/detectron
  1. 더 쉽게 사용할 수 있도록 Detectron 모델을 ONNX 형식으로 내 보냅니다.
  2. Flask 또는 .NET Core를 사용하여이 이미지에서 웹 서비스를 게시합니다. 개체 마스크로 생성 된 PDF는 테스트 및 검증 목적으로 Detectron 소스 코드와 함께 제공되는 멋진 기능입니다. 그러나 실제 애플리케이션에서 Detectron을 사용하려면 추론의 일반 결과를 얻고 호출자 애플리케이션에서이를 해석 / 사용해야합니다.

행복한 감지 !!

Suggested posts

“인공 일반 지능”이란 무엇입니까?

“인공 일반 지능”이란 무엇입니까?

일부 : 인공 일반 지능 소개. “어딘가에 놀라운 것이 알려지기를 기다리고 있습니다.

딥 러닝의 확률 적 경사 하강 법

딥 러닝의 확률 적 경사 하강 법

신경망은 종종 올바른 값을 찾는 데 필요한 수백만 개의 가중치로 구성됩니다. 사용 가능한 데이터로이 네트워크를 최적화하려면 선택할 최적화 프로그램을 신중하게 고려해야합니다.