数据处理参考:https://blog.csdn.net/Clay_Zhang/article/details/107079762
<annotation>
<frame>000005frame>
<object>
<name>holothurianname>
<bndbox>
<xmin>865xmin>
<ymin>87ymin>
<xmax>1029xmax>
<ymax>182ymax>
bndbox>
object>
<object>
<name>echinusname>
<bndbox>
<xmin>1130xmin>
<ymin>286ymin>
<xmax>1260xmax>
<ymax>399ymax>
bndbox>
object>
YOLOV5:https://github.com/ultralytics/yolov5
注意:pytorch版本必须是torch1.6否则模型跑不起来,yolov5使用了1.6版本才有的新的激活函数。
ps: pytorch最新的稳定版本1.7貌似今天发布了,支持cuda11 *
在data目录下写仿照coco.yaml写自己的配置文件
# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/
# Train command: python train.py --data voc.yaml
# Default dataset location is next to /yolov5:
# /parent_folder
# /VOC
# /yolov5
# download command/URL (optional)
#download: bash data/scripts/get_voc.sh
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./data/train.txt # train images
val: ./data/test.txt # test images
# number of classes
nc: 4
# class names
names: ['holothurian', 'echinus', 'scallop', 'starfish']
train对应的是训练集的图片位置
val对应的是验证集图片位置
例如这样的:
./images/000001.jpg
./images/000002.jpg
./images/000003.jpg
nc:对应是分类数目
names:分类对应的名字
在models目录下修改自己的模型文件,这里我们用的是yolov5s这个模型:
# parameters
nc: 4 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
# anchors
anchors:
- [10,13, 16,30, 33,23] # P3/8
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32
# YOLOv5 backbone
backbone:
# [from, number, module, args]
[[-1, 1, Focus, [64, 3]], # 0-P1/2
[-1, 1, Conv, [128, 3, 2]], # 1-P2/4
[-1, 3, BottleneckCSP, [128]],
[-1, 1, Conv, [256, 3, 2]], # 3-P3/8
[-1, 9, BottleneckCSP, [256]],
[-1, 1, Conv, [512, 3, 2]], # 5-P4/16
[-1, 9, BottleneckCSP, [512]],
[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
[-1, 1, SPP, [1024, [5, 9, 13]]],
[-1, 3, BottleneckCSP, [1024, False]], # 9
]
# YOLOv5 head
head:
[[-1, 1, Conv, [512, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # cat backbone P4
[-1, 3, BottleneckCSP, [512, False]], # 13
[-1, 1, Conv, [256, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 4], 1, Concat, [1]], # cat backbone P3
[-1, 3, BottleneckCSP, [256, False]], # 17 (P3/8-small)
[-1, 1, Conv, [256, 3, 2]],
[[-1, 14], 1, Concat, [1]], # cat head P4
[-1, 3, BottleneckCSP, [512, False]], # 20 (P4/16-medium)
[-1, 1, Conv, [512, 3, 2]],
[[-1, 10], 1, Concat, [1]], # cat head P5
[-1, 3, BottleneckCSP, [1024, False]], # 23 (P5/32-large)
[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
]
这里只需要修改nc一个参数就可以跑起来了
python train.py --data coco.yaml --cfg yolov5s.yaml --weights ‘’ --batch-size 64
yolov5m 40
yolov5l 24
yolov5x 16
在24G泰坦显卡上能跑起来的batch_size大小,最小模型跑的300 epoch时间大概是18个小时。
在泰坦显卡上测试集12000张图片,耗时191s
从检测结果上看,还是有很多不足的,例如海胆漏检了。YoLov5优点速度快!速度快!速度快!缺点对小目标检测准确度不高。
训练完后识别
python detect.py --weights ./runs/exp7/weights/best.pt --source D:/cmpt/flyai/test-A-image/000002.jpg --save
weights指定的是训练权重的路径, source指定的是图片的路径,或者是图片文件夹路径, save后图片保存在inference/output这个文件夹下
数据增强是个好方法!!!,
水下照片偏绿,使用颜色矫正,估计分还可以再上一些
比赛结束了才看到凯明大神的暗通道去雾算法,暗通道去雾
使用yolov5s模型最终模型大小14M,应该说是非常适合部署在嵌入式开发设备里面了,月末流量不足,我就不传代码和权重文件了,需要的话可以留言或者邮箱[email protected]
提示:这里填写该问题的具体解决方案:
例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()。