PyTorch 및 torchvision PlatoBlockchain 데이터 인텔리전스를 사용한 RetinaNet 개체 감지. 수직 검색. 일체 포함.

PyTorch 및 torchvision을 사용한 RetinaNet 객체 감지

개요

물체 감지는 컴퓨터 비전의 넓은 분야이며 "야생에서" 컴퓨터 비전의 더 중요한 응용 프로그램 중 하나입니다. 한 쪽 끝에서는 작업을 수행하는 로봇이나 자율 주행 자동차 등 환경을 통해 에이전트를 탐색하는 자율 시스템을 구축하는 데 사용할 수 있지만 이를 위해서는 다른 분야와의 교차가 필요합니다. 그러나 이상 감지(예: 라인의 결함 제품), 이미지 내에서 물체 찾기, 얼굴 감지 및 물체 감지의 다양한 기타 응용 프로그램은 다른 필드와 교차하지 않고 수행할 수 있습니다.

객체 감지는 이미지 분류만큼 표준화되지 않았습니다. 새로운 개발의 대부분은 일반적으로 대규모 라이브러리 및 프레임워크가 아닌 개별 연구원, 유지 관리자 및 개발자가 수행하기 때문입니다. TensorFlow나 PyTorch와 같은 프레임워크에 필요한 유틸리티 스크립트를 패키징하고 지금까지 개발을 안내한 API 지침을 유지하는 것은 어렵습니다.

이로 인해 객체 감지가 이미지 분류보다 다소 복잡하고 일반적으로 더 장황하며(항상 그런 것은 아님) 접근하기 어렵습니다. 생태계의 주요 이점 중 하나는 모범 사례, 도구 및 사용 방법에 대한 유용한 정보를 검색하지 않는 방법을 제공한다는 것입니다. 물체 감지를 사용하면 대부분의 사람들이 좋은 그립을 얻기 위해 현장의 풍경에 대해 더 많은 연구를 해야 합니다.

PyTorch/TorchVision의 RetinaNet을 사용한 객체 감지

torchvision PyTorch의 Computer Vision 프로젝트이며, 변환 및 증강 스크립트, 실무자에게 유용할 수 있는 사전 훈련된 가중치, 데이터 세트 및 유틸리티가 있는 모델 동물원을 제공하여 PyTorch 기반 CV 모델의 개발을 더 쉽게 만드는 것을 목표로 합니다.

아직 베타 버전이고 매우 실험적이지만 – torchvision 선택할 수 있는 몇 가지 모델이 있는 비교적 간단한 Object Detection API를 제공합니다.

  • 빠른 R-CNN
  • 레티 나넷
  • FCOS(완전 컨볼루션 RetinaNet)
  • SSD(VGG16 백본… yikes)
  • SSDLite(MobileNetV3 백본)

API가 다른 타사 API만큼 세련되거나 단순하지는 않지만 익숙한 생태계에 있는 것의 안전성을 선호하는 사람들에게는 매우 괜찮은 출발점입니다. 계속 진행하기 전에 PyTorch 및 Torchvision을 설치했는지 확인하십시오.

$ pip install torch torchvision

다음과 같은 일부 유틸리티 함수를 로드해 보겠습니다. read_image(), draw_bounding_boxes()to_pil_image() 이미지를 더 쉽게 읽고, 그리고 출력할 수 있도록 RetinaNet 및 사전 훈련된 가중치(MS COCO)를 가져옵니다.

from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import retinanet_resnet50_fpn_v2, RetinaNet_ResNet50_FPN_V2_Weights

import matplotlib.pyplot as plt

RetinaNet은 ResNet50 백본과 그 위에 FPN(Feature Pyramid Network)을 사용합니다. 클래스 이름은 장황하지만 아키텍처를 나타냅니다. 다음을 사용하여 이미지를 가져와 봅시다. requests 라이브러리를 만들고 로컬 드라이브에 파일로 저장합니다.

import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)

img = read_image("obj_det.jpeg")

이미지가 있으면 모델과 가중치를 인스턴스화할 수 있습니다.

weights = RetinaNet_ResNet50_FPN_V2_Weights.DEFAULT
model = retinanet_resnet50_fpn_v2(weights=weights, score_thresh=0.35)

model.eval()

preprocess = weights.transforms()

XNUMXD덴탈의 score_thresh 인수는 개체가 클래스의 개체로 감지되는 임계값을 정의합니다. 직관적으로 이것은 신뢰도 임계값이며 모델이 클래스에 속한다고 확신하는 35% 미만인 경우 객체를 클래스에 속하는 것으로 분류하지 않습니다.

가중치의 변환을 사용하여 이미지를 사전 처리하고 배치를 만들고 추론을 실행해 보겠습니다.

batch = [preprocess(img)]
prediction = model(batch)[0]

그게 다야, 우리 prediction 사전은 추론된 객체 클래스와 위치를 보유합니다! 이제 결과는 이 형식에서는 그다지 유용하지 않습니다. 가중치에서 메타데이터와 관련된 레이블을 추출하고 경계 상자를 그려야 합니다. 이 작업은 다음을 통해 수행할 수 있습니다. draw_bounding_boxes():

labels = [weights.meta["categories"][i] for i in prediction["labels"]]

box = draw_bounding_boxes(img, boxes=prediction["boxes"],
                          labels=labels,
                          colors="cyan",
                          width=2, 
                          font_size=30,
                          font='Arial')

im = to_pil_image(box.detach())

fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()

결과 :

RetinaNet은 실제로 차 뒤에서 엿보는 사람을 분류했습니다! 상당히 어려운 분류입니다.

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

다음을 교체하여 RetinaNet을 FCOS(완전 컨볼루션 RetinaNet)로 전환할 수 있습니다. retinanet_resnet50_fpn_v2fcos_resnet50_fpn, 그리고 FCOS_ResNet50_FPN_Weights 무게:

from torchvision.io.image import read_image
from torchvision.utils import draw_bounding_boxes
from torchvision.transforms.functional import to_pil_image
from torchvision.models.detection import fcos_resnet50_fpn, FCOS_ResNet50_FPN_Weights

import matplotlib.pyplot as plt
import requests
response = requests.get('https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg')
open("obj_det.jpeg", "wb").write(response.content)

img = read_image("obj_det.jpeg")
weights = FCOS_ResNet50_FPN_Weights.DEFAULT
model = fcos_resnet50_fpn(weights=weights, score_thresh=0.35)
model.eval()

preprocess = weights.transforms()
batch = [preprocess(img)]
prediction = model(batch)[0]

labels = [weights.meta["categories"][i] for i in prediction["labels"]]

box = draw_bounding_boxes(img, boxes=prediction["boxes"],
                          labels=labels,
                          colors="cyan",
                          width=2, 
                          font_size=30,
                          font='Arial')

im = to_pil_image(box.detach())

fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(im)
plt.show()

더 나아가기 – 컴퓨터 비전을 위한 실용적인 딥 러닝

당신의 호기심 많은 성격이 당신을 더 멀리 가고 싶게 만드나요? 다음을 확인하는 것이 좋습니다. 코스: “파이썬을 이용한 컴퓨터 비전을 위한 실용적인 딥러닝”.

PyTorch 및 torchvision PlatoBlockchain 데이터 인텔리전스를 사용한 RetinaNet 개체 감지. 수직 검색. 일체 포함.

또 다른 컴퓨터 비전 과정?

우리는 MNIST 숫자나 MNIST 패션의 분류를 하지 않을 것입니다. 그들은 오래전에 자신의 역할을 다했습니다. 고급 블랙박스 아키텍처가 성능 부담을 짊어지게 하기 전에 너무 많은 학습 리소스가 기본 데이터 세트와 기본 아키텍처에 집중하고 있습니다.

우리는 집중하고 싶다 신비화, 실용적인 사항, 이해, 직관실제 프로젝트. 배우고 싶다 방법 당신은 변화를 만들 수 있습니다? 우리는 뇌가 이미지를 처리하는 방식부터 유방암에 대한 연구 수준의 딥 러닝 분류기를 작성하고 "환각"하는 딥 러닝 네트워크에 이르기까지, 실제 작업을 통해 원리와 이론을 가르치고, 컴퓨터 비전을 해결하기 위해 딥러닝을 적용하는 전문가가 되기 위한 노하우와 도구.

안에 무엇입니까?

  • 비전의 첫 번째 원칙과 컴퓨터가 "보는" 방법을 가르칠 수 있는 방법
  • 컴퓨터 비전의 다양한 작업 및 응용
  • 작업을 더 쉽게 만들어줄 무역 도구
  • 컴퓨터 비전용 데이터세트 찾기, 생성 및 활용
  • 컨볼루션 신경망의 이론과 응용
  • 데이터 세트의 도메인 이동, 동시 발생 및 기타 편향 처리
  • Transfer Learning 및 다른 사람의 교육 시간 및 계산 리소스를 귀하의 이익을 위해 활용
  • 최첨단 유방암 분류기 구축 및 교육
  • 주류 아이디어에 건강한 회의론을 적용하고 널리 채택된 기술의 의미를 이해하는 방법
  • t-SNE 및 PCA를 사용하여 ConvNet의 "개념 공간" 시각화
  • 기업이 더 나은 결과를 얻기 위해 컴퓨터 비전 기술을 사용하는 방법에 대한 사례 연구
  • 적절한 모델 평가, 잠재 공간 시각화 및 모델의 관심 식별
  • 도메인 연구 수행, 자체 데이터 세트 처리 및 모델 테스트 설정
  • 최첨단 아키텍처, 아이디어의 진행, 독창적인 요소 및 구현 방법
  • KerasCV – 최첨단 파이프라인 및 모델 생성을 위한 WIP 라이브러리
  • 논문을 구문 분석하고 읽고 직접 구현하는 방법
  • 용도에 따른 모델 선택
  • 엔드 투 엔드 머신 러닝 파이프라인 만들기
  • Faster R-CNN, RetinaNets, SSD 및 YOLO를 통한 물체 감지에 대한 풍경 및 직관
  • 인스턴스 및 시맨틱 분할
  • YOLOv5를 사용한 실시간 객체 인식
  • YOLOv5 객체 감지기 훈련
  • KerasNLP(업계 최강의 WIP 라이브러리)를 사용하여 Transformers 작업
  • Transformer를 ConvNet과 통합하여 이미지 캡션 생성
  • Deepdream

결론

개체 감지는 Computer Vision의 중요한 분야이며 불행히도 접근하기 어려운 분야입니다.

이 짧은 가이드에서는 torchvision, PyTorch의 Computer Vision 패키지를 사용하면 RetinaNet을 사용하여 이미지에서 개체 감지를 더 쉽게 수행할 수 있습니다.

타임 스탬프 :

더보기 스택카부스