训练集配比 7:2:1
训练语句
./darknet detector train data/car1.data cfg/car.cfg yolov3.weights -clear
./darknet detector train data/car2.data cfg/car2.cfg yolov3.weights -clear
断点续训语句
./darknet detector train data/car1.data cfg/car.cfg .\backup\car_last.weights
测试语句
./darknet detect cfg/car.cfg car_last.weights D:\project\shipdata\car_test\20210610_144412_801-0.00.04.50.jpg
推荐训练配置 和参数修改
训练 Yolo v3:
创建yolo-obj.cfg与中相同内容的文件yolov3.cfg(或复制yolov3.cfg到yolo-obj.cfg)并:
将行批次更改为batch=64
将线细分更改为subdivisions=8
将 max_batches 行更改为 ( classes*2000),如果您训练 3 类,则设定 max_batches=6000
将行步更改为 max_batches的 80% 和 90%steps=4800,5400
将classes=80行更改为 3 层中的每个对象的数量
[yolo]层位置:
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L610
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L696
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L783
将 [ filters=255] 改为 filters=(classes + 5)x3 ,需要修改的filters 在三个[yolo]层前的[convolutional]层中
定位如下
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L603
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L689
https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L776
所以如果classes=1then 应该是filters=18. 如果classes=2那么写filters=21。
权重测试语句
如果训练在 9000 次迭代后停止,要验证之前的一些权重,请使用以下命令:
(如果您使用另一个 GitHub 存储库,则使用darknet.exe detector recall... 而不是darknet.exe detector map...)
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_8000.weights
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_9000.weights
如果您在 cfg 文件中更改了 width= 或 height=,则新的宽度和高度必须能被 32 整除。
预训练文件生成
yolov3-tiny.conv.15使用命令获取预训练的权重:darknet.exe partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
./darknet partial yolo-fastest.cfg yolo-fastest.weights yolo-fastest.conv.109 109
训练操作
根据darknet 训练语句推断yolov3一次训练需要准备的东西
./darknet detector train data/desk.data cfg/desk.cfg yolov3.weights -clear
这句话的意思是,初始权重参数为yolov3.weights 训练的结构是cfg/desk.cfg,训练的数据为 data/desk.data
那么我们再看这都是啥,需要改啥
desk.data内容如下:
classes= 1
train = data/desk_train.txt
valid = data/desk_valid.txt
names = data/desk.names
backup = backup/
backup 是权重备份和生成的路径,names 用于存储目标物体的名字,
classes指定目标检测的种类,desk_train.txt 存储训练集的jpg文件路径,desk_valid.txt存储测试集的jpg文件路径
names 文件内容:
aeroplane
bird
boat
bus
motorbike
tvmonitor