DL-Practise / OpenSitUp 训练自己的数据集(关键点检测)

源码

一、下载code

建立虚拟环境:conda create -n AI python = 3.8.5
激活虚拟环境:activate AI
切换路径:

e:
cd E:\xxxxxxx\OpenSitUp-main\OpenSitUp-main\Trainer

修改train.py:
1、保错与修改如下图所示:
在这里插入图片描述
主要是路径和关键点数目的修改。batch_size我改为5了
2、再次debug train.py,报错如下:
在这里插入图片描述
修改方法如图中注释:
在这里插入图片描述
注:若报错:
在这里插入图片描述
则表明报错和cuda有关,若没有安装cuda则更改如下图注释所示:
在这里插入图片描述
若安装了cuda 依旧报错,检测下载的torch版本是否是cuda系列,卸载重新安装cuda版本torch:
我的是:conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
3、新的报错:TypeError: a bytes-like object is required, not ‘str’
在这里插入图片描述
解决方法:
问题出在python3.5和Python2.7在套接字返回值解码上有区别:
python bytes和str两种类型可以通过函数encode()和decode()相互转换,
str→bytes:encode()方法。str通过encode()方法可以转换为bytes。
bytes→str:decode()方法。如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。
将line.strip().split(“,”) 改为 line.decode().strip().split(“,”),大功告成!

正确写法:(字符串转16进制)

server_reply = binascii.hexlify(s.recv(1024)).decode()
print(server_reply)

4、报错:ValueError: need at least one array to stack
在这里插入图片描述
5、报错:TypeError: train_step() missing 1 required positional argument: ‘local_rank’
在这里插入图片描述
解决方法:将62行的self.local_rank复制到64行,如下图:
在这里插入图片描述
6、报错: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
解决方法:
在AI虚拟环境中搜索libiomp5md.dll
出现两个同名文件,其中第一个是torch路径下的,第二个是虚拟环境本身路径下的,转到第二个目录下把它剪切到其他路径下备份就好(最好把路径也备份一下)。
我是新建了一个文件夹放进去了,如下图,并记录地址:
在这里插入图片描述
然后就开始训练了
在这里插入图片描述
训练过程的结果会存储在save文件夹:
在这里插入图片描述
由图可知四个关键点都清楚地检测出来了。训练速度还能接受。

特别注意:以上记录的报错并不会全部出现,视具体情况而定,不需要全部修改上诉代码。其实安装环境正确的话可能只报三四个错误!!!

二、准备自己的数据集

切换到:cd E:\xxxxxxxx\OpenSitUp-main\OpenSitUp-main\LabelTool
安装库

pip install PyQt5

(注:删除原有的txt文件,标注一批ctrl+s一批,最后标注完保存后,点x号关闭标注界面会在图片文件夹中生成相应的txt文件。)运行作者准备的数据标注工具,在win10/python 3.8.5环境下,AI虚拟环境中,运行:
python main_widget.py
在这里插入图片描述
开始标注,单击鼠标左键进行标注,右键取消上一次标注。:如下图,共标记4个关键点,标签分别是0,1,2,3(批量标注,效率很高!)
在这里插入图片描述
标注完后生成的txt文件如下图:
在这里插入图片描述
原模型用来训练计数仰卧起坐的,只需三个点,我的数据有四个点(没有截四个点的图),需要修改infer.py。

三、修改推理代码 ——infer.py

1、跳入引用的函数方法:
选中该函数,右键->Go To ->Declaration or Usages
在这里插入图片描述
即可跳到上一步该函数内容:
在这里插入图片描述
然后继续在新函数下Go To,深挖具体函数步骤,如图:
在这里插入图片描述
到达run()函数,如图:
在这里插入图片描述
2、修改如下图所示内容:
在这里插入图片描述
如下图代码,推理过程未报错,但是推理图片是空白:

import sys
import os
import importlib
import torch
from torch import nn
from DLEngine.eval_project import EvalProject
from DLEngine.modules.cfg_parse.cfg_parse import parse_cfg_file
import models
#from torchstat import stat
import data
import cv2
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
import math

############################################################
MODEL_FILE='save/keypoint_shufflenetv2_heatmap_224_1.0_3kps-20220602091429/model_24.pkl'#修改路径
CFG_FILE='cfgs/key_point/keypoint_shufflenetv2_heatmap_224_1.0_3kps.py'#修改名称
IMG_PATH='/data/image_test/'#修改测试图片路径
#IMG_PATH='/data/zhengxing/temp/key_point_images/'
############################################################

def load_pre_train_ignore_name(net, pre_train):
    if pre_train == '':
        print('the pre_train is null, skip')
        return
    else:
        print('the pre_train is %s' % pre_train)
        new_dict = {
   }
        pretrained_model = torch.load(pre_train, map_location=torch.device('cpu'))

        pre_keys = pretrained_model.keys()
        net_keys = net.state_dict().keys()
        print('net keys len:%d, pretrain keys len:%d' % (len(net_keys), len(pre_keys)))
        if len(net_keys) != len(pre_keys):
            print(
                'key lens not same, maybe the pytorch version for pretrain and net are difficent; use name load')
            for key_net in net_keys:
                strip_key_net = key_net.replace('module.', '')
                if strip_key_net not in pre_keys:
                    print('op: %s not exist in pretrain, ignore'
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值