# Pytorch_Study **Repository Path**: wlf-darkmatter/pytorch_study ## Basic Information - **Project Name**: Pytorch_Study - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-03 - **Last Updated**: 2022-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 环境说明 ### 源配置 重置所有源:删除该文件下的channels ```bash conda config --remove-key channels ``` 如果出现问题,可以修改网址的`https`为`http` 源地址: ```bash # 清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ #Conda Forge conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ #msys2(可略) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ #bioconda(可略) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ #menpo(可略) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ #pytorch #conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/ # for legacy win-64(可略) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/ conda config --set show_channel_urls yes ``` ```bash # 中科大源 conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/ conda config --set show_channel_urls yes ``` ```bash #北外源 conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/main/ #Conda Forge conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/conda-forge/ #msys2(可略) conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/msys2/ #bioconda(可略) conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/bioconda/ #menpo(可略) conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/menpo/ #pytorch conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/ # for legacy win-64(可略) conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/peterjc123/ conda config --set show_channel_urls yes ``` ### AMD台式机 台式机安装的是CUDA 11.0 安装的pytorch是通过指令 ```bash conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 # 如果指令最后有一个 -c pytorch 那就是从官网下载 #或者用pip来安装 pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html ``` 安装的 ### Mac Mac 采用的是CPU的Pytorch ```bash conda install pytorch torchvision torchaudio ``` ## 模型学习 ### ResNet32 ### YOLOX原神AI钓鱼复现 依赖库: ```bash pip install pywin32 pywinsound pyyaml pyautogui pymouse loguru opencv_python thop cython pycocotools conda install tqdm PyYAML loguru tabulate tensorboard keyboard -y cd Genshin_autofish #一定要cd到子目录中 python ./setup.py develop ``` 训练指令: ```bash python yolox_tools/train.py -f yolox/exp/yolox_tiny_fish.py -d 1 -b 8 --fp16 -o -c weight/yolox_tiny.pth #--fp16 采用混合精度训练 #-o 优先使用显存训练 #-c 选定训练结果的存放位置 ``` #### 文件夹说明 `yolox/data/*`一些数据处理操作 `yolox/data/datasets/*`其中的文件定义了各种自己要进行训练的数据集 `yolox/evaluator/*`训练时用于评估评测的工具 `yolox/model/*`模型的主体 `yolox/util/*`一些工具 #### 文件说明 `yolox/data/data_prefetcher.py`加快pytorch的数据加载 `yolox/data/dataloading.py`该模块进行数据加载,获取数据集的文件 `yolox/data/samplers.py`该模块进行抽样,批取样器 `yolox/data/datasets/mosaicdetection.py`进行马赛克操作,实现数据增强| `yolox/data/datasets/coco_classes.py`是**coco**数据集的类别 `yolox/data/datasets/coco.py`是**coco**数据集的初始化、进行数据读取。`yolox/data/datasets/datasets_wrapper.py`将处理后的数据集,进行整理和封装 `yolox_tols/train.py`该文件用来执行训练,并且通过参数形式设置训练配置 `yolox/models/darknet.py`该文件包含了主干网络Darknet53| `yolox/models/losses.py`loss函数使用了IOUloss,计算交并比 `yolox/models/network_blocks.py`网络需要调用的模块使用silu激活函数 `yolox/models/yolo_fpn.py`YOLOFPN模块。Darknet 53是此模型的默认主干。调用Darknet 53作为主干网络 `yolox/models/yolo_head.py`本模块有三个操作:decoupled head,Multi positives,SimOTA `yolox/models/yolo_pafpn.py`另一个主干网络,backbone-YOLOPAFPN。PA指的是PANet的结构,FPN指的是特征金字塔结构。 `yolox/models/yolox.py`,YOLOX模型模块。调用之前的主干网络和组件,模块列表由create_yolov3_modules函数定义。网络在训练期间从三个YOLO层返回损耗值,以及测试期间的检测结果。 `yolox/util/metric.py`读取显卡的使用情况 #### 数据集 `/fish-dataset/annotations/fish_p2_75+jam.json`是训练标注,同时作为验证标注 #### 模块说明 ##### `mosaicdetection`模块 **mosaic**数据增强则利用了四张图片,对四张图片进行拼接,每一张图片都有其对应的框框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框框,然后我们将这样一张新的图片传入到神经网络当中去学习,相当于一下子传入四张图片进行学习了。 > 论文中说这极大丰富了检测物体的背景!且在标准化BN计算的时候一下子会计算四张图片的数据! 首先获得4张图片,进行`Mosaic`增强 然后再随机选一张进行`mixup`增强 1. 首先在模板图中指定一个分界点xc和yc 2. 对原图进行缩放,并计算每一个数据图的缩放尺度,可以理解为大小缩放到刚好能嵌入到模板图的子块(h,w)中 3. 把四张图片的内容复制到模板图中,模板图的大小为(2h,2w)。由于分界点是随机的,因此原图也许不能够全部放进来,或者放进来后边缘有空白,所以还计算了偏差值 4. 根据偏差值和缩放比例把数据集中的标注同步转换过来,并对标注数据的边缘限制,如果标注数据超过了模板的边缘,则限制在模板中 5. 引用了data_augment.py文件中的random_perspective函数,对图像进行各种变换(缩放,旋转,平移,斜切,透视) 6. 加入了mixup功能,把多张图片叠加在一起 ## 更新说明 ### 1.0 添加了工程文件,在各个机器上(AMD台式机、intel笔记本、mac)安装了环境 #### 1.0.1 添加了关于Tensor的基础使用示例 #### 1.0.2 添加了关于Tensor的进阶使用示例 #### 1.0.3 添加了自动求导的使用示例 通过sympy库对自动求导的部分进行理论验证 #### 1.0.4 添加了torch_Dataset_usage.py 以及几张二次元图片作为测试 ##### 1.0.4.1 由于python更新到了3.10导致pytorch也更新了,但是torchvision没有更新,所以报错 这时候需要重新安装pytorch #### 1.0.5 尝试添加了有关transforms的预处理函数 实现了其中的随机裁剪功能,但是对于处理的数据结构是PIL还是ndarray还是Tensor不太清楚 #### 1.0.6 2021年12月14日 考完试了,继续学习transforms部分 更新了transforms.RandomRotation, transforms.RandomHorizontalFlip, transforms.RandomVerticalFlip, transforms.RandomResizedCrop, transforms.RandomCrop, transforms.CenterCrop 这几个函数,对PIL格式的图像类型有了一定了解 #### 1.0.7 2021年12月15日 添加了几个transforms内的函数 开始学习模型建立的基本步骤 #### 1.0.8 2021年12月17日 初步建立了两个类,第一个类用来给出常用的nn.Module层的作用,第二个类还没写,主要用来实验系统的训练 #### 1.0.9 2021年12月19日 今天什么都没有做 ### 1.1 2021年12月20日 今天要好好学习,把模型和训练都仔仔细细学一下 #### 1.1.1 完成了线性变换层的几个细节示例代码 二维卷积层, 输入的尺度是(N, C_in,H,W),输出尺度(N,C_out,H_out,W_out)的计算方式: $$ out(N_i, C_{out_j})=\\ bias(C_{out_j}) +\sum^{C_{in}-1}_{k=0}weight(C_{out_j},k)\bigotimes input(N_i,k) $$ 完成了二维卷积的几个细节示例代码 #### 1.1.2 学习池化层 完成了最大池化层的学习示例代码 #### 1.1.3 完成了一个简单完整模型的正向实例 TODO: 通过一个成熟的模型学习反向传播 #### 1.1.4 发现ResNet18和ResNet34这些模型都在`torchvision.models`中已经有了。 开始学习ResNet34 ResNet34的结构为 ![img](readme.assets/2205958-20201111152450014-1899858439.png) ### 1.2 配置完成了远端服务器 现在可以在任何能连接外网的网络环境下通过自己的跳板机服务器连接到在宇航楼的主机A了 映射地址方式为 0.0.0.0:1213 -> 47.99.207.206:525 -> localhost_A:22 花费了一天时间查询ssh的TCP通讯协议并通过修改环境变量改变了AUTOSSH工具的端口管理服务 #### 1.2.0 用了一天时间看完了论文 [Deep Residual Learning for Image Recognition.pdf](ResNet模型学习/Deep Residual Learning for Image Recognition.pdf) 残差网络不是通过相减来获取残差,而是通过shortcut连接使得训练的输出是残差,以此来加速训练 可以联想到数值分析中 高斯法矩阵迭代里面的加速迭代。 对于一个简单的层级: $$ y=\mathcal{H}(x,\{W_i\}) $$ 当$\mathcal{H}(x,\{W_i\})=\mathcal{F}(x,\{W_i\})$时,就是普通的网络训练模型,如果层次多了的话就会遇到梯度消失的情况。 当$\mathcal{H}(x,\{W_i\}) =\mathcal{F}(x,\{W_i\})+x$时,$\mathcal{F}$这一可训练部分就变成了$\mathcal{H}-x$,他的输出值相对输入的$x$更小。 目前不清楚具体是为什么,但是直观上感觉有种作差分计算的样子。 ###### 补充部分关于计算量的tips 对于**卷积层**,其计算量为 $$ (2\times C_{i} \times K^{2}-1)\times H\times W\times C_{o} $$ 其中,$C_i$为输入通道数,$K$为核大小,$H$和$W$为输出特征图的尺寸,$C_o$为输出通道数 ###### tips 学会使用torch.nn.Sequential来创建堆叠层 学会使用子Module来批量创建子block #### 1.2.1 完成了ResNet34的设计 学习了权值初始化流程 看了 kaiming 正态分布、kaiming 均匀分布、Xavier 正态分布、Xavier 均匀分布 实现了整个前向传播的计算 #### 1.2.2 学习原神AI钓鱼,今天一定要实现! 该部分需要安装以下库: cython scikit-image loguru tabulate tqdm pywin32 PyAutoGUI PyYAML>=5.3.1 opencv_python keyboard Pillow pymouse #### 1.2.3 2022年1月5日 看懂了yolox训练部分的逻辑代码,达到了会训练会修改训练过程中因为配置原因产生的Bug 会调用服务器进行训练 会修改yolox中训练的参数 看明白了yolox训练过程中的masic数据增强模块 #### 1.2.4 看懂了简单的DQN强化学习控制模块,看明白了钓鱼训练部分的仿真环境构件 对torch类的一些用法更加了解了。