学习神经网络,还是死跟着一个老师,换了不同课程,不同答案,就很烦。
初学YOLOV5
我是跟着下面这个进行的。
建议大家跟着一条路学到黑
一定要记住自己的Anaconda安装在那里了,我安装在G盘,先g:,然后cd anaconda,
由于最开始的时候,下载Anaconda时候我没有把该选上全选上,我重新安装了下Anaconda。
确实用处挺大的,学到了不少。
小土堆
搞完了以后,学了一星期的李沐,但是难度太大了。还是直接学习小土堆的pytorch
学习小土堆,第一步还是得先把文件下了再说。我试着下载pycharm,结果发现最新版本的和他的教程不一样,索性直接使用vscode,感觉更方便。
https://pan.baidu.com/s/1CvTIjuXT4tMonG0WltF-vQ?pwd=jnnp 提取码:jnnp
Dataset实践
# 导入PyTorch中的Dataset类,用于创建自定义数据集
from torch.utils.data import Dataset
# 导入PIL库中的Image类,用于打开图片
from PIL import Image
# 导入操作系统相关的模块,用于路径操作
import os
# 定义一个叫做 myData 的类,继承自 Dataset 类
class myData(Dataset):
# 初始化函数,当我们创建这个类的对象时会自动执行
def __init__(self, root_dir, label_dir):
# 把传入的根目录保存起来
self.root_dir = root_dir
# 把传入的标签目录(表示分类名称)保存起来
self.label_dir = label_dir
# 用 os.path.join 把根目录和标签目录组合成一个完整的路径
# 比如根目录是 "G:\\ML\\数据集\\hymenoptera_data\\train"
# 标签目录是 "ants",那么组合后就是 "G:\\ML\\数据集\\hymenoptera_data\\train\\ants"
self.path = os.path.join(self.root_dir, self.label_dir)
# 用 os.listdir 获取这个路径下的所有文件名,存储为一个列表
# 比如这个目录里有三张图片,列表可能就是 ["ant1.jpg", "ant2.jpg", "ant3.jpg"]
self.img_path = os.listdir(self.path)
# 获取某一张图片以及它的标签,当我们用 myData[idx] 访问时会自动调用这个函数
def __getitem__(self, idx):
# 根据索引 idx 获取文件名,比如 idx 是 0,那就取列表中的第一个文件名
img_name = self.img_path[idx]
# 将根目录、标签目录和图片文件名组合成图片的完整路径
# 比如根目录是 "G:\\ML\\数据集\\hymenoptera_data\\train",
# 标签目录是 "ants",文件名是 "ant1.jpg",
# 那么最终路径就是 "G:\\ML\\数据集\\hymenoptera_data\\train\\ants\\ant1.jpg"
img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)
# 用 Image.open 打开这张图片,img 是图片的数据
img = Image.open(img_item_path)
# 标签就是标签目录,比如 "ants" 或 "bees"
label = self.label_dir
# 返回图片和标签
return img, label
# 返回数据集的总长度(图片的数量),比如有 100 张图片,这个函数就返回 100
def __len__(self):
return len(self.img_path)
# 定义根目录的路径
root_dir = "G:\\ML\\数据集\\hymenoptera_data\\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
TensorBoard使用
学习TensorBoard中,记得要把终端改成CMD
(study) G:\ML>tensorboard --logdir=logs --port=6007
启动了 TensorBoard,并指定了端口 6007,可以通过浏览器访问 http://localhost:6007 来查看 TensorBoard 界面。
图像是三角形的,查看一下logs里面是不是有多个事件!!!只保留一个
# 从torch.utils.tensorboard导入SummaryWriter类,用于将数据写入TensorBoard
from torch.utils.tensorboard import SummaryWriter
# 导入NumPy库,用于处理数组
import numpy as np
# 从PIL(Python Imaging Library)导入Image类,用于图像处理
from PIL import Image
# 创建一个SummaryWriter实例,用于记录TensorBoard日志
# "logs"是存储日志文件的目录
writer = SummaryWriter("logs")
# 定义图像文件的路径
# 使用r表示原始字符串,避免转义字符
image_path = r"G:\ML\data\train\ants_image\5650366_e22b7e1065.jpg"
# 使用PIL的Image类打开图像文件
# img_PIL现在是一个PIL图像对象
img_PIL = Image.open(image_path)
# 将PIL图像对象转换为NumPy数组
# img_array现在是一个包含图像数据的数组
img_array = np.array(img_PIL)
# 将图像添加到TensorBoard
# "test"是该图像的标签,2是全局步数,dataformats指定数据格式为'高度x宽度x通道'
writer.add_image("test", img_array, 2, dataformats='HWC')
# 使用for循环向TensorBoard添加标量数据
# 在这个循环中,x的值从0到99
for i in range(100):
# 将当前循环的索引i作为标量值添加到TensorBoard
# "y=x"是该标量的标签,i是标量的值
writer.add_scalar("y=x", i, i)
# 关闭SummaryWriter,确保所有日志数据被写入文件
# writer.close是一个方法,应该调用以完成写入
writer.close()
# 从torchvision库导入transforms模块,用于对图像进行转换
from torchvision import transforms
# 导入PIL库的Image类,用于图像处理
from PIL import Image
# 定义图像文件的路径,使用原始字符串格式避免转义字符问题
img_path = r"hymenoptera_data\train\ants\0013035.jpg"
# 使用PIL的Image类打开图像文件
# img是一个PIL图像对象,它代表我们加载的图片
img = Image.open(img_path)
# 创建一个SummaryWriter实例,用于记录TensorBoard日志
# "logs"是存储日志文件的目录
writer = SummaryWriter("logs")
# 定义一个将图像转换为Tensor的转换操作
# ToTensor会将图像转换为一个PyTorch的张量(即多维数组),并将像素值从0-255缩放到0-1
tensor_trans = transforms.ToTensor()
# 将PIL图像转换为Tensor格式
# tensor_img现在是一个包含图像数据的张量,适用于PyTorch模型和TensorBoard可视化
tensor_img = tensor_trans(img)
# 将Tensor格式的图像添加到TensorBoard
# "Tensor_img"是该图像的标签,用于区分不同的图像数据
writer.add_image("Tensor_img", tensor_img)
# 关闭SummaryWriter,确保所有日志数据被写入文件
writer.close()