前言
笔者目前仍在学习阶段,本文章只为记录配置yolov7过程,以防日后忘记。
正文
各种事前准备
代码克隆与环境配置
首先在终端克隆一下代码。
git clone https://github.com/WongKinYiu/yolov7
然后先不着急安装文件夹里面的requirement.txt,先把pytorch安装一下,否则有可能会导致pytorch版本不适配树莓派(具体我也不是很懂)
进入该网站 https://download.pytorch.org/whl/torch_stable.html后,寻找自己需要的版本即可。笔者用的是cpu/torch-1.8.1-cp39-cp39-manylinux2014_aarch64.whl和cpu/torchvision-0.9.1-cp39-cp39-manylinux2014_aarch64.whl。
下载好后,运行一下安装命令。然后pytorch不出意外的话就安装好啦。
pip3 install torch-1.8.1-cp39-cp39-manylinux2014_aarch64.whl
pip3 install torchvision-0.9.1-cp39-cp39-manylinux2014_aarch64.whl
安装完pytorch之后,就可以去安装requirement.txt了。
cd yolov7
pip3 install -r requirement.txt
然后双手离开键盘泡杯咖啡吃点零食,慢慢等待进度条就好了。也许会有几个橙色的warning,不过只要没有红色应该就基本ok。
下载权重并试运行
首先先建立一个存放权重的文件夹。
mkdir weights
cd weights
然后去这个网站看一下https://github.com/WongKinYiu/yolov7/releases。先下载yolov7_training.pt,这个是预训练模型,之后训练的时候得用。
wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7_training.pt
再下载个已经训练好的模型,用来试运行。笔者一般会用yolov7.pt或者yolov7-tiny.pt。
wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt
wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-tiny.pt
下载好之后,就要开始试运行了。运行以下命令(以yolov7.pt为例)。
cd ..
python detect.py --weights weights/yolov7.pt --source inference/images
这时,有可能会出现OpenBLAS Warning : Detect OpenMP Loop and this application may hang这样的报错(我也不知道算不算报错,总之就是一种非正常状态)。ctrl+c停止运行后,执行以下命令。
export OMP_NUM_THREADS=1
再运行一次,应该问题就解决了。具体原因我也不知道。
训练模型
突然想起来,训练模型的话总不可能在树莓派训练,所以记得要按上面的步骤在训练模型的设备上重新配置yolo。
可能不同的系统会有些出入,不过大体差不多,实在不行就看看别的文章吧。
创建数据集的文件夹
首先准备datasets的文件夹。
cd yolov7
mkdir datasets
cd datasets
mkdir NAME (这里是自己的项目名称)
cd NAME
然后在NAME里面建立images、labels两个文件夹。
mkdir images
mkdir labels
随后cd分别进入这两个文件夹,建立train、val的文件夹。
mkdir train
mkdir val
再把自己的图片和标注的数据塞进去就好啦。
准备数据集
标注数据这一环,虽然很想展开说说,但是实在是要写太多了,就不在这里详细展开了,不过我用的是labelIMG这款数据标注的工具,大家可以自行搜索一下。
标注好了以后,需要在NAME文件夹里创建train_list.txt、val_list.txt两个txt文件,里面包含的是图片的路径。生成这个文件只要一个for循环就好了,给大家参考一下:
import os
files = os.listdir("./images/train")
with open("train_list.txt", 'w') as f:
for file in files:
if ".DS_" in file: # 用的是mac 所以需要这一行防止出bug
continue
path = "datasets/cone/images/train/" + file + "\n"
f.write(path)
另外,如果你是用windows电脑来训练的话,要把path那一行的“/”换成“\”,不然之后在实际训练的过程中程序会找不到数据的位置,然后报错。
配置其他文件
第一个文件:
cd yolov7/cfg/training/
在这个文件夹里你会看到有一个文件叫做yolov7.yaml,然后我们需要在现在这个位置复制它、再修改它,给它取名叫yolov7-NAME.yaml(具体什么名字可以自己定,搞得清楚就行)。
打开yolov7-NAME.yaml,看到除了注释的第一行有一个nc: 80,请把这个80改成你自己的数据类别的个数,比如2。
第二个文件:
cd yolov7/data/
在这个文件夹里你会看到有一个文件叫做coco.yaml,然后同样地,复制一个副本在这个文件夹里,随后改名叫做NAME.yaml。
打开NAME.yaml,因为要修改的相对比较多,就直接把大概的样子贴在下面了。
# COCO 2017 dataset http://cocodataset.org
# download command/URL (optional)
#download: bash ./scripts/get_coco.sh
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./datasets/NAME/train_list.txt # 118287 images
val: ./datasets/NAME/val_list.txt # 5000 images
#test: ./coco/test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794
# number of classes
nc: 2
# class names
names: ["FIRST", "SECOND"]
开始训练
终于要开始训练啦。在终端输入以下命令:
cd yolov7
python train.py --weights weights/yolov7_training.pt --cfg cfg/training/yolov7-NAME.yaml --data data/NAME.yaml --device 0 --batch-size 32 --epoch 50
其中,device表示的是gpu,我只有一个所以是0,如果有两个的话就是–device 0, 1,如果没有的话就是–device cpu。
batch-size和epoch大家按自己的需求设置就行了。
最后训练出来的结果会出现在yolov7/runs/train/的文件夹里,具体的我就不详细说啦。
总结
也没什么好总结的,祝大家都可以顺利完成自己的项目!可能会有没提到的内容,有问题的可以在下面反馈留言。