准备数据集
- 了解coco数据集中标签的类别,注意在coco数据集中person的id为1而在yolo的识别中person为0
person
bicycle
car
motorbike
aeroplane
bus
train
truck
boat
traffic light
fire hydrant
stop sign
parking meter
bench
bird
cat
dog
horse
sheep
cow
elephant
bear
zebra
giraffe
backpack
umbrella
handbag
tie
suitcase
frisbee
skis
snowboard
sports ball
kite
baseball bat
baseball glove
skateboard
surfboard
tennis racket
bottle
wine glass
cup
fork
knife
spoon
bowl
banana
apple
sandwich
orange
broccoli
carrot
hot dog
pizza
donut
cake
chair
sofa
pottedplant
bed
diningtable
toilet
tvmonitor
laptop
mouse
remote
keyboard
cell phone
microwave
oven
toaster
sink
refrigerator
book
clock
vase
scissors
teddy bear
hair drier
toothbrush
- 原始文件:
datasets
|
coco
|
images
|
train2017
val2017
labels
|
train2017
val2017
- 新文件:
person_datasets
|
images
|
train2017
val2017
labels
|
train2017
val2017
- python脚本提取出只含有person的图像和标签
# coding=utf-8
import os
import shutil
# 设置原始和新数据集的路径
original_dataset_path = '/fb_isa/workspace_ym/datasets/coco/coco'
new_dataset_path = '/fb_isa/workspace_ym/person_datasets'
# 为新数据集创建目录结构
for folder in ['images/train2017', 'images/val2017', 'labels/train2017', 'labels/val2017']:
os.makedirs(os.path.join(new_dataset_path, folder), exist_ok=True)
# 复制符合条件的文件
for dataset_type in ['train2017', 'val2017']:
labels_dir = os.path.join(original_dataset_path, 'labels', dataset_type)
images_dir = os.path.join(original_dataset_path, 'images', dataset_type)
for label_file in os.listdir(labels_dir):
label_file_path = os.path.join(labels_dir, label_file)
with open(label_file_path, 'r') as file:
lines = file.readlines()
if any(line.startswith('0 ') for line in lines):
# 复制图像
image_file = label_file.replace('.txt', '.jpg')
src_image_path = os.path.join(images_dir, image_file)
dst_image_path = os.path.join(new_dataset_path, 'images', dataset_type, image_file)
shutil.copy(src_image_path, dst_image_path)
# 复制标签文件
dst_label_path = os.path.join(new_dataset_path, 'labels', dataset_type, label_file)
shutil.copy(label_file_path, dst_label_path)
- 依去除在“label”中的"train2017"和"val2017"文件夹下的所有txt文件中id不为0的行
# coding=utf-8
import os
# 指定包含 txt 文件的文件夹路径
# folder_path = '/fb_isa/workspace_ym/person_datasets/labels/val2017/'
folder_path = '/fb_isa/workspace_ym/person_datasets/labels/train2017/'
# 遍历文件夹中的所有 txt 文件
for filename in os.listdir(folder_path):
if filename.endswith('.txt'):
file_path = os.path.join(folder_path, filename)
# 读取文件内容
with open(file_path, 'r') as file:
lines = file.readlines()
# 筛选以 '0' 开头的行
filtered_lines = [line for line in lines if line.startswith('0')]
# 将筛选后的内容写回文件
with open(file_path, 'w') as file:
file.writelines(filtered_lines)
print("Processing completed.")
准备yolov5
通过git下载
git clone https://github.com/ultralytics/yolov5
源码下完后,下面开始安装Yolov5所需模块,首先输入cd进入yolov5的子目录,再输入等待安装完成。
pip install -r requirements.txt
- 在yolov5/data文件夹下新建person.yaml
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: /fb_isa/workspace_ym/person_datasets # dataset root dir
train: images/train2017 # train images (relative to 'path')
val: images/val2017 # val images (relative to 'path')
test: # test images (optional)
# Classes
nc: 1 # number of classes
names: ['person'] # class names
- 下载yolov5x的模型权重文件保存到weights/yolov5x.pt
- 修改train.py的参数
利用tmux在离开终端情况下持续训练
tmux
是一个非常有用的工具,可以在关闭命令行窗口后继续运行程序。以下是使用 tmux
的基本步骤:
-
启动 tmux:打开终端,输入
tmux
命令来启动一个新的tmux
会话。新建会话session,session-name自己命名,就会进入新建的会话窗口中。tmux new -s session-name
-
运行您的程序:在
tmux
会话中,运行想要在后台持续运行的程序。例如,如果有一个 Python 脚本,可以像平时一样在这个会话中运行它。python your_script.py
-
分离 tmux 会话:当程序开始运行后,可以分离
tmux
会话,这样即使关闭了终端窗口,程序也会继续运行。要分离会话,请按下Ctrl
+B
然后立即按下D
。这会将您带回原始终端界面,而tmux
会话和其中的程序会在后台继续运行。 -
重新连接到 tmux 会话:如果想重新查看或与你的程序交互,可以重新连接到之前的
tmux
会话。首先,可以列出所有的tmux
会话:tmux ls
然后,可以根据会话编号或名称重新连接到特定的会话:
tmux attach-session -t [session-id]
这里的
[session-id]
是从tmux ls
命令得到的会话编号或名称。
使用 tmux
,程序可以在后台安全地运行,即使退出了 SSH 会话或关闭了终端窗口。
问题
https://blog.youkuaiyun.com/qq_42902997/article/details/109565786
https://blog.youkuaiyun.com/qq_36603177/article/details/132117549
根据这两篇博客在jupyter bitebook端配置服务器,但是拒绝访问
http://192.168.1.5:8890/