TMJ第二轮训练结果

Posted on Aug 17, 2024

概述

TMJ 数据收集第二轮之后的训练记录。

训练过程记录

Yolov8过程

先将数据通过 labelme2yolov8 转换成 Yolov8 训练需要的格式。

按照参数,80%作为训练集,20%作为验证集,这里说明一下,参数和比例后面都可以调节的,主要是初步看一下结果。

标记图片。

如果想看 WandB 的指标可以后面再加,想快速出结果的话,暂时把 WandB 拿掉会比较快。模型结果保存后,使用模型来对所有的图片进行分割和标记。

seg代表分割,annotated代表标记

从分割的结果看,似乎还是跟上次的问题类似,为什么呢。后面会写个总结,回顾一下这个问题。

尝试通过代码,以 labelme 的结果来做图片的裁剪,效果是不错的,为什么训练的过程里,完全没学到呢,按道理来说数据量已经不少了,100张图片还不够么。

可以看到labelme裁剪出来的结果都是好的

CNN过程

因为 Yolo 训练效果不佳,先用 labelme 的数据试一下。因为数据集不符合标准格式,需要花点时间做一下数据集。

TMJ227nn.png 通过 corp 程序,可以裁剪出 TMJ227nn_cropped_1.jpg TMJ227nn_cropped_2.jpg。

因为不确定 _1 是左还是右,按我理解,先判断成右吧,所以所有 _1 都代表右侧,_2 都代表左侧了,根据文件名前缀,TMJ227nn,第一个 n 算右侧的吧,第二个 n 算左侧的吧,所以单张图片有下面的演化关系。

TMJ227nn.png
|
TMJ227nn_cropped_1.jpg // 代表右侧为n
TMJ227nn_cropped_2.jpg // 代表左侧为n

再举几个例子。

TMJ225abab.png
|
TMJ225abab_cropped_1.jpg // 代表右侧为ab
TMJ225abab_cropped_2.jpg // 代表左侧为ab

TMJ217nab.png
|
TMJ217nab_cropped_1.jpg // 代表右侧为n
TMJ217nab_cropped_2.jpg // 代表左侧为ab

关于 CNN 的训练,因为跟之前有人工模型的图片那样,所以这次训练应该是从头训练的,或者是拿 VGG 这些去做 fine tuned,测试过程中,先用 CNN 有个稳定不错的结果之后再考虑用 VGG 等预训练完的网络。

数据还需要再整理一下,要将 n 和 ab 的分别挑出来,并且分出左右,整理出下面的文件夹和图片数量。

# tree -d
.
├── abab 
│   ├── left //左ab * 26
│   └── right //右ab * 26
├── ab_left //左ab * 8
├── ab_right //右ab * 10
├── nn 
│   ├── left //左n * 57
│   └── right //右n * 57
├── n_left //左n * 10
└── n_right //右n * 8

重新整理数据之后,可以专门挑 n_left 和 ab_left 或者 n_right 和 ab_right 的图片来做 CNN。

类别 图片数量
n_left 57+10
ab_left 26+8
n_right 57+8
ab_right 26+10

因为图片区分了n和ab之后,又区分了左右,这样会导致数据量减少,数据少意味着效果不好

虽然这样分类之后数据少,但可以试一下把模型代码跑跑看。

数据量太少了,一下子就过拟合了

数据集的问题

为了方便后面的工作,两类图片应该分开在不同的文件夹。

一些想法

如果是一张图片有左右两个部位,每个部位都评估为 N-Normal/AB-Abnormal,可否将左、右两部分图片通过翻转成为一种图片,来增加数据量呢。

总结

没有 Yolo 的情况下,数据还是比较少的,CNN 效果不好,接下来应该花点时间研究一下 Yolo 效果不佳的原因,还是希望可以通过人工标记一部分数据,然后通过 Yolo 来发现更多数据来做图片分类。