提示:该文章仅仅记录自己的学习过程,如有问题,请大家指教。

项目下载地址:GitHub - tensorboy/pytorch_Realtime_Multi-Person_Pose_Estimation

一、环境配置

requirements.txt ——该文件提供了需要的库

1.torch——进入官网  :Start Locally | PyTorchAn open source machine learning framework that accelerates the path from research prototyping to production deployment.https://pytorch.org/get-started/locally/根据自己电脑配置下载符合自己的pytorch

conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge

会遇到下载不了的情况——————换源

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true

2.pycocotools的安装(仅适用于windows)

通过在清华镜像源中找到适合自己的版本下载下来

镜像地址:Links for pycocotools-windows

在虚拟环境下安装:pip install 文件名

二、demo文件夹

picture_demo.py  输入图片关键点就会标注出来
web_demo.py  目前未学习

三、train文件夹

1._init_paths.py 用于实现路径的添加

2.train_Vgg19.py的学习(训练VGG19模型)

2.1从lib包中引用相关的模块

from lib.network.rtpose_vgg import get_model, use_vgg
from lib.datasets import coco, transforms, datasets
from lib.config import update_config

2.2Python中的argparse用法总结

Python中的argparse用法总结_Code小学僧的课后笔记-CSDN博客

def cli():parser = argparse.ArgumentParser(description=__doc__,formatter_class=argparse.ArgumentDefaultsHelpFormatter,)train_cli(parser)parser.add_argument('-o', '--output', default=None,help='output file')parser.add_argument('--stride-apply', default=1, type=int,help='apply and reset gradients every n batches')parser.add_argument('--epochs', default=75, type=int,help='number of epochs to train')parser.add_argument('--freeze-base', default=0, type=int,help='number of epochs to train with frozen base')parser.add_argument('--pre-lr', type=float, default=1e-4,help='pre learning rate')parser.add_argument('--update-batchnorm-runningstatistics',default=False, action='store_true',help='update batch norm running statistics')parser.add_argument('--square-edge', default=368, type=int,help='square edge of input images')parser.add_argument('--ema', default=1e-3, type=float,help='ema decay constant')parser.add_argument('--debug-without-plots', default=False, action='store_true',help='enable debug but dont plot')parser.add_argument('--disable-cuda', action='store_true',help='disable CUDA')                        parser.add_argument('--model_path', default='./network/weight/', type=str, metavar='DIR',help='path to where the model saved')                         args = parser.parse_args()# add args.deviceargs.device = torch.device('cpu')args.pin_memory = Falseif not args.disable_cuda and torch.cuda.is_available():args.device = torch.device('cuda')args.pin_memory = Truereturn args

获取模型VGG19

model = get_model('vgg19') 
def get_model(trunk='vgg19'):"""Creates the whole CPM modelArgs:trunk: string, 'vgg19' or 'mobilenet'Returns: Module, the defined model"""blocks = {}# block0 is the preprocessing stageif trunk == 'vgg19':block0 = [{'conv1_1': [3, 64, 3, 1, 1]},{'conv1_2': [64, 64, 3, 1, 1]},{'pool1_stage1': [2, 2, 0]},{'conv2_1': [64, 128, 3, 1, 1]},{'conv2_2': [128, 128, 3, 1, 1]},{'pool2_stage1': [2, 2, 0]},{'conv3_1': [128, 256, 3, 1, 1]},{'conv3_2': [256, 256, 3, 1, 1]},{'conv3_3': [256, 256, 3, 1, 1]},{'conv3_4': [256, 256, 3, 1, 1]},{'pool3_stage1': [2, 2, 0]},{'conv4_1': [256, 512, 3, 1, 1]},{'conv4_2': [512, 512, 3, 1, 1]},{'conv4_3_CPM': [512, 256, 3, 1, 1]},{'conv4_4_CPM': [256, 128, 3, 1, 1]}]elif trunk == 'mobilenet':block0 = [{'conv_bn': [3, 32, 2]},  # out: 3, 32, 184, 184{'conv_dw1': [32, 64, 1]},  # out: 32, 64, 184, 184{'conv_dw2': [64, 128, 2]},  # out: 64, 128, 92, 92{'conv_dw3': [128, 128, 1]},  # out: 128, 256, 92, 92{'conv_dw4': [128, 256, 2]},  # out: 256, 256, 46, 46{'conv4_3_CPM': [256, 256, 1, 3, 1]},{'conv4_4_CPM': [256, 128, 1, 3, 1]}]# Stage 1blocks['block1_1'] = [{'conv5_1_CPM_L1': [128, 128, 3, 1, 1]},{'conv5_2_CPM_L1': [128, 128, 3, 1, 1]},{'conv5_3_CPM_L1': [128, 128, 3, 1, 1]},{'conv5_4_CPM_L1': [128, 512, 1, 1, 0]},{'conv5_5_CPM_L1': [512, 38, 1, 1, 0]}]blocks['block1_2'] = [{'conv5_1_CPM_L2': [128, 128, 3, 1, 1]},{'conv5_2_CPM_L2': [128, 128, 3, 1, 1]},{'conv5_3_CPM_L2': [128, 128, 3, 1, 1]},{'conv5_4_CPM_L2': [128, 512, 1, 1, 0]},{'conv5_5_CPM_L2': [512, 19, 1, 1, 0]}]# Stages 2 - 6for i in range(2, 7):blocks['block%d_1' % i] = [{'Mconv1_stage%d_L1' % i: [185, 128, 7, 1, 3]},{'Mconv2_stage%d_L1' % i: [128, 128, 7, 1, 3]},{'Mconv3_stage%d_L1' % i: [128, 128, 7, 1, 3]},{'Mconv4_stage%d_L1' % i: [128, 128, 7, 1, 3]},{'Mconv5_stage%d_L1' % i: [128, 128, 7, 1, 3]},{'Mconv6_stage%d_L1' % i: [128, 128, 1, 1, 0]},{'Mconv7_stage%d_L1' % i: [128, 38, 1, 1, 0]}]blocks['block%d_2' % i] = [{'Mconv1_stage%d_L2' % i: [185, 128, 7, 1, 3]},{'Mconv2_stage%d_L2' % i: [128, 128, 7, 1, 3]},{'Mconv3_stage%d_L2' % i: [128, 128, 7, 1, 3]},{'Mconv4_stage%d_L2' % i: [128, 128, 7, 1, 3]},{'Mconv5_stage%d_L2' % i: [128, 128, 7, 1, 3]},{'Mconv6_stage%d_L2' % i: [128, 128, 1, 1, 0]},{'Mconv7_stage%d_L2' % i: [128, 19, 1, 1, 0]}]models = {}if trunk == 'vgg19':print("Bulding VGG19")models['block0'] = make_vgg19_block(block0)for k, v in blocks.items():models[k] = make_stages(list(v))class rtpose_model(nn.Module):def __init__(self, model_dict):super(rtpose_model, self).__init__()self.model0 = model_dict['block0']self.model1_1 = model_dict['block1_1']self.model2_1 = model_dict['block2_1']self.model3_1 = model_dict['block3_1']self.model4_1 = model_dict['block4_1']self.model5_1 = model_dict['block5_1']self.model6_1 = model_dict['block6_1']self.model1_2 = model_dict['block1_2']self.model2_2 = model_dict['block2_2']self.model3_2 = model_dict['block3_2']self.model4_2 = model_dict['block4_2']self.model5_2 = model_dict['block5_2']self.model6_2 = model_dict['block6_2']self._initialize_weights_norm()def forward(self, x):saved_for_loss = []out1 = self.model0(x)out1_1 = self.model1_1(out1)out1_2 = self.model1_2(out1)out2 = torch.cat([out1_1, out1_2, out1], 1)saved_for_loss.append(out1_1)saved_for_loss.append(out1_2)out2_1 = self.model2_1(out2)out2_2 = self.model2_2(out2)out3 = torch.cat([out2_1, out2_2, out1], 1)saved_for_loss.append(out2_1)saved_for_loss.append(out2_2)out3_1 = self.model3_1(out3)out3_2 = self.model3_2(out3)out4 = torch.cat([out3_1, out3_2, out1], 1)saved_for_loss.append(out3_1)saved_for_loss.append(out3_2)out4_1 = self.model4_1(out4)out4_2 = self.model4_2(out4)out5 = torch.cat([out4_1, out4_2, out1], 1)saved_for_loss.append(out4_1)saved_for_loss.append(out4_2)out5_1 = self.model5_1(out5)out5_2 = self.model5_2(out5)out6 = torch.cat([out5_1, out5_2, out1], 1)saved_for_loss.append(out5_1)saved_for_loss.append(out5_2)out6_1 = self.model6_1(out6)out6_2 = self.model6_2(out6)saved_for_loss.append(out6_1)saved_for_loss.append(out6_2)return (out6_1, out6_2), saved_for_lossdef _initialize_weights_norm(self):for m in self.modules():if isinstance(m, nn.Conv2d):init.normal_(m.weight, std=0.01)if m.bias is not None:  # mobilenet conv2d doesn't add biasinit.constant_(m.bias, 0.0)# last layer of these block don't have Reluinit.normal_(self.model1_1[8].weight, std=0.01)init.normal_(self.model1_2[8].weight, std=0.01)init.normal_(self.model2_1[12].weight, std=0.01)init.normal_(self.model3_1[12].weight, std=0.01)init.normal_(self.model4_1[12].weight, std=0.01)init.normal_(self.model5_1[12].weight, std=0.01)init.normal_(self.model6_1[12].weight, std=0.01)init.normal_(self.model2_2[12].weight, std=0.01)init.normal_(self.model3_2[12].weight, std=0.01)init.normal_(self.model4_2[12].weight, std=0.01)init.normal_(self.model5_2[12].weight, std=0.01)init.normal_(self.model6_2[12].weight, std=0.01)model = rtpose_model(models)return model

pytorch_Realtime_Multi-Person_Pose_Estimation项目学习相关推荐

  1. PHP项目学习——控件

    主要是在项目学习中总结的一些东西 动态效果 flashbar滚动条,增加动态效果,直接嵌入html中 <!--flash滚动条--><object classid="cls ...

  2. 如何自学python到做项目-总算明白如何通过项目学习python

    在学习完Python的基础知识之后,有很多朋友为自己接下来要干什么感到迷茫.不知道应该通过什么样的项目来锻炼自己编程水平和思维能力.接下来我就给大家说几个适合Python的新手项目和练手项目,Pyth ...

  3. 延大计算机文化基础课程作业,基于项目学习的大学《计算机文化基础课》教学设计...

    摘要: 从大学教育看,计算机文化已经愈来愈多地融入了各专业科研和专业课的教学过程之中.计算机教学已成为素质教育的必要组成部分,良好的信息素养是当代大学生可持续发展的重要基础平台.大学计算机文化基础课程 ...

  4. TheBeerHouse 网站项目学习笔记(5)---架构设计

    前述讨论:    TheBeerHouse 网站项目学习笔记(1)----换肤技术                     TheBeerHouse 网站项目学习笔记(2)----个性化管理      ...

  5. 引入dubbo依赖的版本是多少_Dubbo 项目学习(四) 接口抽取以及依赖版本统一

    引言 前面的系列项目中,我们会发现有个接口是一样的,我们需要单独抽取出来,统一维护,这样可以更加高效的处理项目.同时,两个项目的maven依赖包也可以统一维护,这样有助于项目在多人协作的同时,保证项目 ...

  6. 01-Flutter移动电商实战-项目学习记录

    01-Flutter移动电商实战-项目学习记录 一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常 ...

  7. 项目学习 - 收藏集 - 掘金

    一款开源的视频直播项目 --EvilsLive - Android - 掘金 项目介绍 EvilsLive 是一个视频直播件开发工具包(SDK), 目前只支持 Android, 主要负责视频直播的采集 ...

  8. python3实战练手项目_Python0基础练手项目有哪些值得推荐?附实战项目+学习图谱...

    原标题:Python 0基础练手项目,有哪些值得推荐?附实战项目+学习图谱 刚学Python的时候,因为豆瓣帖子老沉,就写了一个顶帖脚本.就是用这个脚本,给自己的帖子顶了两年,在小组里追到了现在的女朋 ...

  9. VUE项目学习(三):win10版nginx部署vue项目

    VUE项目学习(三):win10版nginx部署vue项目 niginx的安装和启停操作参照博客:https://blog.csdn.net/qq_26666947/article/details/1 ...

  10. MongoDB+模板引擎 项目学习 ---学生档案管理

    MongoDB+模板引擎 项目学习 -学生档案管理 1 案例介绍 目标:模板引擎应用,强化node.js项目制作流程 知识点:http请求响应.数据库.模板引擎.静态资源访问 ​ 项目效果展示 2 制 ...

最新文章

  1. kettle学习笔记(二)——kettle基本使用
  2. html 传参数 菜单自动展开,【HTML5】Jquery打造竖向伸缩/展开菜单
  3. UltraEdit使用注册机激活详解
  4. Linux文本模式中文乱码
  5. 《统计学习方法》代码更新了-(github的star数5300+)
  6. 精讲Java NIO
  7. SAP CRM WebClient UI context node属性展开的执行逻辑
  8. JavaWeb学习 (二十六)————监听器(Listener)学习(二)
  9. 一. kafka 入门
  10. 链表在java中的应用_Java链表
  11. 从表象到本质,包你一文看懂NFT
  12. Cookie的path和diamon
  13. 2020浙江省赛打铁记
  14. 华硕ac68u无线最佳设置_华硕AC86U,AC88U的掉线、断流问题何时彻底解决?
  15. java中输出语句println()和print()的区别
  16. 专升本高数学习总结——无穷级数
  17. C++小病毒(VS版)
  18. 安装好kali后必做的5件事
  19. 利用计算机实现音乐节拍的实时自动跟踪,基于自适应白化音乐节拍实时跟踪算法.doc...
  20. python七大神级插件_Python常用插件之BeautifulSoup4使用

热门文章

  1. linux 查找内容与行号
  2. 视频图片加文字的二维码怎么做?教你在线制作二维码
  3. Fritzing软件绘制Arduino面包板接线图传感器模块库文件292
  4. MySql(六)常见单行函数
  5. fontforge制作MiniGUI的 旋转字库
  6. 关于波相位(位相)的理解
  7. 2006-11随想录
  8. 2022年汽车驾驶员(中级)考试模拟100题及答案
  9. Android 基于bmob平台的手机登录验证码注册 等功能实现
  10. 用对象存储云原生内容安全服务,放心!