PyTorch实现新版本YOLOv1:使用ResNet18,SPP和SAM

需积分: 16 7 下载量 104 浏览量 更新于2024-12-13 收藏 36KB ZIP 举报
资源摘要信息:"new-YOLOv1_PyTorch" YOLOv1(You Only Look Once版本1)是一个流行的目标检测算法,它以其检测速度快、实时性好而闻名。在计算机视觉领域,目标检测任务需要从图像中识别出物体的位置并分类。YOLO算法将这一任务转化为一个单一的回归问题,直接在图像中预测边界框和概率。 PyTorch是由Facebook的人工智能研究团队开发的一个开源机器学习库,它支持动态计算图,能够提供简洁、直观的代码风格,同时拥有强大的GPU加速能力。PyTorch广泛应用于计算机视觉、自然语言处理等研究领域,是深度学习研究者和开发者的优选框架之一。 在本项目中,开发者提供了新版本YOLOv1的实现,使用了PyTorch框架进行构建。新版本的网络结构中包含了resnet18作为骨干网络,以及空间金字塔池化(SPP)和空间注意力模块(SAM)。SPP能够提取尺度不变的特征,而SAM则能增强网络对关键信息的注意力,这两个模块能够提升模型在不同尺度和不同场景下的性能。 在训练过程中,本项目使用了批量大小为32、基础学习率为1E-3(0.001),并且最多迭代训练160个周期(epoch)。在训练过程中,学习率会在60和90个周期时进行调整,以避免过早收敛。优化器方面,选择了随机梯度下降法(SGD),这是深度学习中常见的优化算法之一。 开发者特别指出,该项目使用了数据增强的方法,并且这部分代码是从其他项目中复制而来的。数据增强是一种提升模型泛化能力的方法,通过在训练过程中引入经过变化的图片数据,例如旋转、缩放、裁剪等,可以模拟出更多的场景,使模型能更好地适应实际应用中的各种情况。在深度学习中,数据增强被广泛用于提升模型性能和鲁棒性。 本项目的损失函数和一些辅助工具都封装在tools.py文件中,开发者鼓励用户尝试修改这些参数以改善模型性能。在机器学习中,损失函数用于评估模型预测值与真实值的差异,是训练过程中的关键组成部分。通过调整损失函数或其参数,可以优化模型的预测效果。 实验环境方面,本项目要求使用Python3.6版本,需要安装opencv-python用于图像处理,PyTorch版本为1.1.0,CUDA版本为10.0,以确保可以利用NVIDIA的GPU加速计算。 综上所述,这个新的YOLOv1项目提供了一个使用PyTorch框架构建的深度学习模型,开发者通过引入resnet18作为骨干网络并结合了SPP和SAM模块,来提高模型在目标检测任务中的准确性。此外,数据增强、学习率调整策略、损失函数的设计等都是提升模型性能的重要因素。对于那些对目标检测和深度学习感兴趣的研究人员和开发者来说,这个项目无疑是一个值得学习和探索的好资源。

Traceback (most recent call last): File "train.py", line 354, in <module> fit_one_epoch(model_train, model, yolo_loss, loss_history, optimizer, epoch, epoch_step, epoch_step_val, gen, gen_val, UnFreeze_Epoch, Cuda, save_period, save_dir) File "/hy-tmp/yolov5-pytorch-bilibili/yolov5-pytorch-bilibili/utils/utils_fit.py", line 34, in fit_one_epoch outputs = model_train(images) File "/usr/local/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl return forward_call(*input, **kwargs) File "/usr/local/miniconda3/lib/python3.8/site-packages/torch/nn/parallel/data_parallel.py", line 169, in forward return self.module(*inputs[0], **kwargs[0]) File "/usr/local/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl return forward_call(*input, **kwargs) File "/hy-tmp/yolov5-pytorch-bilibili/yolov5-pytorch-bilibili/nets/yolo.py", line 102, in forward self.h3 = self.bottlenecklstm3(P3, self.h3, self.c3) # lstm File "/usr/local/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl return forward_call(*input, **kwargs) File "/hy-tmp/yolov5-pytorch-bilibili/yolov5-pytorch-bilibili/nets/bottleneck_lstm.py", line 141, in forward new_h, new_c = self.cell(inputs, h, c) File "/usr/local/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl return forward_call(*input, **kwargs) File "/hy-tmp/yolov5-pytorch-bilibili/yolov5-pytorch-bilibili/nets/bottleneck_lstm.py", line 68, in forward y = torch.cat((x, h),1) RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! (when checking argument for argument tensors in method wrapper_cat)

2023-06-07 上传

File "E:/learning/NEW/code/yolov8/NWPU/yolov8-pytorch-master/train.py", line 548, in <module> fit_one_epoch(model_train, model, ema, yolo_loss, loss_history, eval_callback, optimizer, epoch, epoch_step, epoch_step_val, gen, gen_val, UnFreeze_Epoch, Cuda, fp16, scaler, save_period, save_dir, local_rank) File "E:\learning\NEW\code\yolov8\NWPU\yolov8-pytorch-master\utils\utils_fit.py", line 34, in fit_one_epoch outputs = model_train(images) File "D:\Anaconda3\envs\pytorch\lib\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl return forward_call(*input, **kwargs) File "D:\Anaconda3\envs\pytorch\lib\site-packages\torch\nn\parallel\data_parallel.py", line 166, in forward return self.module(*inputs[0], **kwargs[0]) File "D:\Anaconda3\envs\pytorch\lib\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl return forward_call(*input, **kwargs) File "E:\learning\NEW\code\yolov8\NWPU\yolov8-pytorch-master\nets\yolo.py", line 165, in forward self.anchors, self.strides = (x.transpose(0, 1) for x in make_anchors(x, self.stride, 0.5)) File "E:\learning\NEW\code\yolov8\NWPU\yolov8-pytorch-master\utils\utils_bbox.py", line 25, in make_anchors sy,sx = torch.meshgrid(sy, sx, indexing='ij') if TORCH_1_10 else torch.meshgrid(sy, sx) File "D:\Anaconda3\envs\pytorch\lib\site-packages\torch\functional.py", line 463, in meshgrid return _meshgrid(*tensors, indexing=indexing) File "D:\Anaconda3\envs\pytorch\lib\site-packages\torch\functional.py", line 478, in _meshgrid return _VF.meshgrid(tensors, **kwargs,indexing='ij') # type: ignore[attr-defined] TypeError: meshgrid() got multiple values for keyword argument 'indexing'

2023-05-25 上传