此项目是基于PaddleDetection做的红细胞形状异常检测,属于医学中目标检测类的项目。
# 1.将PaddleDetection套件进行解压,路径看具体情况。
!unzip -oq /home/aistudio/data/data102742/PaddleDetection-2.1.0.zip
此项目使用的是PaddleDetection套件,下载地址为:
github:https://github.com/PaddlePaddle/PaddleDetection(因为国外网站,访问比较慢,不太推荐);
飞桨AI Studio平台上:https://aistudio.baidu.com/aistudio/datasetdetail/102742(考虑到大部分用户访问github比较慢,故我从github上搬运过来)。
# 2.将PaddleDetection套件进行改名
!mv PaddleDetection-2.1.0 PaddleDetection
此项目使用了AI Studio平台上RBC数据集,一共有366条数据,数据是xml格式的图片标注文件。
# 1.解压数据集
!unzip -o data/data85839/RBC.zip -d PaddleDetection/dataset/
# 2.数据集文件夹改名
!mv PaddleDetection/dataset/RBC PaddleDetection/dataset/test_det
# 3.将数据集划分为训练集和验证集
import os
import random
# 类别数量
file_saved = [] # 保存数据
random.seed(2021)
# voc数据路径问题
# 根目录信息,子目录信息,files_img--该文件夹下的文件名称
for _, _, files_img in os.walk('PaddleDetection/dataset/test_det/JPEGImages'):
random.shuffle(files_img)
for _, _, files_xml in os.walk('PaddleDetection/dataset/test_det/Annotations'):
# indexs = 0
# 1.jpg
# 1.xml
for i in range(len(files_img)): # 遍历图片文件--一张一张的
for j in range(len(files_xml)):
# 匹配,与图片前缀名称一致的xml文件
# 前缀是否一致
if files_img[i][:-4] == files_xml[j][:-4]:
# 图片的相对路径 + 空格 + 标注文件的相对路径 + '\n'
# jpeg, img -- join -> jpeg/img
# JPEGImages/files_img[i]
file_maked = os.path.join('JPEGImages', files_img[i]) + ' ' + os.path.join('Annotations', files_xml[j]) + '\n'
file_saved.append(file_maked) # 每一个类别放在对应的缓存空间中
break
# example: 图片的相对路径 + 空格 + 标注文件的相对路径 + '\n'
# 训练集的划分
# 训练集占80%的数据
# 验证集/评估数据集:1-80% = 20%
Train_percent = 0.8
# train.txt保存
with open('PaddleDetection/dataset/test_det/train.txt', 'w') as f:
# int(Train_percent * len(file_saved))
# final_index = int(len(file_saved)*Train_percent) - 1
f.writelines(file_saved[:int(len(file_saved)*Train_percent)]) # 写入多行数据
print('train.txt Has Writed {0} records!'.format(len(file_saved[:int(len(file_saved)*Train_percent)])))
# eval.txt保存
with open('PaddleDetection/dataset/test_det/eval.txt', 'w') as f:
# final_index + 1 == int(len(file_saved)*Train_percent)
f.writelines(file_saved[int(len(file_saved)*Train_percent):])
print('eval.txt Has Writed {0} records!'.format(len(file_saved[int(len(file_saved)*Train_percent):])))
输出结果为:
train.txt Has Writed 274 records!
eval.txt Has Writed 69 records!
训练集样本量: 274,验证集样本量: 69
此项目使用的是ppyolo中的ppyolo_r18vd_coco.yml模型。
# 2.下载依赖库
%cd /home/aistudio/PaddleDetection/
!pip install -r requirements.txt
%cd + 路径:进入某路径下。
# 3.模型训练
%cd /home/aistudio/PaddleDetection/
!python tools/train.py -c configs/ppyolo/ppyolo_r18vd_coco.yml\
--eval\
--use_vdl True
训练最终模型精度为77.86%(0.780)。
训练过程中指令解释:
%cd /home/aistudio/PaddleDetection/
!python tools/infer.py -c configs/ppyolo/ppyolo_r18vd_coco.yml\
-o weights='output/ppyolo_r18vd_coco/model_final.pdparams'\
--infer_dir 'dataset/test_det/JPEGImages'\
--output_dir 'output'\
--draw_threshold 0.1\
--save_txt True
-o:设置或更改配置文件里的参数内容
–infer_dir:用于预测的图片文件夹路径
–output_dir:预测后结果或导出模型保存路径
–draw_threshold:可视化时分数阈值
–save_txt:是否在文件夹下将图片的预测结果保存到文本文件中
预测图其中一张:
项目最重要的一步就是训练,训练离不开调参,你得根据具体情况来调整参数。在这过程中,把Train_Reader中的batch_size、snapshot_epoch调高,LearningRate下的base_lr调低,loss越来越大。评测模型也很重要。
希望这个项目可以帮助到大家。
大家好,我是初学者,第一次做AI Studio项目,请大家多多支持。欢迎fork、喜欢、分享。本人能力有限,经验不足,若有不足,欢迎指正,谢谢大家!
我在AI Studio上获得白银等级,点亮3个徽章,来互关呀~
https://aistudio.baidu.com/aistudio/personalcenter/thirdview/691883