Detectron2를 통해 자체 제작 데이터를 학습하고 물체 검측을 하는 [실례 구분]
실례 분할은 무엇입니까?
다들 그림에서 물체를 판별하고 싶다는 생각을 하지 않았나요?(없음)
이럴 때 사용할 수 있는 것은 실례 구분이다.
실례 분할은 아래의 그림처럼 픽셀 단위로 물체를 단독으로 검출할 수 있다.
이 논문에 따르면
インスタンスセグメンテーション
는個体ごとに領域分割する
隣接した 同種類の物体(例えば前の車と後ろの車)を区別できる
라고 설명했다.의미 분류도 종류에 따라 판별할 수 있지만 개1과 개2를 구분할 수 없다.따라서 종류뿐만 아니라 모든 물체를 검측하려면 실례분할이 효과적이다
Detectron2는 무엇입니까?
디텍트론2는 페이스북 AI가 개발한 PyTorch 기반 물체 검출 라이브러리다.다양한 모델과 Pre-Trained 모델이 구현돼 Bounding box와 Instance Segmentation 등 물체 탐지를 간단하게 수행할 수 있다.
이번에는 이 Detectron2로 실례 구분을 해보겠습니다.
공식적으로 준비된 Google Colabratry에는 데이터 집합 등 기본 코드가 준비되어 있어 Detectron2 강좌를 간단하게 진행할 수 있습니다.
브라우저에서 빠르게 시도해 주셔서 감사합니다!
이번 결승점
원본 이미지
이미지 검사
이번 목표는 자신이 준비한 이미지를 배우고 미지의 데이터를 예측하며 잎을 검출하는 것입니다!
환경 구축이 힘들기 때문에 Google Colabrartory에서 진행됩니다.만약 현지에서 활동할 수 있다면 카메라를 연결하고 다양한 맞춤형 제작을 할 수 있습니다. 가능하다면 시도해 보세요!
전체 프로세스
이미지 데이터 준비
공부를 위해 자신이 찍은 식물 사진 10장을 준비했다.(10장이라도 정밀도는 괜찮은 편이다.)
더 늘리면 정밀도가 높아질 것 같아(천진목촌)
초대하다
모조란 이미지에'이 부분은 잎집'처럼 데이터(이번은 이미지)에 정보를 추가하는 것을 말한다.
이번에는 잎사귀 하나하나를 검출하기 위해 다음과 같은 변형을 진행했다.
Detectron2는 COCO 형식의 형식을 지원하기 때문에 파생 도구를 사용했다
coco-anotator
.이 도입은 Docker가 필요해서 그 환경 구축에 많은 시간을 들였다.
그림 10장의 시뮬레이션이 끝난 후에 COCO 형식의 json 파일을 다운로드할 수 있습니다.파일은 나중에 학습에 사용됩니다.
유명한 모조 도구
labelme
에서는 COCO 형식이 지원되지 않음labelme에서 COCO 형식으로 변환하는 것도 있는 것 같아요.평소에 labelme를 사용하시는 분들은 한번 해보세요!
참고 문장
이 보도는 매우 참고 가치가 있다.
자체 제작 데이터로 하려면 자신이 준비한 이미지 데이터와 모조품으로 만든 json 파일을 바꿀 수 있습니다!
훈련
등록 데이터 세트
직접 만든 json 파일과 이미지 폴더 지정하기
등록 데이터 세트
from detectron2.data.datasets import register_coco_instances
register_coco_instances("leaf", {}, "-COCOフォーマットのjsonファイルのpath-", "-画像フォルダのpath-")
배우다
설정이 결정되었지만 기본적으로 기본적으로 모두 기본적으로 사용되었다.
cfg.MODEL.ROI_HEADS.NUM_CLASSES
는 반수로 이번에는 잎의 한 반이기 때문에 1로 설정했다.배우다
from detectron2.engine import DefaultTrainer
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.DATASETS.TRAIN = ("leaf",)
cfg.DATASETS.TEST = ()
cfg.DATALOADER.NUM_WORKERS = 2
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml") # Let training initialize from model zoo
cfg.SOLVER.IMS_PER_BATCH = 2
cfg.SOLVER.BASE_LR = 0.00025 # pick a good LR
cfg.SOLVER.MAX_ITER = 300 # 300 iterations seems good enough for this toy dataset; you will need to train longer for a practical dataset
cfg.SOLVER.STEPS = [] # do not decay learning rate
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128 # faster, and good enough for this toy dataset (default: 512)
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1 # 1クラスのみ
os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
trainer = DefaultTrainer(cfg)
trainer.resume_or_load(resume=False)
trainer.train()
학습이 끝난 후model_final.pth
의 학습 모드 파일이 저장됩니다.이것은 예측에 쓰인다.
예측
예측기 생성
cfg.MODEL.WEIGHTS
이전 학습에서 만든 model_final.path
를 사용합니다.예측기 생성
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1 # 1クラスのみ
cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "/content/drive/MyDrive/PumpkinLeaf/model_final.pth")
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.6
cfg.MODEL.DEVICE = "cpu"
predictor = DefaultPredictor(cfg)
예측 및 표시
예측기를 사용하여 알 수 없는 그림을 판단합니다
예측 및 표시
from detectron2.utils.visualizer import Visualizer
import cv2
imgPath = "未知画像のpath"
im = cv2.imread(imgPath)
outputs = predictor(im)
v = Visualizer(im[:, :, ::-1],
metadata=leafs_metadata,
scale=1.0
)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
cv2_imshow(v.get_image()[:, :, ::-1])
결실
예측 결과가 잘 나왔어요!학습 데이터 10장이라도 상당히 높은 정밀도를 측정할 수 있어 사용하기에 편리합니다!
다음에는 리액트에게 이미지를 보내고 Flash에서 머신러닝 기사를 쓰고 싶어요!
GoogleColabratory
이것은 내가 쓴 Detectron2의 코드다.참고가 됐으면 좋겠어요!
Reference
이 문제에 관하여(Detectron2를 통해 자체 제작 데이터를 학습하고 물체 검측을 하는 [실례 구분]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/wakanao/articles/6a97e3e7966ed8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)