主机系统为win10系统,显卡为4070
目录
1、conda基本指令
conda env list #查看拥有的环境文件
conda activate 虚拟环境名 #激活环境
conda deactivate 虚拟环境名 #解除环境
conda create -n your_env_name python=x.x #创建新虚拟环境
conda remove -n your_env_name --all #删除虚拟环境
###安装包
conda install 包名 #建议先进入相应的虚拟环境再进行安装,不建议全部安装在base
pip install 包名 #进入某个虚拟环境之后也可以使用pip安装包
conda remove 包名 #移除包名
conda list #查看已经安装的包
#将包更新至最新版本
conda update 包名
conda update -n 环境名 包名
2、labelme
labelme安装: https://github.com/wkentaro/labelme
labelme使用:
创建一个文件夹,在这个文件夹中创建一个文件夹(里面放images)和labels.txt;txt文件的形式如图:
打开powershell终端输入指令:
conda activate labelme
cd D:\others\no8_labelme1\ ##当前labelme路径
labelme images_2 --labels labels.txt --nodata --validatelabel exact --config '{shift_auto_shape_color: -2}'
即可对image进行标注。
3、roboflow上传数据集并生成
roboflow官网:https://app.roboflow.com/
roboflow使用需要科学上网;逐步upload、generate、export 选择yolov7 pytorch版本。
最后会生成一个zip文件,例如下图: (当然,train valid test的比例可以自己设置,一般设置82或者73开。)
里面data.yaml中的第六行label的顺序十分重要!!!十分重要!!!十分重要!!!
4、训练自己的模型
4.1 数据预处理
将上一步文件中的train和valid转入源码的data文件夹下;创建一个custom.yaml文件,内容直接复制之前的data.yaml,路径需要修改(我之前就是6个label没有直接复制,自己写,结果顺序全错了把树木识别成了水泥地)
custom.yaml文件:
#train和val文件夹位置,
train: D://PycharmProjects//yolov7-segmentation-main//data//train//images
val: D://PycharmProjects//yolov7-segmentation-main//data//valid//images
#nc为number of classes,即标记的种类的个数
nc: 6
#按以下格式将label的内容填入
names: ['bushes', 'car', 'cementfloor', 'dirtroad', 'grassland', 'tree']
------------------------------------------手动分割线 数据预处理工作完成-------------------------------------------
4.2 train
接下来开始重头戏:Train
下载本文参考链接的源码,在anaconda中配置环境 。由于版本不适配的缘故,建议在配完环境之后卸载torch和torchvision,从pytorch官网PyTorch重新安装与自己cuda适配的torch版本 ;或者在配环境之前把requirements.txt文件中的torch和torchvision注释掉。
我的显卡适配的是当前最新cuda11.8版本(30系显卡的话cuda11.7就够了,如果gpu不适配就只能用cpu训练,速度巨慢无比)
##重新安装torch
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
按照作者要求下载权重文件yolov7-seg.pt至目录下,并在当前位置打开终端,在终端中运行:
conda activate yolov7seg
#根据个人需求进行参数修改,如batch和epoch等
python segment/train.py --data data/custom.yaml --batch 8 --weights "yolov7-seg.pt" --cfg yolov7-seg.yaml --epochs 500 --name yolov7-seg --img 640 --hyp hyp.scratch-high.yaml
成功启用显卡可以看到:
如果有错误显示:AttributeError: module 'numpy' has no attribute 'int'.
`np.int` was a deprecated alias for the builtin `int`. To avoid this error in existing code, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
那么重新安装numpy
pip install numpy==1.20.3
看到GPU_mem,说明调用显卡开始工作了:
--------------------------------------------------慢慢等着训练完成吧---------------------------------------------------
4.3 训练完成
Results saved to runs\train-seg\yolov7-seg3
训练完成后生成的文件:
训练完成后,可以用自己的模型predict:
python segment/predict.py --weights "runs/train-seg/yolov7-seg3/weights/best.pt" --source "folder or video or pic"