python练习/YOLOv8/深度学习 阶段学习报告

 本阶段核心目标

大幅度提升对python的使用,搭建 YOLOv8 本地开发环境,解决依赖安装与模型加载问题,实现图片目标检测,并且开始启动模型训练。

 进度总结

1. 已完成任务  

课程结尾:        卷积神经网络

图像分割实践:语义分割.UNet.DeepLab.MaskR-CNN

                  YOLO目标检测:掌握YOLO系列(v10/v9/v8/v7)

python使用练习:在哔哩哔哩中python小部落中跟随视频"python入门编程100例“完成许多python入门编程必刷训练。

 环境搭建:使用 Conda 创建虚拟环境 yolo_env,安装 Python 3.8、PyTorch、OpenCV、NumPy 等依赖库。

 依赖安装:通过配置清华源(-i https://pypi.tuna.tsinghua.edu.cn/simple)解决 pip安装超时问题,成功安装 ultralytics库。

 模型调试:解决 PytorchStreamReader failed reading zip archive错误(模型文件下载不完整),通过手动下载 yolov8n.pt并放入项目目录解决。

 基础推理:编写 Python 脚本,成功加载 YOLOv8n 模型,对示例图片(bus.jpg)进行目标检测并可视化结果。

 本地测试:将推理代码适配至本地图片,成功检测出个人图片中的物体,并保存结果图。

2. 遇到的问题与解决方案

(1)问题:模型文件 yolov8n.pt下载不完整,报错 zip archive解析失败

          解决方法:删除损坏文件,从 GitHub Releases 手动下载完整模型文件

(2)问题:PyCharm 中运行时环境路径配置错误

          解决方法:在 PyCharm 中手动设置 Python 解释器为 yolo_env环境

3.在网上寻找并已经尝试复现的代码示例

1. 图片检测

from ultralytics import YOLO

# 加载模型 
model = YOLO("yolov8n.pt")

# 检测本地图片
results = model("1111.jpg")

# 保存结果
results[0].save("11111.jpg")
print("检测完成!结果保存为 11111.jpg")

2. Python实现学生成绩的排序

功能创建一个学生成绩列表,按总分从高到低排序。
def sort_student_scores():
    # 示例数据:学生姓名和成绩(语文、数学、英语)
    students = [
        {"name": "张三", "scores": [85, 90, 78]},
        {"name": "李四", "scores": [92, 88, 95]},
        {"name": "王五", "scores": [76, 85, 80]}
    ]
    
    # 计算每个学生的总分
    for student in students:
        student["total"] = sum(student["scores"])
    
    # 按总分从高到低排序
    students_sorted = sorted(students, key=lambda x: x["total"], reverse=True)
    
    print("学生成绩按总分从高到低排序:")
    for student in students_sorted:
        print(f"{student['name']}: 总分{student['total']}, 各科{student['scores']}")

# 调用函数
sort_student_scores()

3.Python读取成绩文件实现排序

功能从一个文本文件中读取学生成绩,按总分排序后输出。

# 12. Python读取成绩文件实现排序
def read_and_sort_scores_from_file(filename="scores.txt"):
    try:
        with open(filename, "r", encoding="utf-8") as f:
            lines = f.readlines()
        
        students = []
        for line in lines:
            parts = line.strip().split(",")
            if len(parts) >= 4:  # 姓名,语文,数学,英语
                name = parts[0]
                scores = list(map(int, parts[1:]))
                students.append({"name": name, "scores": scores, "total": sum(scores)})
        
        # 按总分排序
        students_sorted = sorted(students, key=lambda x: x["total"], reverse=True)
        
        print(f"\n从文件 {filename} 读取并排序后的成绩:")
        for student in students_sorted:
            print(f"{student['name']}: 总分{student['total']}, 各科{student['scores']}")
            
    except FileNotFoundError:
        print(f"文件 {filename} 不存在,请先创建该文件。")

# 调用函数(需要先创建 scores.txt 文件)
# read_and_sort_scores_from_file()

4.统计英语文章出现最多的单词数目

功能读取一篇英文文章,统计每个单词出现的次数,找出出现次数最多的单词。

Python统计英语文章出现最多的单词数目
import re
from collections import Counter

def count_most_frequent_word(filename="article.txt"):
    try:
        with open(filename, "r", encoding="utf-8") as f:
            content = f.read().lower()  # 转为小写
        
        # 使用正则提取单词(忽略标点和数字)
        words = re.findall(r'\b[a-zA-Z]+\b', content)
        
        # 统计词频
        word_count = Counter(words)
        
        # 找出出现次数最多的单词
        most_common = word_count.most_common(1)  # 返回前1个
        
        print(f"\n从文件 {filename} 统计出的出现最多的单词:")
        if most_common:
            word, count = most_common[0]
            print(f"单词 '{word}' 出现了 {count} 次")
        else:
            print("未找到有效单词")
            
    except FileNotFoundError:
        print(f"文件 {filename} 不存在,请先创建该文件。")

调用函数
count_most_frequent_word()

5.框选图片中人物

 加载预训练的 YOLOv8 模型
model = YOLO('yolov8n.pt')

加载图片

image_path = 'E:\PythonProject1\.venv'
image = cv2.imread(image_path)

# 3. 执行目标检测
# conf=0.5 表示只保留置信度大于 50% 的检测结果
results = model(image, conf=0.5)

# 4. 遍历检测结果并绘制边界框
for result in results:
    boxes = result.boxes
    for box in boxes:
        # 获取边界框坐标 (x1, y1, x2, y2)
        x1, y1, x2, y2 = map(int, box.xyxy[0])
        
        # 获取置信度
        conf = box.conf[0]
        
        # 绘制矩形框 (绿色,线宽 2)
        cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
        
        # 在框上方添加置信度标签
        label = f"Person {conf:.2f}"
        cv2.putText(image, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

# 5. 保存或显示结果
output_path = '11people.jpg'
cv2.imwrite(output_path, image)
print(f"检测结果已保存至: {  }")

4.收获与反思

  • 收获

  • 完成了卷积神经网络.图像分割实践与YOLO目标检测的剩余课程

  • 掌握了 YOLOv8 的基础 API 使用方式。

  • 理解了 PyTorch 模型文件的加载机制与常见错误原因。
  • 学会了使用 OpenCV 进行图像与视频流的实时处理。
  • 反思

    • 初期对模型文件路径和依赖管理不够熟悉,导致多次报错。

    • 下次应先查阅官方文档或社区常见问题,避免重复踩坑。


4. 下周计划

  • 学习 YOLOv8 的训练流程,尝试用自己的数据集微调模型。

  • 优化检测结果的保存与展示方式,支持批量图片处理。

  • 探索 YOLOv8 的其他任务(如实例分割、姿态估计)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值