当前位置: 首页 > news >正文

做家教网站挣钱吗it培训机构培训费用

做家教网站挣钱吗,it培训机构培训费用,免费logo设计自动生成u钙网,百度做网站靠什么收费文章目录 1、任务描述2、MASR RCNN 网络结构3、方法实现4、结果展示5、涉及到的库getPerfProfile 6、参考 1、任务描述 利用 mask rcnn 网络,进行图片和视频的目标检测和实例分割 2、MASR RCNN 网络结构 3、方法实现 # Copyright (C) 2018-2019, BigVision LLC (L…

在这里插入图片描述

文章目录

  • 1、任务描述
  • 2、MASR RCNN 网络结构
  • 3、方法实现
  • 4、结果展示
  • 5、涉及到的库
    • getPerfProfile
  • 6、参考

1、任务描述

在这里插入图片描述

利用 mask rcnn 网络,进行图片和视频的目标检测和实例分割

2、MASR RCNN 网络结构

在这里插入图片描述

3、方法实现

# Copyright (C) 2018-2019, BigVision LLC (LearnOpenCV.com), All Rights Reserved.
# Author : Sunita Nayak
# Article : https://www.learnopencv.com/deep-learning-based-object-detection-and-instance-segmentation-using-mask-r-cnn-in-opencv-python-c/
# License: BSD-3-Clause-Attribution (Please read the license file.)
# This work is based on OpenCV samples code (https://opencv.org/license.html)import cv2 as cv
import argparse
import numpy as np
import os.path
import sys
import random# Initialize the parameters
confThreshold = 0.5  # Confidence threshold
maskThreshold = 0.3  # Mask thresholdparser = argparse.ArgumentParser(description='Use this script to run Mask-RCNN object detection and segmentation')
parser.add_argument('--image', help='Path to image file.')
parser.add_argument('--video', help='Path to video file.', default="cars.mp4")
parser.add_argument("--device", default="gpu", help="Device to inference on")
args = parser.parse_args()"""
python mask_rcnn.py --image ./images/person.jpg --device cpu
python mask_rcnn.py --video ./cars.mp4 --device cpu
"""# Draw the predicted bounding box, colorize and show the mask on the image
def drawBox(frame, classId, conf, left, top, right, bottom, classMask):# Draw a bounding box.cv.rectangle(frame, (left, top), (right, bottom), (255, 178, 50), 3)# Print a label of class.label = '%.2f' % confif classes:assert (classId < len(classes))label = '%s:%s' % (classes[classId], label)  # 'person:1.00'# Display the label at the top of the bounding boxlabelSize, baseLine = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, 1)top = max(top, labelSize[1])cv.rectangle(frame, (left, top - round(1.5 * labelSize[1])), (left + round(1.5 * labelSize[0]), top + baseLine),(255, 255, 255), cv.FILLED)cv.putText(frame, label, (left, top), cv.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 0), 1)# Resize the mask, threshold, color and apply it on the imageclassMask = cv.resize(classMask, (right - left + 1, bottom - top + 1))mask = (classMask > maskThreshold)roi = frame[top:bottom + 1, left:right + 1][mask]# color = colors[classId%len(colors)]# Comment the above line and uncomment the two lines below to generate different instance colorscolorIndex = random.randint(0, len(colors) - 1)color = colors[colorIndex]frame[top:bottom + 1, left:right + 1][mask] = ([0.3 * color[0], 0.3 * color[1], 0.3 * color[2]] + 0.7 * roi).astype(np.uint8)# Draw the contours on the imagemask = mask.astype(np.uint8)contours, hierarchy = cv.findContours(mask, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)cv.drawContours(frame[top:bottom + 1, left:right + 1], contours, -1, color, 3, cv.LINE_8, hierarchy, 100)# For each frame, extract the bounding box and mask for each detected object
def postprocess(boxes, masks):# Output size of masks is NxCxHxW where# N - number of detected boxes# C - number of classes (excluding background)# HxW - segmentation shapenumClasses = masks.shape[1]  # 90numDetections = boxes.shape[2]  # 100frameH = frame.shape[0]  # 531frameW = frame.shape[1]  # 800for i in range(numDetections):  # traverse top 100 ROIbox = boxes[0, 0, i]  # (1, 1, 100, 7) -> (7,)# array([0.        , 0.        , 0.99842095, 0.7533724 , 0.152397  , 0.92448074, 0.9131955 ], dtype=float32)mask = masks[i]  # (100, 90, 15, 15) -> (90, 15, 15)score = box[2]  # 0.99842095if score > confThreshold:classId = int(box[1])# Extract the bounding boxleft = int(frameW * box[3])top = int(frameH * box[4])right = int(frameW * box[5])bottom = int(frameH * box[6])left = max(0, min(left, frameW - 1))top = max(0, min(top, frameH - 1))right = max(0, min(right, frameW - 1))bottom = max(0, min(bottom, frameH - 1))# Extract the mask for the objectclassMask = mask[classId]# Draw bounding box, colorize and show the mask on the imagedrawBox(frame, classId, score, left, top, right, bottom, classMask)# Load names of classes
classesFile = "mscoco_labels.names"
classes = None"""
person
bicycle
car
motorcycle
airplane
bus
train
truck
boat
traffic light
fire hydrantstop sign
parking meter
bench
bird
cat
dog
horse
sheep
cow
elephant
bear
zebra
giraffebackpack
umbrellahandbag
tie
suitcase
frisbee
skis
snowboard
sports ball
kite
baseball bat
baseball glove
skateboard
surfboard
tennis racket
bottlewine glass
cup
fork
knife
spoon
bowl
banana
apple
sandwich
orange
broccoli
carrot
hot dog
pizza
donut
cake
chair
couch
potted plant
beddining tabletoilettv
laptop
mouse
remote
keyboard
cell phone
microwave
oven
toaster
sink
refrigeratorbook
clock
vase
scissors
teddy bear
hair drier
toothbrush
"""with open(classesFile, 'rt') as f:classes = f.read().rstrip('\n').split('\n')# Give the textGraph and weight files for the model
textGraph = "./mask_rcnn_inception_v2_coco_2018_01_28.pbtxt"
modelWeights = "./mask_rcnn_inception_v2_coco_2018_01_28/frozen_inference_graph.pb"# Load the network
net = cv.dnn.readNetFromTensorflow(modelWeights, textGraph)if args.device == "cpu":net.setPreferableBackend(cv.dnn.DNN_TARGET_CPU)print("Using CPU device")
elif args.device == "gpu":net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)print("Using GPU device")# Load the classes
colorsFile = "colors.txt"
with open(colorsFile, 'rt') as f:colorsStr = f.read().rstrip('\n').split('\n')# ['0 255 0', '0 0 255', '255 0 0', '0 255 255', '255 255 0', '255 0 255', '80 70 180',# '250 80 190', '245 145 50', '70 150 250', '50 190 190']colors = []  # [0,0,0]
for i in range(len(colorsStr)):rgb = colorsStr[i].split(' ')color = np.array([float(rgb[0]), float(rgb[1]), float(rgb[2])])colors.append(color)"""
[array([  0., 255.,   0.]), array([  0.,   0., 255.]), array([255.,   0.,   0.]), array([  0., 255., 255.]), 
array([255., 255.,   0.]), array([255.,   0., 255.]), array([ 80.,  70., 180.]), array([250.,  80., 190.]), 
array([245., 145.,  50.]), array([ 70., 150., 250.]), array([ 50., 190., 190.])]
"""winName = 'Mask-RCNN Object detection and Segmentation in OpenCV'
cv.namedWindow(winName, cv.WINDOW_NORMAL)outputFile = "mask_rcnn_out_py.avi"
if (args.image):# Open the image fileif not os.path.isfile(args.image):print("Input image file ", args.image, " doesn't exist")sys.exit(1)cap = cv.VideoCapture(args.image)outputFile = args.image[:-4] + '_mask_rcnn_out_py.jpg'
elif (args.video):# Open the video fileif not os.path.isfile(args.video):print("Input video file ", args.video, " doesn't exist")sys.exit(1)cap = cv.VideoCapture(args.video)outputFile = args.video[:-4] + '_mask_rcnn_out_py.avi'
else:# Webcam inputcap = cv.VideoCapture(0)# Get the video writer initialized to save the output video
if (not args.image):vid_writer = cv.VideoWriter(outputFile, cv.VideoWriter_fourcc('M', 'J', 'P', 'G'), 28,(round(cap.get(cv.CAP_PROP_FRAME_WIDTH)), round(cap.get(cv.CAP_PROP_FRAME_HEIGHT))))while cv.waitKey(1) < 0:# Get frame from the videohasFrame, frame = cap.read()# Stop the program if reached end of videoif not hasFrame:print("Done processing !!!")print("Output file is stored as ", outputFile)cv.waitKey(3000)break# Create a 4D blob from a frame.blob = cv.dnn.blobFromImage(frame, swapRB=True, crop=False)  # (1, 3, 531, 800)# Set the input to the networknet.setInput(blob)# Run the forward pass to get output from the output layersboxes, masks = net.forward(['detection_out_final', 'detection_masks'])"""(1, 1, 100, 7)  top 100 RoI, (0, classid, score, x0, y0, x1, y1)(100, 90, 15, 15) 100 RoI, 90 classes, 15*15 feature maps size"""# Extract the bounding box and mask for each of the detected objectspostprocess(boxes, masks)# Put efficiency information.t, _ = net.getPerfProfile()label = 'Mask-RCNN Inference time for a frame : %0.0f ms' % abs(t * 1000.0 / cv.getTickFrequency())cv.putText(frame, label, (0, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))# Write the frame with the detection boxesif (args.image):cv.imwrite(outputFile, frame.astype(np.uint8));else:vid_writer.write(frame.astype(np.uint8))cv.imshow(winName, frame)

根据 bbox 的类别,取 mask 输出特征图对应类别的通道特征 classMask = mask[classId]

画 mask 的时候,先 resize 到 bbox 的大小,再借助了 cv2.findContoursdrawContours 绘制出轮廓

4、结果展示

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述


看看视频的结果

cars_mask_rcnn_out

5、涉及到的库

getPerfProfile

getPerfProfile 是 OpenCV 库中用于获取深度学习模型推理性能概况的一个函数。该函数主要用于分析模型中各层的执行时间,帮助开发者了解模型性能瓶颈和优化方向。

一、功能

getPerfProfile 函数返回一个包含模型各层执行时间的向量(或类似结构),单位通常为毫秒或秒,具体取决于函数实现和调用方式。

通过这个函数,开发者可以获取到模型推理过程中每一层所消耗的时间,进而分析哪些层是性能瓶颈,需要进一步优化。
使用场景

在使用 OpenCV 进行深度学习模型推理时,尤其是在对实时性要求较高的应用场景中,如视频处理、实时监控系统等,使用 getPerfProfile 函数可以帮助开发者评估和优化模型性能。

二、示例代码

import cv2  # 加载预训练模型  
net = cv2.dnn.readNet("model.xml", "model.bin")  # 假设有一个输入图像 blob  
blob = cv2.dnn.blobFromImage(...)  # 设置输入并进行推理  
net.setInput(blob)  
outputs = net.forward()  # 获取性能概况  
t, _ = net.getPerfProfile()  # 假设 t 是以秒为单位的时间,转换为毫秒并打印  
print("Inference time: %.2f ms" % (t * 1000.0))  # 如果需要更详细的每层时间,可以遍历 t  
# 注意:这里的 t 可能是一个向量,包含了多层的执行时间  
for layer_idx, layer_time in enumerate(t):  print(f"Layer {layer_idx}: {layer_time * 1000.0} ms")

三、注意事项

getPerfProfile 函数的返回值和单位可能因 OpenCV 的不同版本或不同的深度学习后端(如 DNN 模块支持的 TensorFlow、Caffe、PyTorch 等)而有所不同。

在使用该函数时,请确保您的 OpenCV 版本支持该功能,并仔细阅读相关文档以了解其具体用法和注意事项。

由于深度学习模型的复杂性和多样性,getPerfProfile 函数提供的性能数据仅供参考,实际的优化工作还需要结合模型的具体结构和应用场景进行。

6、参考

  • 论文解读
    【Mask RCNN】《Mask R-CNN》

  • tensorflow 代码解读
    Mask RCNN without Mask

  • OpenCV进阶(7)在 OpenCV中使用 Mask RCNN实现对象检测和实例分割

http://www.hkea.cn/news/426162/

相关文章:

  • vs2013做网站怎样制作免费网页
  • b2c网站的开发无锡网络优化推广公司
  • 网站做视频在线观看营销活动推广方案
  • wordpress多站点统计google图片搜索引擎入口
  • 麻章手机网站建设百度网盘提取码入口
  • 网站后台管理系统的重要技术指标sem竞价托管费用
  • 包头怎样做网站我想做电商怎么加入
  • 株洲企业网站建设品牌2023免费b站推广大全
  • 仿制单页面网站多少钱免费制作网站app
  • 商城网站制作网站长尾词挖掘工具
  • 夹克定制公司trinseo公司
  • 四川智能网站建设制作网站链接分析工具
  • 制作销售网站有哪些宁波网络营销推广咨询报价
  • 佛山做外贸网站服务新闻发稿平台
  • 做网站前怎么写文档域名收录
  • 中信建设有限责任公司钟宁关键词优化的方法有哪些
  • 建站之星平台优化推广网站排名
  • wordpress 网盘 插件郑州seo外包阿亮
  • 怎样建设网站首页广告营销平台
  • wordpress调起淘宝app什么叫做seo
  • 嘉兴做网站优化的公司网站维护公司
  • css层叠样式会不会影响打开网站的速度百度免费下载安装百度
  • 网站模板制作流程nba交易最新消息汇总
  • 近的网站在线客服系统网络优化工程师前景如何
  • 网站制作职业google入口
  • 广州网站 制作信科便宜网络营销软文范例500
  • 网站建设公开课长沙网站推广和优化
  • 建设网站的需求分析俄罗斯搜索引擎yandex推广入口
  • 可以做英文纵横字谜的网站搜狗网站收录入口
  • web前端开发是不是做网站百家号关键词排名优化