当前位置:网站首页>Fast target recognition based on pytorch and fast RCNN
Fast target recognition based on pytorch and fast RCNN
2022-07-06 06:53:00 【GIS developer】
Faster RCNN, be relative to R-CNN On the structure ,Faster RCNN Feature extraction has been done (feature extraction),proposal extract ,bounding box regression(rect refine),classification It's all integrated into one network , So that the comprehensive performance has been greatly improved , Especially in terms of detection speed .
PyTorch It's an open source Python Machine learning library , be based on Torch, For natural language processing applications . be relative to TensorFlow More lightweight , It is more suitable for scientific research and small projects .
Here is a simple example , be based on Fast RCNN Algorithm and PyTorch Fast target recognition . What we use here is coco Data sets have trained online models , It is relatively simple to operate .
Code
from PIL import Image
import matplotlib.pyplot as plt
# pip install -U matplotlib
import torch
# pip install pytorch
import torchvision.transforms as T
import torchvision
# pip install torchvision
import numpy as np
import cv2
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
# pip install opencv-python
# Download the trained model
model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()
COCO_INSTANCE_CATEGORY_NAMES = [
'__background__', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',
'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'N/A', 'stop sign',
'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
'elephant', 'bear', 'zebra', 'giraffe', 'N/A', 'backpack', 'umbrella', 'N/A', 'N/A',
'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket',
'bottle', 'N/A', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'N/A', 'dining table',
'N/A', 'N/A', 'toilet', 'N/A', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'N/A', 'book',
'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'
]
def get_prediction(img_path, threshold):
img = Image.open(img_path)
# Change one PIL Library pictures or numpy The array of is tensor Tensor type ; Convert from [0,255]->[0,1]
transform = T.Compose([T.ToTensor()])
img = transform(img)
pred = model([img])
print(pred[0]['labels'].numpy())
# Category extraction
pred_class = [COCO_INSTANCE_CATEGORY_NAMES[i] for i in list(pred[0]['labels'].numpy())]
# Coordinate extraction
pred_boxes = [[(i[0], i[1]), (i[2], i[3])] for i in list(pred[0]['boxes'].detach().numpy())]
# Find the ones that meet the similarity requirements
pred_score = list(pred[0]['scores'].detach().numpy())
pred_t = [pred_score.index(x) for x in pred_score if x > threshold][-1]
pred_boxes = pred_boxes[:pred_t + 1]
pred_class = pred_class[:pred_t + 1]
print("pred_class:", pred_class)
print("pred_boxes:", pred_boxes)
return pred_boxes, pred_class
def object_detection_api(img_path, threshold=0.5, rect_th=3, text_size=3, text_th=3):
boxes, pred_cls = get_prediction(img_path, threshold)
img = cv2.imread(img_path)
# Convert to RGB Images
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
for i in range(len(boxes)):
# Circle the target according to the coordinates
cv2.rectangle(img, (int(boxes[i][0][0]), int(boxes[i][0][1])), (int(boxes[i][1][0]), int(boxes[i][1][1])),
color=(0, 255, 0),
thickness=rect_th)
# Label categories
cv2.putText(img, pred_cls[i], (int(boxes[i][0][0]), int(boxes[i][0][1])), cv2.FONT_HERSHEY_SIMPLEX, text_size,
(0, 255, 0), thickness=text_th)
plt.imshow(img)
plt.show()
if __name__ == '__main__':
object_detection_api(img_path=r"C:\Users\hanbo\Pictures\dog.jpg")
result
Example 1
Example 2
边栏推荐
- Prefix and array series
- AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm
- Due to high network costs, arbitrum Odyssey activities are suspended, and nitro release is imminent
- Reflex WMS中阶系列3:显示已发货可换组
- SAP SD发货流程中托盘的管理
- 医疗软件检测机构怎么找,一航软件测评是专家
- UNIPRO Gantt chart "first experience": multi scene exploration behind attention to details
- Erreur de type résolue avec succès: type de données « catégorie» non sous - jacente
- At the age of 26, I changed my career from finance to software testing. After four years of precipitation, I have been a 25K Test Development Engineer
- GET 和 POST 请求类型的区别
猜你喜欢
How to do a good job in financial literature translation?
Blue Bridge Cup zero Foundation National Championship - day 20
Fedora/REHL 安装 semanage
Practical guidance for interface automation testing (Part I): what preparations should be made for interface automation
My creation anniversary
A method to measure the similarity of time series: from Euclidean distance to DTW and its variants
C语言_双创建、前插,尾插,遍历,删除
电子书-CHM-上线CS
Leetcode daily question (971. flip binary tree to match preorder traversal)
Explain in detail the functions and underlying implementation logic of the groups sets statement in SQL
随机推荐
SSO process analysis
Call, apply, bind rewrite, easy to understand with comments
《从0到1:CTFer成长之路》书籍配套题目(周更)
Day 248/300 thoughts on how graduates find jobs
[advanced software testing step 1] basic knowledge of automated testing
AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/home/yolov5/models/comm
kubernetes集群搭建Zabbix监控平台
Biomedical English contract translation, characteristics of Vocabulary Translation
[brush questions] how can we correctly meet the interview?
Do you really know the use of idea?
前缀和数组系列
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
Office-DOC加载宏-上线CS
将ue4程序嵌入qt界面显示
The internationalization of domestic games is inseparable from professional translation companies
Fedora/REHL 安装 semanage
Leetcode - 152 product maximum subarray
指尖上的 NFT|在 G2 上评价 Ambire,有机会获得限量版收藏品
MySQL high frequency interview 20 questions, necessary (important)
On the first day of clock in, click to open a surprise, and the switch statement is explained in detail