Pytorchtorchvision完成Faster-rcnn目标检测demo及源码详解

更新时间:2023-06-28 15:59:52 阅读: 评论:0

Pytorchtorchvision完成Faster-rcnn⽬标检测demo及源码详解Torchvision更新到0.3.0后⽀持了更多的功能,其中新增模块detection中实现了整个faster-rcnn的功能。本博客主要讲述如何通过torchvision和pytorch使⽤faster-rcnn,并提供⼀个demo和对应代码及解析注释。
⽬录
如果你不想深⼊了解原理和训练,只想⽤Faster-rcnn做⽬标检测,请看这⾥
torchvision中Faster-rcnn接⼝
⼀个demo
使⽤⽅法
我的好兄弟歌词如果你想深⼊了解原理,并训练⾃⼰的模型
环境搭建
准备训练数据
模型训练
单张图⽚检测
效果
如果你不想深⼊了解原理和训练,只想⽤Faster-rcnn做⽬标检测,请看这⾥
torchvision中Faster-rcnn接⼝
torchvision内部集成了Faster-rcnn的模型,其接⼝和调⽤⽅式野⾮常简洁,⽬前官⽅提供resnet50+rpn在coco上训练的模型,调⽤该模型只需要⼏⾏代码:
>>> import torch
>>> import torchvision
// 创建模型,pretrained=True将下载官⽅提供的coco2017模型
>>> model = dels.detection.fasterrcnn_resnet50_fpn(pretrained=True)
>>> model.eval()
>>> x = [torch.rand(3, 300, 400), torch.rand(3, 500, 400)]
>>> predictions = model(x)
注意⽹络的输⼊x是⼀个Tensor构成的list,⽽输出prediction则是⼀个由dict构成list。prediction的长度和⽹络输⼊的list中Tensor个数相同。prediction中的每个dict包含输出的结果:
其中boxes是检测框坐标,labels是类别,scores则是置信度。
>>> predictions[0]
绿色有机蔬菜{'boxes': tensor([], size=(0, 4), grad_fn=<StackBackward>), 'labels': tensor([], dtype=torch.int64), 'scores': tensor([], grad_fn= <IndexBackward>)}
⼀个demo
如果你不想⾃⼰写读取图⽚/预处理/后处理,我这⾥有个写好的demo.py,可以跑在任何安装了pytorch1.1+和torchvision0.3+的环境下,不需要其他依赖,可以⽤来完成⽬标检测的任务。
回车换行符为了能够显⽰类别标签,我们将coco的所有类别写⼊coco_names.py
names = {'0': 'background', '1': 'person', '2': 'bicycle', '3': 'car', '4': 'motorcycle', '5': 'airplane', '6': 'bus', '7': 'train', '8': 'truck', '9':
'boat', '10': 'traffic light', '11': 'fire hydrant', '13': 'stop sign', '14': 'parking meter', '15': 'bench', '16': 'bird', '17': 'cat', '18': 'dog',
'19': 'hor', '20': 'sheep', '21': 'cow', '22': 'elephant', '23': 'bear', '24': 'zebra', '25': 'giraffe', '27': 'backpack', '28': 'umbrella', '31': 'handbag', '32': 'tie', '33': 'suitca', '34': 'frisbee', '35': 'skis', '36': 'snowboard', '37': 'sports ball', '38': 'kite', '39': 'baball bat',
'40': 'baball glove', '41': 'skateboard', '42': 'surfboard', '43': 'tennis racket', '44': 'bottle', '46': 'wine glass', '47': 'cup', '48': 'fork', '49': 'knife', '50': 'spoon', '51': 'bowl', '52': 'banana', '53': 'apple', '54': 'sandwich', '55': 'orange', '56': 'broccoli', '57': 'carrot', '58': 'hot dog', '59': 'pizza', '60': 'donut', '61': 'cake', '62': 'chair', '63': 'couch', '64': 'potted plant', '65': 'bed', '67': 'dining table', '70':
'toilet', '72': 'tv', '73': 'laptop', '74': 'mou', '75': 'remote', '76': 'keyboard', '77': 'cell phone', '78': 'microwave', '79': 'oven', '80':见面礼
'toaster', '81': 'sink', '82': 'refrigerator', '84': 'book', '85': 'clock', '86': 'va', '87': 'scissors', '88': 'teddybear', '89': 'hair drier', '90': 'toothbrush'}
然后构建⼀个可以读取图⽚并检测的demo.py
import torch
import torchvision
import argpar
import cv2
import numpy as np
import sys
sys.path.append('./')
import coco_names
import random
def get_args():
parr = argpar.ArgumentParr(description='Pytorch Faster-rcnn Detection')
parr.add_argument('image_path', type=str, help='image path')
parr.add_argument('--model', default='fasterrcnn_resnet50_fpn', help='model')
parr.add_argument('--datat', default='coco', help='model')
parr.add_argument('--score', type=float, default=0.8, help='objectness score threshold')
args = parr.par_args()
return args
def random_color():
b = random.randint(0,255)
g = random.randint(0,255)
r = random.randint(0,255)
return (b,g,r)
def main():
args = get_args()
input = []
num_class = 91
names = coco_names.names
# Model creating
print("Creating model")
model = dels.detection.__dict__[del](num_class=num_class, pretrained=True)
model = model.cuda()
model.eval()
src_img = cv2.imread(args.image_path)
img = cv2.cvtColor(src_img, cv2.COLOR_BGR2RGB)
img_tensor = torch.from_numpy(img/255.).permute(2,0,1).float().cuda()
img_tensor = torch.from_numpy(img/255.).permute(2,0,1).float().cuda()
input.append(img_tensor)
out = model(input)
boxes = out[0]['boxes']
labels = out[0]['labels']
scores = out[0]['scores']
for idx in range(boxes.shape[0]):
if scores[idx] >= args.score:给小孩的祝福语
x1, y1, x2, y2 = boxes[idx][0], boxes[idx][1], boxes[idx][2], boxes[idx][3]
name = (str(labels[idx].item()))
cv2.putText(src_img, text=name, org=(x1, y1+10), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.5, thickness=1, lineType=cv2.LINE_AA, color=(0, 0, 255))
cv2.imshow('result',src_img)
画歌词赵雷cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
运⾏命令
$ python demo.py [image path]
就能完成检测,并且不需要任何其他依赖,只需要Pytorch1.1+和torchvision0.3+。看下效果:
使⽤⽅法
我发现好像很多⼈对上⾯这个demo怎么⽤不太清楚,照着下⾯的流程做就好了:
如果你想深⼊了解原理,并训练⾃⼰的模型
这⾥提供⼀份我重构过的代码,把torchvision中的faster-rcnn部分提取出来,可以训练⾃⼰的模型(⽬前只⽀持coco),并有对应博客讲解。
Pytorch torchvision构建Faster-rcnn(⼆)----基础⽹络
询价函范文Pytorch torchvision构建Faster-rcnn(三)----RPN
Pytorch torchvision构建Faster-rcnn(四)----ROIHead
训练模型:Baidu Cloud
环境搭建
下载代码:
$ pip install -
注意:
代码要求Pytorch版本⼤于1.1.0,torchvision版本⼤于0.3.0。
如果某个依赖项通过pip安装过慢,推荐替换清华源:
准备训练数据
下载coco2017数据集,下载地址:
如果下载速度过慢,可参考博客COCO2017数据集国内下载地址
数据下载后按照如下结构放置:
coco/
2017/
annotations/
test2017/
train2017/
val2017/
模型训练
仓央嘉措情诗$ python -m torch.distributed.launch --nproc_per_node=$gpus --u_env train.py --world-size $gpus --b 4训练采⽤了Pytorch的distributedparallel⽅式,⽀持多gpu。
注意其中$gpus为指定使⽤的gpu数量,b为每个gpu上的batch_size,因此实际batch_size⼤⼩为$gpus × b。
实测当b=4,1080ti下⼤概每张卡会占⽤11G显存,请根据情况⾃⾏设定。
训练过程中每个epoch会给出⼀次评估结果,形式如下:
Average Precision  (AP) @[ IoU=0.50:0.95 | area=  all | maxDets=100 ] = 0.352
Average Precision  (AP) @[ IoU=0.50      | area=  all | maxDets=100 ] = 0.573
Average Precision  (AP) @[ IoU=0.75      | area=  all | maxDets=100 ] = 0.375
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.207
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.387
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.448
Average Recall    (AR) @[ IoU=0.50:0.95 | area=  all | maxDets=  1 ] = 0.296
Average Recall    (AR) @[ IoU=0.50:0.95 | area=  all | maxDets= 10 ] = 0.474
Average Recall    (AR) @[ IoU=0.50:0.95 | area=  all | maxDets=100 ] = 0.498
Average Recall    (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.312
Average Recall    (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.538
Average Recall    (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.631
其中AP为准确率,AR为召回率,第⼀⾏为训练结果的mAP,第四、五、六⾏分别为⼩/中/⼤物体对应的mAP
单张图⽚检测
$ python detect.py --model_path result/model_13.pth --image_path imgs/1.jpg
model_path为模型路径,image_path为测试图⽚路径。
代码⽂件夹中asts给出了从coco2017测试集中挑选的11张图⽚测试结果。
效果

本文发布于:2023-06-28 15:59:52,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1058877.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:简历特长爱好
标签:训练   检测   代码   数据   模型   下载
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图