最近参加文本分类的比赛,发现自己写的代码和paddle的结果差别还是很大的,我的bert代码一直过拟合,哎,先用paddle吧,毕竟是百度大佬的,如果你想快速做出来一些东西,推荐使用paddle,
这个项目是之前做过猫狗猴的图片分类,现在继续用这个数据集进行目标检测
数据集
制作VOC类型数据集,需要使用 labelImg工具(https://github.com/tzutalin/labelImg),
推荐直接使用
pip install labelImg -i https://mirror.baidu.com/pypi/simple
之后在cmd中labelImg,之后弹出界面
之后将数据集进行标注,建议先将图片放在一起,因为使用open dir会将所有图片加载进来,你就不用一个一个添加了
按w进行标注
之后进行保存,再按d进行下一张图片标注,直到所有的完成。将所有标注结果放在Annotations文件中,之后再通过代码进行train.txt数据集的创建
import os
import pandas as pd
dir_path = 'image'
imageName_list = os.listdir(dir_path)
imagePath_list = [os.path.join(dir_path, imageName) for imageName in imageName_list]
print(imageName_list)
xml_list = []
for i in imageName_list:
xml_list.append('Annotations' + '\\' + i.split('.')[0] + '.xml')
txt_list = {'image_url': imagePath_list, 'xml_url': xml_list}
result_df = pd.DataFrame(txt_list)
print(xml_list)
result_df.to_csv('train.txt', sep='\t', header=None, index=0)
paddle代码
!pip install "paddlex<=1.3.11" -i https://mirror.baidu.com/pypi/simple
# 设置使用0号GPU卡(如无GPU,执行此代码后仍然会使用CPU训练模型)
import matplotlib
matplotlib.use('Agg')
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import paddlex as pdx
from paddlex.det import transforms
train_transforms = transforms.Compose([
transforms.MixupImage(mixup_epoch=250),
transforms.RandomDistort(),
transforms.RandomExpand(),
transforms.RandomCrop(),
transforms.Resize(target_size=608, interp='RANDOM'),
transforms.RandomHorizontalFlip(),
transforms.Normalize(),
])
eval_transforms = transforms.Compose([
transforms.Resize(target_size=320, interp='CUBIC'),
transforms.Normalize(),
])
train_dataset = pdx.datasets.VOCDetection(
data_dir='',
file_list='train.txt',
label_list='label_list',
transforms=train_transforms,
shuffle=True)
num_classes = len(train_dataset.labels)
model = pdx.det.YOLOv3(num_classes=num_classes, backbone='DarkNet53')
model.train(
num_epochs=1000,
train_dataset=train_dataset,
train_batch_size=2,
learning_rate=0.001,
lr_decay_epochs=[200, 400, 600, 800],
save_interval_epochs=100,
warmup_steps=100,
save_dir='output/yolov3_darknet53')
eval_transforms = transforms.Compose([
transforms.Resize(target_size=608, interp='RANDOM'),
transforms.Normalize(),
])
import paddlex as pdx
model = pdx.load_model('output/yolov3_darknet53/epoch_100')
image_name = 'image/H_10.jpg'
result = model.predict(image_name,eval_transforms)
pdx.det.visualize(image_name, result, threshold=0.1, save_dir='./output/yolov3_darknet53')
由于只用30个数据,最后效果有点差,目前只是为了展示流程,所以大家可以按照自己想法去搭建数据集
最后结果展示,
如果需要代码以及数据集或者问题,可以qq2681707763