YOLOv5基于NAIE实现更快更精确地识别超可爱的逢坂大河

文章首发及后续更新:https://mwhls.top/2351.html
新的更新内容请到mwhls.top查看。
无图/无目录/格式错误/更多相关请到上方的文章首发页面查看。

基于NAIE平台的YOLOv5识别超超超可爱的逢坂大河

目录
1. 数据集改进
2. 改进方向
3. NAIE安装yolov5
4. 数据集导入
5. 训练代码
6. 预测代码
7. 保存
8. 保持训练不中断
9. 结果

数据集改进

  • 不同于上次的画师数据集,这次我是从第一集视频里面截了152张图的数据集。
    • 增加了侧脸/背影/上方视角/侧身视角/下方视角/背景等类型图片。
    • 精确度提高了不少。
  • 数据集下载:
    • 链接:https://pan.baidu.com/s/17zM5s6qL1FGnPhcsMyIx1A
    • 提取码:cute

改进方向

  1. 数据集数量可以再增加点,还是有些误报。
  2. 应该给预测加个阈值,有的置信度低的不应该被标记。

NAIE安装yolov5

  1. 打开模型训练,将从yolov5源码上传至NAIE。
  2. 上传权重文件至yolov5文件夹(可选,没有的话,在使用时会自动下载)
    • 下载链接可以见这篇博客:https://blog.csdn.net/ai_faker/article/details/107099907
  3. 在Yolov5文件夹打开命令行,输入pip install -r requirements.txt安装。
    • 出错:
      • 无skbuild模块:更新pip版本,pip install –upgrade pip
      • PyYAML无法安装:pip install –ignore-installed PyYAML
      • 再输入pip install -r requirements.txt可正常安装。
    • 代码自动安装requirements.txt:
      • 创建install_requirements.py:
        • import os
        • os.system(‘pip install --upgrade pip’)
        • os.system(‘pip install --ignore-installed PyYAML’)
        • os.system(‘pip install -r requirements.txt’)
      • 打开命令行,输入python install_requirements.py

数据集导入

  1. 注:NAIE上的yolov5不能像本地一样调用数据集中文件,但官方提供了moxing库,方便我们将其从数据集中copy至代码目录中。
  2. 将制作好的labels与images文件夹压缩在一起,成为Toradora.zip
  3. 将Toradora.zip上传至数据集。
    • 此时,Toradora.zip存放与Toradora数据库下的Episode1实例中,且仅此一个文件。
  4. 打开模型训练,创建download_dataset.py:
    • from naie.datasets import get_data_reference
    • import moxing as mox
    • dataset_path = get_data_reference(dataset=“Toradora”, dataset_entity=“Episode1”).get_files_paths()[0]
    • mox.file.copy(dataset_path, ‘./Toradora/toradora.zip’)
  5. 命令行运行python download_dataset.py
    • 如果提示‘NoneType’,把文件移动到其他文件夹下再试。
    • 和环境创建好时就存在的那些文件放在一起一般可以正常使用。
  6. 右键Toradora.zip,Unzip here解压它。
    • 或unzip Toradora.zip
  7. 创建Toradora.yaml文件:
    • train: …/Toradora/images/
    • val: …/Toradora/images/
    • nc: 1
    • names: [ ‘cute’ ]
  8. 此时文件目录为:
    • 根目录
      • yolov5-master
        • train.py
        • yolov5s.pt
        • requirements.txt
      • Toradora
        • images
        • labels
        • Toradora.yaml
      • requirements.txt
      • download_dataset.py
      • install_requirements.py

训练代码

  • 在根目录创建train.py文件:
    • import os
    • os.chdir(’./yolov5-master’)
    • os.system(‘python train.py --data …/Toradora/Toradora.yaml --cfg /models/yolov5s.yaml’)
  • 启动训练任务
    • 使用python train.py启动训练任务。
  • 此时文件目录为:
    • 根目录
      • yolov5-master
        • train.py
        • yolov5s.pt
        • requirements.txt
      • Toradora
        • images
        • labels
        • Toradora.yaml
        • Toradora.cache如果出现xx.jpg不存在,请删除cache文件
      • train.py
      • requirements.txt
      • download_dataset.py
      • install_requirements.py
  • 注:
    • 训练时如果报错no such a file: …/Toradora/images/AisakaTaiga (1).jpg
    • 删除数据集中的cache文件。

预测代码

  • 同上,添加detect.py代码:
    • import os
    • os.chdir(’./yolov5-master’)
    • os.system(‘python detect.py --source …/Toradora/toradora-01.mp4 --weight ./runs/train/exp5/weights/best.pt’)

保存

  • 同上,添加main.py代码。
  • 使用NAIE的模型训练功能进行训练,将结果以不包含代码的形式归档,并下载。
  • 在多次训练、测试、预测后,代码会产生大量的日志文件及模型文件,
    • 单纯使用模型打包全部代码,会产生非常大的数据量,
    • 因此仅将需要的内容压缩,并保存至输出文件夹,
    • 再进行归档,并在模型管理中下载,能减少很多的数据量。

import os
from naie.context import Context
import moxing as mox


def save_output(path, save_name):
    # path:'./yolov5-master/' + '预测/测试/训练结束时的输出目录'
    # 例:'./yolov5-master/runs/train/exp5'
    # save_name: '压缩包文件名'
    # 例:'train'
    # 将文件夹压缩成zip文件,借助NAIE的模型训练功能,输出。
    # 在模型训练结束后,进行归档,包含代码选否,生成模型包选是。
    # 将在模型管理中生成文件,待其处理成功后,下载下来。
    save_name = save_name + '.zip'
    file_path = os.path.join(path, save_name)
    print(file_path)
    os_command = 'zip -rq {0} {1}'.format(file_path, path)
    print(os_command)
    os.system(os_command)
    output_path = os.path.join(Context.get_output_path(), save_name)
    print(output_path)
    mox.file.copy(file_path, output_path)


def main():
    print('\n\nStart output...')

    # train file save
    train_path = './yolov5-master/runs/train/exp5'
    train_name = 'train'
    save_output(train_path, train_name)

    # detect file save
    detect_path = './yolov5-master/runs/detect/exp4'
    detect_name = 'detect'
    save_output(detect_path, detect_name)

    print('Output success.\n\n')


if __name__ == '__main__':
    main()

保持训练不中断

  • YOLO很难使用NAIE的模型训练服务,即便训练了也无法保存,即便加上保存代码也会因为库冲突而导致NAIE缺失。
  • 所以得使用Linux的挂起与后台命令。
  • 挂起:nohup
  • 后台:&
  • 写入日志:> log.log
  • 例:nohup python -u train.py --data ../Toradora/Toradora.yaml > log.log 2>&1 &
  • 参考:https://blog.csdn.net/jiahao1186/article/details/89537943

结果

  • 本次较高精确度的结果:http://pan-yz.chaoxing.com/preview/showpreview_598983421407461376.html?v=1620738942000
    • 特意合成了声音!
  • 上次少量数据训练的精确度极低的结果:http://pan-yz.chaoxing.com/preview/showpreview_598985573856804864.html?v=1620739102000
  • 下面是一个多人场景中的效果,在视频2:29秒,特意选了一个显腿长的时间点截的。
    • 上次的模型根本没识别出来,甚至还在前后几秒识别错误。
图1:截图截的好,身高矮不了

你可能感兴趣的:(python,模式识别,python)