บทนำ
การตรวจจับวัตถุเป็นฟิลด์ขนาดใหญ่ในการมองเห็นด้วยคอมพิวเตอร์ และเป็นหนึ่งในแอปพลิเคชั่นที่สำคัญกว่าของการมองเห็นด้วยคอมพิวเตอร์ "ในธรรมชาติ" ด้านหนึ่ง สามารถใช้เพื่อสร้างระบบอัตโนมัติที่นำทางตัวแทนผ่านสภาพแวดล้อมได้ ไม่ว่าจะเป็นหุ่นยนต์ที่ทำงานหรือรถยนต์ที่ขับด้วยตนเอง แต่สิ่งนี้ต้องแยกกับสาขาอื่น อย่างไรก็ตาม การตรวจจับสิ่งผิดปกติ (เช่น ผลิตภัณฑ์ที่มีข้อบกพร่องในสายการผลิต) การระบุตำแหน่งวัตถุภายในภาพ การตรวจจับใบหน้า และการใช้งานการตรวจจับวัตถุอื่นๆ สามารถทำได้โดยไม่ต้องตัดกับช่องอื่นๆ
การตรวจจับวัตถุไม่ได้มาตรฐานเท่ากับการจำแนกภาพ สาเหตุหลักมาจากการพัฒนาใหม่ส่วนใหญ่มักทำโดยนักวิจัย ผู้ดูแล และนักพัฒนาแต่ละคน แทนที่จะเป็นไลบรารีและเฟรมเวิร์กขนาดใหญ่ เป็นการยากที่จะจัดแพ็คเกจสคริปต์ยูทิลิตี้ที่จำเป็นในเฟรมเวิร์ก เช่น TensorFlow หรือ PyTorch และรักษาแนวทาง API ที่เป็นแนวทางในการพัฒนาจนถึงตอนนี้
สิ่งนี้ทำให้การตรวจจับวัตถุค่อนข้างซับซ้อนมากขึ้น โดยทั่วไปแล้วจะละเอียดกว่า (แต่ไม่เสมอไป) และเข้าถึงได้น้อยกว่าการจัดประเภทรูปภาพ ประโยชน์หลักๆ ประการหนึ่งของการอยู่ในระบบนิเวศคือช่วยให้คุณไม่ต้องค้นหาข้อมูลที่เป็นประโยชน์เกี่ยวกับแนวปฏิบัติ เครื่องมือ และแนวทางที่ดีในการใช้งาน ด้วยการตรวจจับวัตถุ ส่วนใหญ่ต้องทำการวิจัยเพิ่มเติมเกี่ยวกับภูมิทัศน์ของสนามเพื่อให้ได้การยึดเกาะที่ดี
Detectron2 ของ Meta AI – การแบ่งส่วนอินสแตนซ์และการตรวจจับวัตถุ
ตรวจจับตรอน2 คือ Meta AI (เดิมชื่อ FAIR – Facebook AI Research) ซึ่งเป็นการตรวจจับออบเจ็กต์ การแบ่งเซ็กเมนต์ และการประมาณค่าของวัตถุแบบโอเพ่นซอร์ส ของ Meta AI ทั้งหมดนี้รวมอยู่ในที่เดียว จากภาพที่ป้อนเข้าไป มันสามารถส่งคืนป้ายกำกับ กล่องขอบเขต คะแนนความเชื่อมั่น หน้ากาก และโครงกระดูกของวัตถุ สิ่งนี้แสดงให้เห็นอย่างดีในหน้าของที่เก็บ:
มีไว้เพื่อใช้เป็นห้องสมุดที่คุณสามารถสร้างโครงการวิจัยได้ ให้บริการ สวนสัตว์จำลอง ด้วยการนำไปใช้งานส่วนใหญ่โดยอาศัย Mask R-CNN และ R-CNN โดยทั่วไปควบคู่ไปกับ RetinaNet พวกเขายังมีค่อนข้างดี เอกสาร. มาลองรันสคริปต์อนุมานตัวอย่างกันเถอะ!
ขั้นแรก ให้ติดตั้งการพึ่งพา:
$ pip install pyyaml==5.1
$ pip install 'git+https://github.com/facebookresearch/detectron2.git'
ต่อไป เราจะนำเข้ายูทิลิตี้ Detectron2 ซึ่งเป็นที่มาของความรู้เกี่ยวกับโดเมนเฟรมเวิร์ก คุณสามารถสร้างเครื่องตรวจจับโดยใช้ DefaultPredictor
คลาส โดยส่งผ่านอ็อบเจ็กต์การกำหนดค่าที่ตั้งค่าไว้ ดิ Visualizer
ให้การสนับสนุนสำหรับการแสดงผลภาพ MetadataCatalog
และ DatasetCatalog
เป็นของ API ข้อมูลของ Detectron2 และเสนอข้อมูลเกี่ยวกับชุดข้อมูลในตัวรวมถึงข้อมูลเมตา
มานำเข้าคลาสและฟังก์ชันที่เราจะใช้กัน:
import torch, detectron2
from detectron2.utils.logger import setup_logger
setup_logger()
from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog, DatasetCatalog
การใช้ requests
เราจะดาวน์โหลดรูปภาพและบันทึกลงในไดรฟ์ในเครื่องของเรา:
import matplotlib.pyplot as plt
import requests
response = requests.get('http://images.cocodataset.org/val2017/000000439715.jpg')
open("input.jpg", "wb").write(response.content)
im = cv2.imread("./input.jpg")
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))
ผลลัพธ์นี้ใน:
ตอนนี้ เราโหลดการกำหนดค่า บังคับใช้การเปลี่ยนแปลงหากจำเป็น (รุ่นต่างๆ ทำงานบน GPU โดยค่าเริ่มต้น ดังนั้น หากคุณไม่มี GPU คุณจะต้องตั้งค่าอุปกรณ์เป็น 'cpu' ในการกำหนดค่า):
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.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
ที่นี่เราระบุว่าเราต้องการเรียกใช้โมเดลใดจาก model_zoo
. เราได้นำเข้าโมเดลการแบ่งส่วนอินสแตนซ์ ตามสถาปัตยกรรม Mask R-CNN และด้วยแกนหลัก ResNet50 ขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ (การตรวจจับจุดสำคัญ การแบ่งส่วนอินสแตนซ์ การแบ่งส่วนแบบพาโนรามา หรือการตรวจจับวัตถุ) คุณจะโหลดโมเดลที่เหมาะสม
ในที่สุด เราก็สร้างตัวทำนายได้ด้วยสิ่งนี้ cfg
และรันบนอินพุต! ดิ Visualizer
คลาสใช้ในการวาดการคาดการณ์บนรูปภาพ (ในกรณีนี้ อินสแตนซ์ที่แบ่งกลุ่ม คลาส และกล่องขอบเขต:
predictor = DefaultPredictor(cfg)
outputs = predictor(im)
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
fig, ax = plt.subplots(figsize=(18, 8))
ax.imshow(out.get_image()[:, :, ::-1])
สุดท้ายนี้ส่งผลให้:
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
ก้าวต่อไป – การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์
ธรรมชาติที่อยากรู้อยากเห็นของคุณทำให้คุณต้องการไปต่อหรือไม่? เราขอแนะนำให้ตรวจสอบของเรา คอร์ส: “การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์ด้วย Python”.
หลักสูตร Computer Vision อื่น?
เราจะไม่ทำการจำแนกตัวเลข MNIST หรือแฟชั่น MNIST พวกเขาทำหน้าที่ส่วนของตนเมื่อนานมาแล้ว ทรัพยากรการเรียนรู้จำนวนมากเกินไปมุ่งเน้นไปที่ชุดข้อมูลพื้นฐานและสถาปัตยกรรมพื้นฐาน ก่อนปล่อยให้สถาปัตยกรรมกล่องดำขั้นสูงรับภาระด้านประสิทธิภาพ
เราต้องการที่จะมุ่งเน้นไปที่ การทำให้ลึกลับ, การปฏิบัติจริง, ความเข้าใจ, ปรีชา และ โครงการจริง. ต้องการเรียน อย่างไร คุณสามารถสร้างความแตกต่าง? เราจะพาคุณเดินทางตั้งแต่วิธีที่สมองของเราประมวลผลภาพไปจนถึงการเขียนตัวแยกประเภทการเรียนรู้เชิงลึกระดับการวิจัยสำหรับมะเร็งเต้านม ไปจนถึงเครือข่ายการเรียนรู้เชิงลึกที่ "หลอน" สอนหลักการและทฤษฎีแก่คุณผ่านการทำงานจริง เพื่อให้คุณมี ความรู้และเครื่องมือในการเป็นผู้เชี่ยวชาญในการประยุกต์ใช้การเรียนรู้เชิงลึกเพื่อแก้ปัญหาคอมพิวเตอร์วิทัศน์
อะไรอยู่ข้างใน?
- หลักการมองเห็นเบื้องต้นและวิธีการสอนคอมพิวเตอร์ให้ “มองเห็น”
- งานต่างๆ และการประยุกต์ใช้คอมพิวเตอร์วิทัศน์
- เครื่องมือการค้าที่จะทำให้งานของคุณง่ายขึ้น
- การค้นหา การสร้าง และการใช้ชุดข้อมูลสำหรับคอมพิวเตอร์วิทัศน์
- ทฤษฎีและการประยุกต์ใช้ Convolutional Neural Networks
- การจัดการการเปลี่ยนแปลงโดเมน การเกิดขึ้นร่วม และอคติอื่นๆ ในชุดข้อมูล
- ถ่ายทอดการเรียนรู้และใช้เวลาฝึกอบรมและทรัพยากรการคำนวณของผู้อื่นเพื่อประโยชน์ของคุณ
- การสร้างและฝึกอบรมผู้จำแนกมะเร็งเต้านมที่ล้ำสมัย
- วิธีการใช้ความสงสัยที่ดีต่อสุขภาพกับแนวคิดกระแสหลักและทำความเข้าใจกับความหมายของเทคนิคที่นำมาใช้กันอย่างแพร่หลาย
- การแสดงภาพ "พื้นที่แนวคิด" ของ ConvNet โดยใช้ t-SNE และ PCA
- กรณีศึกษาวิธีที่บริษัทต่างๆ ใช้เทคนิคการมองเห็นด้วยคอมพิวเตอร์เพื่อให้ได้ผลลัพธ์ที่ดีขึ้น
- การประเมินแบบจำลองที่เหมาะสม การสร้างภาพพื้นที่แฝง และการระบุความสนใจของแบบจำลอง
- ดำเนินการวิจัยโดเมน ประมวลผลชุดข้อมูลของคุณเอง และสร้างการทดสอบแบบจำลอง
- สถาปัตยกรรมล้ำสมัย ความก้าวหน้าของแนวคิด สิ่งที่ทำให้มีเอกลักษณ์เฉพาะตัว และวิธีนำไปใช้
- KerasCV – ไลบรารี WIP สำหรับสร้างไปป์ไลน์และโมเดลที่ทันสมัย
- วิธีแยกวิเคราะห์และอ่านเอกสารและนำไปใช้เอง
- การเลือกรุ่นขึ้นอยู่กับการใช้งานของคุณ
- การสร้างไปป์ไลน์การเรียนรู้ของเครื่องแบบ end-to-end
- ภูมิทัศน์และสัญชาตญาณในการตรวจจับวัตถุด้วย R-CNN ที่เร็วกว่า, RetinaNets, SSD และ YOLO
- การแบ่งกลุ่มตัวอย่างและความหมาย
- การจดจำวัตถุแบบเรียลไทม์ด้วย YOLOv5
- การฝึกอบรมเครื่องตรวจจับวัตถุ YOLOv5
- การทำงานกับ Transformers โดยใช้ KerasNLP (ไลบรารี WIP ที่มีความแข็งแกร่งในอุตสาหกรรม)
- การรวม Transformers เข้ากับ ConvNets เพื่อสร้างคำบรรยายภาพ
- Deepdream
สรุป
การแบ่งส่วนอินสแตนซ์ไปไกลกว่าการแบ่งส่วนความหมายหนึ่งขั้น และบันทึกความแตกต่างเชิงคุณภาพระหว่างอินสแตนซ์แต่ละรายการของคลาส (บุคคลที่ 1 บุคคลที่ 2 ฯลฯ...) มากกว่าที่จะเป็นเพียงแค่อินสแตนซ์เดียว ในทางใดทางหนึ่ง – เป็นการจำแนกระดับพิกเซล
ในคำแนะนำสั้นๆ นี้ เราได้มาดูวิธีที่ Detectron2 ทำให้การแบ่งส่วนอินสแตนซ์และการตรวจจับวัตถุทำได้ง่ายและเข้าถึงได้ผ่าน API โดยใช้ Mask R-CNN