yolov3之pytorch源码解析_超详细的Pytorch版yolov3代码中文注释详解(三)

本文详细介绍了如何使用 PyTorch 实现 YOLOv3 模型进行目标检测,包括参数解析、图像预处理、模型加载、推理过程以及结果可视化。通过解析源码,读者可以深入理解 YOLOv3 的工作原理和实现细节。
摘要由CSDN通过智能技术生成

from __future__ import division

import time

import torch

import torch.nn as nn

from torch.autograd import Variable

import numpy as np

import cv2

from util import *

import argparse

import os

import os.path as osp

from darknet import Darknet

import pickle as pkl

import pandas as pd

import random

def arg_parse():

"""检测模块的参数转换"""

#创建一个ArgumentParser对象,格式: 参数名, 目标参数(dest是字典的key),帮助信息,默认值,类型

parser = argparse.ArgumentParser(description='YOLO v3 检测模型')

parser.add_argument("--images", dest = 'images', help =

"待检测图像目录",

default = "imgs", type = str) # images是所有测试图片所在的文件夹

parser.add_argument("--det", dest = 'det', help = #det保存检测结果的目录

"检测结果保存目录",

default = "det", type = str)

parser.add_argument("--bs", dest = "bs", help = "Batch size,默认为 1", default = 1)

parser.add_argument("--confidence", dest = "confidence", help = "目标检测结果置信度阈值", default = 0.5)

parser.add_argument("--nms_thresh", dest = "nms_thresh", help = "NMS非极大值抑制阈值", default = 0.4)

parser.add_argument("--cfg", dest = 'cfgfile', help =

"配置文件",

default = "cfg/yolov3.cfg", type = str)

parser.add_argument("--weights", dest = 'weightsfile', help =

"模型权重",

default = "yolov3.weights", type = str)

parser.add_argument("--reso", dest = 'reso', help =

"网络输入分辨率. 分辨率越高,则准确率越高; 反之亦然.",

default = "416", type = str)#reso输入图像的分辨率,可用于在速度与准确度之间的权衡

parser.add_argument("--scales", dest="scales", help="缩放尺度用于检测", default="1,2,3", type=str)

return parser.parse_args()# 返回转换好的结果

args = arg_parse()# args是一个namespace类型的变量,即argparse.Namespace, 可以像easydict一样使用,就像一个字典,key来索引变量的值

# Namespace(bs=1, cfgfile='cfg/yolov3.cfg', confidence=0.5,det='det', images='imgs', nms_thresh=0.4, reso='416', weightsfile='yolov3.weights')

images = args.images

batch_size = int(args.bs)

confidence = float(args.confidence)

nms_thesh = float(args.nms_thresh)

start = 0

CUDA = torch.cuda.is_available()# GPU环境是否可用

num_classes = 80# coco 数据集有80类

classes = load_classes("data/coco.names") #将类别文件载入到我们的程序中,coco.names文件中保存的是所有类别的名字,load_classes()返回一个列表classes,每个元素是一个类别的名字

#初始化网络并载入权重

print("载入神经网络...")

model = Darknet(args.cfgfile)# Darknet类中初始化时得到了网络结构和网络的参数信息,保存在net_info,module_list中

model.load_weights(args.weightsfile)# 将权重文件载入,并复制给对应的网络结构model中

print("模型加载成功.")

# 网络输入数据大小

model.net_info["height"] = args.reso # model类中net_info是一个字典。’’height’’是图片的宽高,因为图片缩放到416x416,所以宽高一样大

inp_dim = int(model.net_info["height"]) #inp_dim是网络输入图片尺寸(如

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值