深度学习之目标检测--Pytorch实战 1

简介: 深度学习之目标检测--Pytorch实战

一、配置环境

安装Anaconda

先检查电脑配置:NVIDIA RTX2060 + i7-10750H

我这里使用的是Windows操作系统 + 集成显卡:Inter® UHD Graphics + 独立显卡:NVIDIA RTX2060 ,以下实验基于此配置


c615a77fde054db187e5666f9f9010b3.png

安装的链接地址:Anacodan安装包官网地址https://repo.anaconda.com/archive/

这里我选择的是Anaconda3-5.2.0-Windows-x86_64,根据自己的操作系统选对应的版本,下载下来,右键管理员运行安装


ddcc7521d020408cb4526eb58438ce7b.png


Windows开始菜单管理员运行Anaconda Prompt控制台看到有base说明安装成功,输入conda --version


3aa0c2afb91a4196931f2a14e10ce2f1.png


创建项目仓库,建议不要将项目的配置环境都装在base根目录仓库下,因为每个项目的配置环境不一样,如果项目运行是一样的环境就都用一样的解释器来运行,不一样的运行环境就建立不同的仓库,命令如下:

输入conda create -n pytorch python=3.6 创建pytorch仓库,选择y进行安装

ff14bf04fc5c4893b797761a75e0c24b.png

输入:nvidia-smi 检查显卡配置


aed6e2a948654a7e9f08e1fd2b1860e5.png

安装pytorch

官网链接地址https://pytorch.org/

下拉网页,选择配置如下图,


10228d95114b44f888021f2197af59c0.png

运行命令:conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

选y确认安装,如下图。

安装过程大概10分钟

682ed3fb4c234f8bb24707381b9a9fe9.png



27146de0d3c640bdb9826d5fc671aae3.png

输入如下命令,没有报错,说明torch能正常调用显卡驱动

python
import torch
torch.cuda.is_available()

f204bba77c2b422ca8948f347bccea50.png

安装pyCharm

官网下载地址https://www.jetbrains.com/pycharm/download/#section=windows

傻瓜式安装即可,社区版和专业版都行,如果有edu邮箱的建议用一下专业版,白嫖它不香吗

新建项目如图:

Location:我选择的是E:\code\learn_pytorch

使用的虚拟环境是:E:\code\learn_pytorch\venv

Base 解释器:E:\Anaconda3-5.2.0\python.exe

683a17aaaee74554aadb26e462908b85.png

测试pyCharm能否正确解析pytorch:在控制台输入

import torch
torch.cuda.is_available()

如图,没有报错,说明解析成功


348cf9c0ac7245fca40d2f7b34995b6c.png

安装jupyter

运行Anaconda Prompt控制台,输入

conda activate pytorch
conda install nb_conda

提示输入y,等待安装大概5分钟

4afaec2ceca54ce59d88d15d1cf2804f.png

输入:jupyter notebook

368417ea45ed4fd7af372c8cc1c52bcf.png

然后会跳转网页如图:

3aadb508e0c44c059c7145f014dc1127.png

点击右边的new --> Python[conda env:pytorch],新建一个终端

fd402314d8b145c894d714e523a4496e.png

如果出现如下报错,删掉提示中的路径下的pythoncom36.dll文件即可


image.png

安装tensorboard

在Terminal中输入:

pip install tensorboard
tensorboard --logdir=logs --port=6007


d1870cb62c1348db9bb6b42ce4e0c53e.png

安装opencv

pip install opencv-python

52c9f0f9f7e24170933324197393cef2.png



二、下载数据集

蚂蚁蜜蜂/练手数据集:链接:https://pan.baidu.com/s/1jZoTmoFzaTLWh4lKBHVbEA

密码: 5suq

解压下载好的数据集,粘贴在项目里

新建项目,编写测试代码

b16d8efe62c5455385ca1b92e5bec8f6.png

三、工具类的使用

tensorboard使用

# test_tensorboard.py
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("logs")
image_path = "data/train/bees_image/16838648_415acd9e3f.jpg"
img_PIL = Image.open(image_path)
# 转换成numpy型数组
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
writer.add_image("test", img_array, 2, dataformats='HWC')
# y = x
for i in range(100):
    writer.add_scalar("y=2x", 3*i, i)
writer.close()

dcf5cf71b4fe439eb2f06d2a3a1d00e0.png

在Terminal中输入:

如果不–port=6007,就使用系统默认指定的6006端口

tensorboard --logdir=logs --port=6007


de825df388a24a24bb9a3239c142cf8d.png

openCV读取图片

# read_data.py
from torch.utils.data import Dataset
#import cv2
from PIL import Image
import os
class MyData(Dataset):
    def __init__(self, root_dir, label_dir):
        # 申明全局变量
        self.root_dir = root_dir
        self.label_dir = label_dir
        # 获取路径
        self.path = os.path.join(self.root_dir,self.label_dir)
        #获取图片列表
        self.img_path = os.listdir(self.path)
    def __getitem__(self, idx):
        # 获取对应索引位置的图片的名字
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
        # 读取图片
        img = Image.open(img_item_path)
        # 读取标签
        label = self.label_dir
        return img, label
    def __len__(self):
        return len(self.img_path)
# 读取数据集
root_dir = "dataset/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
train_dataset = ants_dataset + bees_dataset
# rename_dataset.py
import os
root_dir = "dataset/train"
target_dir = "ants_image"
img_path = os.listdir(os.path.join(root_dir, target_dir))
label = target_dir.split('_')[0]
out_dir = "ants_label"
for i in img_path:
    file_name = i.split('_')[0]
    with open(os.path.join(root_dir, out_dir, "{}.txt".format(file_name)), 'w') as f:
        f.write(label)


0cf8cb1c7c8d443d97a3f7f2d062d61b.png

2d3a7fb8062c4f769771472c9e2d710f.png


9e2954fa3eda411a99d9c8777834b0d6.png

Transforms使用

# useful_Transforms.py
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
writer = SummaryWriter("logs")
img = Image.open("images/fb93a.jpeg")
print(img)
# ToTensor的使用
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
# Normalize() 归一化
# [channel] = (input[channel] - mean[channel]) / std[channel]
print(img_tensor[0][0][0])
trans_norma = transforms.Normalize([9, 6, 3], [1, 4, 7])
img_norma = trans_norma(img_tensor)
print(img_tensor[0][0][0])
writer.add_image("Normalize", img_norma, 2)
# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)
# Compose - resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)
writer.close()
# Transforms.py
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
# tensor的数据类型
# 通过transforms.ToTensor调用
# 2.为什么需要tensor数据类型
# 绝对路径 E:\code\learn_pytorch\data\train\ants_image\0013035.jpg Windows操作系统会把 \ 当做转义字符,不推荐使用绝对路径
# 相对路径 data/train/ants_image/0013035.jpg
img_path = "data/train/ants_image/0013035.jpg"
img = Image.open(img_path)
writer = SummaryWriter("logs")
# 1.transforms该如何使用
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
writer.add_image("Tensor_image", tensor_img)
writer.close()

bcaf99ffa17043abb9d0d2801b9dd477.png


2500ec65332a4bdc8e9923fee6941b6e.png

CIFAR10公开数据集的使用

CIFAR-10是一个更接近普适物体的彩色图像数据集。CIFAR-10 是由Hinton 的学生Alex Krizhevsky 和Ilya Sutskever 整理的一个用于识别普适物体的小型数据集。一共包含10 个类别的RGB 彩色图片:飞机( airplane )、汽车( automobile )、鸟类( bird )、猫( cat )、鹿( deer )、狗( dog )、蛙类( frog )、马( horse )、船( ship )和卡车( truck )。

每个图片的尺寸为32 × 32 ,每个类别有6000个图像,数据集中一共有50000 张训练图片和10000 张测试图片。

# dataset_transforms.py
import torchvision
from torch.utils.tensorboard import SummaryWriter
dataset_transforms = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transforms, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transforms, download=True)
# print(test_set[0])
# print(test_set.classes)
#
# img, target = test_set[0]
# print(img)
# print(target)
# print(test_set.classes[3])
# img.show()
writer = SummaryWriter("logs")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set", img, i)
writer.close()

7667d9ea331445c0af878c038e3d18ca.pngbc60dce2db054ce1bce915b552d2efa7.png

DataLoader的使用

# dataloader.py
import torchvision
from torch.utils.data import DataLoader
# 准备测试数据集
from torch.utils.tensorboard import SummaryWriter
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())
test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)
#测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)
writer = SummaryWriter("logs")
for epoch in range(2):
    step =0
    for data in test_loader:
        imgs, targets = data
        writer.add_images("Epoch: {}".format(epoch), imgs, step)
        step += 1
writer.close()
shuffle=False 每次都是一样的取

bfdafe98e5d14ead9ec5aa4cdcb2ac63.png

shuffle=True  随机抽取

aca33231849a46b9948106126993433d.png


相关文章
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
54 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
10天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
29 7
|
1月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
149 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
56 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
2月前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
132 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
|
30天前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
63 2
|
1月前
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
25 1
|
30天前
|
机器学习/深度学习 算法 安全
基于深度学习的目标检测的介绍(Introduction to object detection with deep learning)
基于深度学习的目标检测的介绍(Introduction to object detection with deep learning)
25 0
|
1月前
|
机器学习/深度学习 传感器 编解码
深度学习之地球观测中的目标检测
基于深度学习的地球观测中的目标检测是将深度学习技术应用于遥感数据中以自动识别和定位目标物体的过程。这一技术迅速成为遥感领域的研究热点,主要原因在于地球观测(Earth Observation, EO)平台和遥感技术的进步带来了海量的高分辨率数据,而深度学习技术在目标检测、图像识别等任务上的显著成功为其提供了强有力的支持。
27 0
|
2月前
|
机器学习/深度学习 数据挖掘 PyTorch
🎓PyTorch深度学习入门课:编程小白也能玩转的高级数据分析术
踏入深度学习领域,即使是编程新手也能借助PyTorch这一强大工具,轻松解锁高级数据分析。PyTorch以简洁的API、动态计算图及灵活性著称,成为众多学者与工程师的首选。本文将带你从零开始,通过环境搭建、构建基础神经网络到进阶数据分析应用,逐步掌握PyTorch的核心技能。从安装配置到编写简单张量运算,再到实现神经网络模型,最后应用于图像分类等复杂任务,每个环节都配有示例代码,助你快速上手。实践出真知,不断尝试和调试将使你更深入地理解这些概念,开启深度学习之旅。
35 1

热门文章

最新文章