Datawhale — cv方向 task 1 笔记

4a6d7b9fb30342ac940a4fd76f568f1e.png

针对 cv 方向的 task 1 记录了一点教程之外的东西

教程:Datawhale 

教程里很详细,只在做的过程中几个小瞬间记录一下 (可以直接划到后面开始阅读哦)

Task 1 

Task 1 碎片化记录

1 . Task 1 学习规划

35abc3e7daab49d785f4a0e6e95b12d5.png

724bcfa45a0f4b0ebd7558d41cb66993.png

2 . 赛事官网打卡

1889fcb8c8eb45f9a3fc38e3a984b9f7.png

 3 . 教程 step 2 中进行第 2 步租用4090时点击新建会需要个人认证一下哦

 48731121f9e241f383970f26952a4c0b.png

 4 . 创建上啦

df264f9f3aae4a09ad7de31d81a3d970.png

5 . 可以使用啦

769b83822bff4712815be8d5ef996ca2.png

6 . baseline相关文件下载完成

c8a4b58fd8a847b3ad6a893b61602c48.png

6 . 看赛题

29a348f945c64e66ab70f1af4c393a9b.png

 7 . 上传结果了

37a4dba295934185b2a610607af18da8.png

等~~

3383ccd4723f45ddab05561ecbbf7d16.png

cab42a4e2b63424db93f3793a1efc5af.png

8 . 初次跑 baseline 提交代码的成绩出来啦 

6ec4bca610454809a3cd0861373f76dd.png

 

赛题纵览

教程教我们看看赛题

一般情况下,拿到一个赛题之后,我们需要明确:

1)这是一个什么场景下的赛题;

2)这个赛题要解决什么问题。

 

视频物体检测问题

       本赛题最终目标是开发一套智能识别系统,能够自动检测和分类城市管理中的违规行为。该系统应利用先进的图像处理和计算机视觉技术,通过对摄像头捕获的视频进行分析,自动准确识别违规行为,并及时向管理部门发出告警,以实现更高效的城市管理。

 

       教程中有对赛题进行剖析,在此不做过多赘述。

 

代码解析 

对这中间涉及的代码进行一些解析

 1. 下载baseline相关文件

apt install git-lfs
git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/AI_Camp5_baseline_CV.git

作用:安装 Git LFS(Large File Storage)并克隆一个 Git 仓库

实现步骤: 

  1. 安装 Git LFS:

    • 运行 apt install git-lfs 以安装 Git LFS。
    • 运行 git lfs install 以安装 Git LFS 的钩子。
  2. 克隆 Git 仓库:

    • 运行 git clone https://www.modelscope.cn/datasets/Datawhale/AI_Camp5_baseline_CV.git 以克隆仓库。

2 . baseline 内部代码

!/opt/miniconda/bin/pip install opencv-python pandas matplotlib ultralytics

在Anaconda 环境中安装四个 Python 包:opencv-pythonpandasmatplotlibultralytics

科普:

  • opencv-python: OpenCV 的 Python 接口,用于计算机视觉任务。
  • pandas: 用于数据分析的强大库。
  • matplotlib: 用于绘制图表和图形的库。
  • ultralytics: 一个轻量级的框架,用于训练和部署 YOLOv8 模型,这是一个流行的物体检测模型

    通常用于数据分析、图像处理、绘图和机器学习任务

import os, sys
import cv2, glob, json
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

      导入了Python中的几个库,为进行图像处理、数据分析和绘图等工作做了准备

!apt install zip unzip -y
!apt install unar -y

      在Linux环境中安装压缩和解压文件所需的工具

!wget "https://comp-public-prod.obs.cn-east-3.myhuaweicloud.com/dataset/2024/%E8%AE%AD%E7%BB%83%E9%9B%86%28%E6%9C%89%E6%A0%87%E6%B3%A8%E7%AC%AC%E4%B8%80%E6%89%B9%29.zip?AccessKeyId=583AINLNMLDRFK7CC1YM&Expires=1739168844&Signature=9iONBSJORCS8UNr2m/VZnc7yYno%3D" -O 训练集\(有标注第一批\).zip
!unar -q 训练集\(有标注第一批\).zip

       这段代码的目的是从指定的URL下载一个压缩文件训练集(有标注第一批).zip ,并将其解压到当前目录

!wget "https://comp-public-prod.obs.cn-east-3.myhuaweicloud.com/dataset/2024/%E6%B5%8B%E8%AF%95%E9%9B%86.zip?AccessKeyId=583AINLNMLDRFK7CC1YM&Expires=1739168909&Signature=CRsB54VqOtrzIdUHC3ay0l2ZGNw%3D" -O 测试集.zip
!unar -q 测试集.zip

      这段代码的目的是从指定的URL下载一个压缩文件测试集.zip ,并将其解压到当前目录

train_anno = json.load(open('训练集(有标注第一批)/标注/45.json', encoding='utf-8'))
train_anno[0], len(train_anno)

      加载一个名为 '训练集(有标注第一批)/标注/45.json' 的 JSON 文件,并将其内容解析为一个 Python 字典,然后尝试获取这个字典的第一个元素,并计算字典中的键值对数量

pd.read_json('训练集(有标注第一批)/标注/45.json')

       用 Pandas 库中的 read_json() 方法来读取一个 JSON 文件,并将其内容转换为 Pandas DataFrame 对象

video_path = '训练集(有标注第一批)/视频/45.mp4'
cap = cv2.VideoCapture(video_path)
while True:
    # 读取下一帧
    ret, frame = cap.read()
    if not ret:
        break
    break 

  从一个视频文件中读取并处理每一帧

步骤:

1 . 设置变量 video_path 为视频文件的路径

2 . 使用 OpenCV 的 VideoCapture 类来打开视频文件

3 . 进入一个无限循环(while True:)

     在循环内部,使用 cap.read() 方法读取视频的下一帧

     如果 ret 为 False,说明已经到达视频末尾或读取出现错误,此时使用 break 语句退出循环。

     无论何时,只要读取了一帧,就会使用第二个 break 语句立即退出循环。

由此想到,如果要显示每一帧,代码应该如下:(按 q 键退出循环)

video_path = '训练集(有标注第一批)/视频/45.mp4'
cap = cv2.VideoCapture(video_path)

while True:
    # 读取下一帧
    ret, frame = cap.read()
    
    if not ret:
        break
        
    # 显示当前帧
    cv2.imshow('Frame', frame)
    
    # 检查是否有按键按下
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

思路回来,接着跟着示例代码

frame.shape   

  frame.shape 返回这个数组的维度信息

int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) 

      获取视频文件中的总帧数

bbox = [746, 494, 988, 786]

pt1 = (bbox[0], bbox[1])
pt2 = (bbox[2], bbox[3])

color = (0, 255, 0) 
thickness = 2  # 线条粗细

cv2.rectangle(frame, pt1, pt2, color, thickness)

frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
plt.imshow(frame)   

      在图像 frame 上绘制一个绿色矩形框,并使用 Matplotlib 显示带有矩形框的图像

解释:

  • bbox: 一个列表,包含了矩形框的坐标信息。列表中的元素依次表示左上角的 x 坐标、左上角的 y 坐标、右下角的 x 坐标和右下角的 y 坐标。
  • pt1: 一个元组,表示矩形框左上角的坐标。
  • pt2: 一个元组,表示矩形框右下角的坐标。
  • color: 一个元组,表示绘制矩形框的颜色。这里使用的是绿色,表示为 (0, 255, 0),其中 0 表示蓝色通道强度,255 表示绿色通道强度,0 表示红色通道强度。
  • thickness: 一个整数,表示绘制矩形框线条的粗细程度。
  • cv2.rectangle():  OpenCV 中用于在图像上绘制矩形的函数。
  • cv2.cvtColor():  OpenCV 中用于转换图像颜色空间的函数。
  • cv2.COLOR_BGR2RGB: 颜色空间转换的标志,表示将图像从 BGR(蓝绿红)颜色空间转换为 RGB(红绿蓝)颜色空间。这是因为 OpenCV 默认使用 BGR 颜色空间,而 Matplotlib 默认使用 RGB 颜色空间。
  • plt.imshow(): Matplotlib 的一个函数,用于显示图像。
if not os.path.exists('yolo-dataset/'):
    os.mkdir('yolo-dataset/')
if not os.path.exists('yolo-dataset/train'):
    os.mkdir('yolo-dataset/train')
if not os.path.exists('yolo-dataset/val'):
    os.mkdir('yolo-dataset/val')

dir_path = os.path.abspath('./') + '/'

# 需要按照你的修改path
with open('yolo-dataset/yolo.yaml', 'w', encoding='utf-8') as up:
    up.write(f'''
path: {dir_path}/yolo-dataset/
train: train/
val: val/

names:
    0: 非机动车违停
    1: 机动车违停
    2: 垃圾桶满溢
    3: 违法经营
''')   

       创建了一个用于YOLO(You Only Look Once)目标检测模型的数据集目录结构,并写入了一个配置文件 (yolo.yaml),用于指定训练和验证数据集的位置以及类别名称

 代码解释:

  • os.path.exists('yolo-dataset/'): 检查 'yolo-dataset/' 目录是否存在。
  • os.mkdir('yolo-dataset/'): 如果 'yolo-dataset/' 目录不存在,则创建它。
  • 检查 'yolo-dataset/train' 目录是否存在。
  • 如果不存在,创建 'yolo-dataset/train' 目录。
  • 检查 'yolo-dataset/val' 目录是否存在。
  • 如果不存在,创建 'yolo-dataset/val' 目录。
  • os.path.abspath('./'): 获取当前工作目录的绝对路径。
  • + '/': 在路径后面加上斜杠,使其成为 './absolute/path/to/current/directory/' 的形式
  • open('yolo-dataset/yolo.yaml', 'w', encoding='utf-8'): 以写入模式 ('w') 打开 'yolo-dataset/yolo.yaml' 文件,并指定编码为 'utf-8'
  • with ... as up: 使用 with 语句确保文件在操作完成后被正确关闭。
  • up.write(): 写入配置文件的内容。
    • path: {dir_path}yolo-dataset/: 指定数据集的根目录。
    • train: train/: 指定训练数据集的位置。
    • val: val/: 指定验证数据集的位置。
    • names:: 指定类别名称。

       用于准备数据集以供YOLO模型训练或测试使用

train_annos = glob.glob('训练集(有标注第一批)/标注/*.json')
train_videos = glob.glob('训练集(有标注第一批)/视频/*.mp4')
train_annos.sort(); train_videos.sort();

category_labels = ["非机动车违停", "机动车违停", "垃圾桶满溢", "违法经营"]

       收集训练数据集中的标注文件和视频文件,并对它们进行排序;还定义了一个列表,包含了训练数据集中涉及的类别标签

代码解释:

  • glob.glob(): 用于查找符合特定规则的文件路径名,这里查找的是 '训练集(有标注第一批)/标注/' 目录下所有 .json 文件。
  • train_annos: 存储找到的所有标注文件的路径列表。
  • glob.glob(): 用于查找符合特定规则的文件路径名,这里查找的是 '训练集(有标注第一批)/视频/' 目录下所有 .mp4 文件。
  • train_videos: 存储找到的所有视频文件的路径列表。
  • sort(): 用于对列表中的元素进行排序。
  • category_labels: 定义了一个列表,包含了训练数据集中涉及的四个类别的标签。
for anno_path, video_path in zip(train_annos[:5], train_videos[:5]):
    print(video_path)
    anno_df = pd.read_json(anno_path)
    cap = cv2.VideoCapture(video_path)
    frame_idx = 0 
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        img_height, img_width = frame.shape[:2]
        
        frame_anno = anno_df[anno_df['frame_id'] == frame_idx]
        cv2.imwrite('./yolo-dataset/train/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.jpg', frame)

        if len(frame_anno) != 0:
            with open('./yolo-dataset/train/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.txt', 'w') as up:
                for category, bbox in zip(frame_anno['category'].values, frame_anno['bbox'].values):
                    category_idx = category_labels.index(category)
                    
                    x_min, y_min, x_max, y_max = bbox
                    x_center = (x_min + x_max) / 2 / img_width
                    y_center = (y_min + y_max) / 2 / img_height
                    width = (x_max - x_min) / img_width
                    height = (y_max - y_min) / img_height

                    if x_center > 1:
                        print(bbox)
                    up.write(f'{category_idx} {x_center} {y_center} {width} {height}\n')
        
        frame_idx += 1 

      从训练数据集中提取视频帧,并为每一帧创建对应的标注文件

代码解释:

  • zip(train_annos[:5], train_videos[:5]): 使用 zip() 将 train_annos 和 train_videos 列表的前五个元素配对,每次迭代返回一个标注文件路径和一个视频文件路径。
  • 打印当前处理的视频文件路径。
  • 使用 pd.read_json() 函数读取标注文件,并将其内容转换为 Pandas DataFrame。
  • 使用 cv2.VideoCapture() 打开视频文件。
  • 初始化帧索引。
  • 循环读取视频中的每一帧,直到 cap.read() 返回 False(表示到达视频末尾或发生错误)。
  • 获取当前帧的高度和宽度。
  • 从标注 DataFrame 中筛选出与当前帧索引相对应的标注信息。
  • 将当前帧保存为 JPEG 图像文件,文件名由标注文件名(去除扩展名)和帧索引组成。
  • 如果当前帧有标注信息,则创建一个对应的标注文件,并将每个标注的类别索引和归一化边界框坐标写入文件。
    • category_labels.index(category): 获取类别的索引。
    • 归一化边界框坐标:将边界框的中心坐标和宽高转换为相对于图像宽度和高度的比例。
    • 如果归一化后的中心坐标 x_center 大于 1,则打印边界框坐标。
    • 将类别索引和归一化的边界框坐标写入标注文件。
  • 更新帧索引。
for anno_path, video_path in zip(train_annos[-3:], train_videos[-3:]):
    print(video_path)
    anno_df = pd.read_json(anno_path)
    cap = cv2.VideoCapture(video_path)
    frame_idx = 0 
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        img_height, img_width = frame.shape[:2]
        
        frame_anno = anno_df[anno_df['frame_id'] == frame_idx]
        cv2.imwrite('./yolo-dataset/val/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.jpg', frame)

        if len(frame_anno) != 0:
            with open('./yolo-dataset/val/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.txt', 'w') as up:
                for category, bbox in zip(frame_anno['category'].values, frame_anno['bbox'].values):
                    category_idx = category_labels.index(category)
                    
                    x_min, y_min, x_max, y_max = bbox
                    x_center = (x_min + x_max) / 2 / img_width
                    y_center = (y_min + y_max) / 2 / img_height
                    width = (x_max - x_min) / img_width
                    height = (y_max - y_min) / img_height

                    up.write(f'{category_idx} {x_center} {y_center} {width} {height}\n')
        
        frame_idx += 1 

       这段代码用于从训练数据集中提取视频帧,并为每一帧创建对应的标注文件,这里是针对最后三个视频文件和对应的标注文件进行处理

代码解释:

  • zip(train_annos[-3:], train_videos[-3:]): 使用zip() 将 train_annos 和 train_videos 列表的最后三个元素配对,每次迭代返回一个标注文件路径和一个视频文件路径。

      其余代码基本同上一段

!wget http://mirror.coggle.club/yolo/yolov8n-v8.2.0.pt -O yolov8n.pt\

      从指定的 URL 下载 YOLOv8n 模型的预训练权重文件,并将其保存为本地文件 yolov8n.pt

!mkdir -p ~/.config/Ultralytics/
!wget http://mirror.coggle.club/yolo/Arial.ttf -O ~/.config/Ultralytics/Arial.ttf

      创建一个目录 ~/.config/Ultralytics/ 并下载一个字体文件 Arial.ttf 到该目录中

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

import warnings
warnings.filterwarnings('ignore')

       设置环境变量 CUDA_VISIBLE_DEVICES 为 "0",使得 CUDA 只能看到编号为 0 的 GPU 设备;忽略所有警告消息,这样在运行过程中不会看到警告输出

from ultralytics import YOLO
model = YOLO("yolov8n.pt")
results = model.train(data="yolo-dataset/yolo.yaml", epochs=2, imgsz=1080, batch=16)

        用 Ultralytics 的 YOLO 库来训练一个目标检测模型

代码解释:

  • 导入 Ultralytics 库中的 YOLO 类,用于创建和训练 YOLO 模型的主要接口。
  • 创建一个 YOLO 模型实例,使用预训练的权重文件 "yolov8n.pt"
  • 使用 model.train() 方法开始训练过程。
    • data: 指定数据配置文件的路径, "yolo-dataset/yolo.yaml",该文件包含了训练和验证数据集的位置以及类别名称等信息。
    • epochs: 指定训练的轮次, 2,意味着模型将在整个训练数据集上迭代两次。
    • imgsz: 指定输入图像的大小, 1080,这意味着模型将接收分辨率为 1080 的图像。
    • batch: 指定每批训练样本的数量, 16
category_labels = ["非机动车违停", "机动车违停", "垃圾桶满溢", "违法经营"]

if not os.path.exists('result/'):
    os.mkdir('result')

       定义了一个列表 category_labels,包含了类别标签,创建了一个名为 result/ 的目录(如果它还不存在的话)

from ultralytics import YOLO
model = YOLO("runs/detect/train/weights/best.pt")
import glob

for path in glob.glob('测试集/*.mp4'):
    submit_json = []
    results = model(path, conf=0.05, imgsz=1080,  verbose=False)
    for idx, result in enumerate(results):
        boxes = result.boxes  # Boxes object for bounding box outputs
        masks = result.masks  # Masks object for segmentation masks outputs
        keypoints = result.keypoints  # Keypoints object for pose outputs
        probs = result.probs  # Probs object for classification outputs
        obb = result.obb  # Oriented boxes object for OBB outputs

        if len(boxes.cls) == 0:
            continue
        
        xywh = boxes.xyxy.data.cpu().numpy().round()
        cls = boxes.cls.data.cpu().numpy().round()
        conf = boxes.conf.data.cpu().numpy()
        for i, (ci, xy, confi) in enumerate(zip(cls, xywh, conf)):
            submit_json.append(
                {
                    'frame_id': idx,
                    'event_id': i+1,
                    'category': category_labels[int(ci)],
                    'bbox': list([int(x) for x in xy]),
                    "confidence": float(confi)
                }
            )

    with open('./result/' + path.split('/')[-1][:-4] + '.json', 'w', encoding='utf-8') as up:
        json.dump(submit_json, up, indent=4, ensure_ascii=False)

       使用 Ultralytics 的 YOLO 库来对一系列测试视频进行目标检测,并将检测结果保存为 JSON 文件,每个 JSON 文件包含了每个帧的检测结果,包括帧索引、事件 ID、类别名称、边界框坐标和置信度

代码解释:

  • 导入 Ultralytics 库中的 YOLO 类。
  • 创建一个 YOLO 模型实例,使用预训练的权重文件 "runs/detect/train/weights/best.pt"
  • 导入 glob 模块,它用于查找符合特定规则的文件路径名列表。
  • 使用 glob.glob() 函数查找 '测试集/' 目录下所有 .mp4 文件,并对每个视频文件进行处理。
  • 初始化一个空列表 submit_json,用于存储每个视频的检测结果。
  • 使用 model() 方法对视频文件 path 进行目标检测。
    • conf=0.05: 设置置信度阈值为 0.05,即低于此阈值的目标将被忽略。
    • imgsz=1080: 设置输入图像的大小为 1080。
    • verbose=False: 不显示详细的输出信息。
  • 遍历 results 中的每一个检测结果,idx 表示结果的索引,result 包含单帧的检测信息。
  • result.boxes: 包含边界框输出的对象。
  • result.masks: 包含分割掩码输出的对象。
  • result.keypoints: 包含关键点输出的对象。
  • result.probs: 包含分类概率输出的对象。
  • result.obb: 包含定向边界框输出的对象。
  • 检查是否有检测到的目标。如果没有检测到任何目标,则跳过当前帧。
  • xywh: 包含检测到的目标的边界框坐标,形式为 [x1, y1, x2, y2]
  • cls: 包含每个目标的类别索引。
  • conf: 包含每个目标的置信度。
  • 遍历每个检测到的目标及其边界框坐标、类别索引和置信度。
  • 将检测结果添加到 submit_json 列表中,包括帧索引、事件 ID、类别名称、边界框坐标和置信度。
  • 使用 json.dump() 将 submit_json 列表保存为 JSON 文件。
    • 文件名由视频文件名(去除扩展名)组成,并保存在 ./result/ 目录下。
    • indent=4: 以缩进的方式格式化输出的 JSON 文件,便于阅读。
    • ensure_ascii=False: 允许在 JSON 文件中使用非 ASCII 字符,如中文字符。
!\rm result/.ipynb_checkpoints/ -rf
!\rm result.zip
!zip -r result.zip result/

      清理和打包文件

 

YOLO

        什么是YOLO?什么是物体检测模型?

从教程上摘了点知识:

        YOLO,全称为“You Only Look Once”(你只看一眼),是一种流行的实时目标检测系统,由Joseph Redmon等人在2015年提出。YOLO模型的核心思想是将目标检测任务视为一个单一的回归问题,通过一个卷积神经网络(CNN)直接从图像像素到边界框坐标和类别概率的映射。YOLO模型经过了多次迭代,包括YOLOv2(YOLO9000)、YOLOv3和YOLOv4等版本,每个版本都在性能和速度上有所提升,同时也引入了一些新的技术,如更深的网络结构、更好的锚框机制、多尺度特征融合等。

905cb9caeb72482d8738326b6166f5e5.png

      YOLO模型需要什么训练格式?

       YOLO使用的标注格式是每张图像一个文本文件,文件名与图像文件名相对应。文本文件中每一行对应一个边界框,格式为:<class> <x_center> <y_center> <width> <height>

       其中,<class>是类别索引,<x_center><y_center>是边界框中心点相对于图像宽度和高度的比例,<width><height>是边界框的宽度和高度相对于图像宽度和高度的比例。

2aa111fab42e4893b18eb361ae738c38.png

相关文章推荐

YOLO系列算法精讲:从yolov1至yolov8的进阶之路(2万字超全整理)-CSDN博客  

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)-CSDN博客

目标检测---教你利用yolov5训练自己的目标检测模型_目标检测 教你利用-CSDN博客

YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5、YOLOv6、YOLOv7_算法_AI小白一枚-GitCode 开源社区

Yolo系列详解-CSDN博客

       我们来使用一下YOLOv5,我是按照我推荐的文章第三篇来进行尝试的

YOLOv5的官网:ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite (github.com)

  或者

 Ultralytics/YOLOV5 在 5.0 (github.com)

 打开官网

3ebcc05f62664cc79c7440436704e575.png

 解压了

9e207ceaef8545218af798f8e3fe83cb.png

 pycharm打开

1560f628a2674675ab60c9f837b3595b.png

跟着作者去安装深度学习的环境 利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn(适合小白的保姆级教学)_将python的版本切换为paddle环境中的python插件-CSDN博客

有显卡驱动,打开看看信息 1339fa0dab224c75bc793328f7912489.png

 在此没有去更新显卡驱动

 输入:

nvidia-smi

看到驱动的版本是537.70;最高支持的CUDA版本是12.2版本

272f0596d4a24ffabbc039a53ca9b9fc.png

anaconda安装: https://www.cnblogs.com/xiaochouk/p/12081633.html

703582c15578401594134c3de2031960.png

之前下载过,跟着作者操作即可;

打开anaconda的终端

创建了一个名字叫pytorch,python是3.11版本的环境。

0bdfab6c65214393871c39cfc224bc4c.png

激活环境了

conda activate pytorch

3c60afb939c24c80b0bf47b5084de4df.png 

 跟着作者换源

258b9c6fea86492c992e0805b8a50a46.png

 打开pytorch的官网 ,根据我们电脑选择

e9512766531f46bb98ff1ed2fee79fdd.png显示  Pytorch 的官方源地址,一般情况下,如果网络连接状况不佳,从这个源下载可能速度较慢或出现不稳定的情况。之前跟着作者换清华源好像没成功

 在命令中临时指定清华源来安装

pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

882e6e06f646415e9b24b39091ff6594.png

弹出报错了

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
huggingface-hub 0.24.6 requires pyyaml>=5.1, which is not installed.
huggingface-hub 0.24.6 requires requests, which is not installed.
jupyterlab-server 2.27.3 requires requests>=2.31, which is not installed.
timm 1.0.8 requires pyyaml, which is not installed.

几个包在安装过程中出现了问题:

  1. huggingface-hub 0.24.6 需要 pyyaml>=5.1 和 requests,但这两个依赖包没有安装。
  2. jupyterlab-server 2.27.3 需要 requests>=2.31,也没有安装。
  3. timm 1.0.8 需要 pyyaml,同样未安装。

开始手动安装缺失的依赖 

pip install pyyaml

e0ba2448dc664a08be4f3df7ae9c9dab.png

 报错了

原来是在安装huggingface-hub 0.24.6时,它所依赖的requests包没有被安装,要先安装requests

pip install requests

然后再安装 pyyaml

pip install pyyaml

0ae763876dd3426b8002759eea9c675a.png

 上述手动安装缺失的依赖也可以通过使用依赖管理工具,如 pipenv 或 poetry 等依赖管理工具来管理项目的依赖

 开始paddlepaddlean环境安装

关闭终端,重新打开

创建一个新的环境名,python是3.11版本

6fa0f67b7e2540769042af35550e5906.png

 进入环境中

b146074f5e504b2c9100156c42a7289a.png

paddlepaddle官网:飞桨PaddlePaddle-源于产业实践的开源深度学习平台 

根据电脑选择

d2c8f0a7b6a24781aa50f40d44653797.png

作者是成功换源直接下载,我们试着从官网直接下

a5ca9e06bcb846dd9eef89c357d7cfaf.png

成功了

341dfd1a838c46efb463a147b06558b6.png

 或者我们也可以选择用清华源

打开清华源的 Anaconda 镜像页面

 Index of /anaconda/cloud/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

 f338fa0918994e20bde1c9358ce29ef0.png

b1c59551558542df9e8818c3103bf8c9.png

找到我们需要的了

回到正题

打开pycharm开始安装依赖

pip install -r requirements.txt

a555656e5d304f578be984a69a38d0c4.png

安装完啦

跟着作者利用labelimg标注数据和并做数据的准备

目标检测---利用labelimg制作自己的深度学习目标检测数据集-CSDN博客

开始安装labelimg

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

2018f679844e4c66826e58e177a1995d.png

报错了(太长没全截),看了一下是因为没换清华源 

在base中再次尝试换源

9d879b350eba47baa2853581ccca9086.png

这次成功了

再次安装labelimg

289b13084d434097bfb04402e0debdbc.png

成功了

题目给的训练集太大啦

关于数据集和预训练权重的准备的尝试只能留到下次再接着写了

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值