当前位置: 首页 > news >正文

图片分类: 多类别

    最近需要训练一个有200多类的图片分类网络,搜了一遍,发现居然没有很合适用的开源项目,于是自己简单撸了一个轮子,项目地址: https://github.com/xuduo35/imgcls_pytorch。支持如下backbone:

  • alexnet
  • resnet18,resnet34,resnet50,resnet101, resnet152, resnext101_32x4d, resnext101_64x4d
  • vgg11_bn, vgg16_bn
  • densenet121, densenet169, densenet161
  • inceptionv3, inceptionv4, inceptionresnetv2, bninception
  • xception, xception_att
  • dpn98, dpn107, dpn131
  • senet154, se_resnet50, se_resnet101, se_resnet152, se_resnext50_32x4d
  • pnasnet5large
  • polynet
  • efficientnet

    使用简便,第一步是按如下格式准备数据集,

  • your_dataset_directory
    • class1
      • 1.jpg
      • 2.jpg
    • class2
      • 1.jpg
      • 2.jpg
      • ...
    • ...

    自定义一个Dataset,实现如下

class ImageFolderEx(Dataset):def __init__(self, image_dir, image_files, image_labels, classnum=1000, transform=None):self.image_dir = image_dirself.image_files = image_filesself.image_labels = image_labelsself.classnum = classnumself.transform = transformdef __len__(self):return len(self.image_files)def __getitem__(self, index):image_name = os.path.join(self.image_dir, self.image_files[index])  image = cv2.imread(image_name)image = image[:,:,::-1]image = Image.fromarray(image)label = self.image_labels[index]if self.transform:image = self.transform(image)onehot = [0]*self.classnumonehot[label] = 1return (image, np.array(onehot).astype(np.float32))   

    支持简单的余弦退火学习率调度器

    scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer,T_max=args.epochs, eta_min=0.00001, last_epoch=-1)

    一方面执行简单的数据增广

            transforms.Compose([transforms.RandomRotation([-13,13]),transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5),transforms.Resize(args.imgsz+32),transforms.RandomCrop(args.imgsz),transforms.ToTensor(),normalize])

    另外再按照一定比例执行cutmix和mixup增广

    cutmix = v2.CutMix(num_classes=len(classes))mixup = v2.MixUp(num_classes=len(classes))cutmix_or_mixup = v2.RandomChoice([cutmix, mixup])

    训练命令example

CUDA_VISIBLE_DEVICES=0 python3 -u train.py --backbone resnet101 --classnum 270 --workers 32 --lr=0.001 --epochs 30 --train_bs 160 --datadir your_dataset_directory

    简单的基于gradio的demo, app.py模型路径要简单调整一下

CUDA_VISIBLE_DEVICES=0 PORT=8000 python3 -u app.py

    如果训练过程,需要tensorboard显示中文,可以执行如下python指令,然后执行输出内容里的命令

python3 fixfont.py

/home/ubuntu/torch19/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc

/home/ubuntu/.cache/matplotlib

wget https://github.com/StellarCN/scp_zh/raw/master/fonts/SimHei.ttf

rm -f /home/ubuntu/.cache/matplotlib/*

cp ./SimHei.ttf /home/ubuntu/torch19/lib/python3.10/site-packages/matplotlib/mpl-data/fonts/ttf

http://www.lryc.cn/news/286887.html

相关文章:

  • python 抓包tcp数据拷贝转发
  • ubuntu 各版本图形界面和命令行切换快捷键介绍
  • 基于SpringBoot Vue博物馆管理系统
  • 关于预检请求
  • cookie in selenium 定时更新token
  • 【MIdjourney】一些材质相关的关键词
  • 递归组件怎么实现无线滚动
  • 致远OA如何开发 第十篇 数据库
  • 信息检索与数据挖掘 | (十)线性回归与逻辑回归
  • 【issue-halcon例程学习】measure_arc.hdev
  • RKE快速搭建离线k8s集群并用rancher管理界面
  • 代码随想录算法训练营第十四天|● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代
  • ❤css实用
  • web系统架构基于springCloud的各技术栈
  • 【第十五课】数据结构:堆 (“堆”的介绍+主要操作 / acwing-838堆排序 / 时间复杂度的分析 / c++代码 )
  • el-select选项过多导致页面卡顿,路由跳转卡顿
  • 信息流广告参数回传工具怎么做联调
  • matlab appdesigner系列-常用18-表格
  • 密码学的100个基本概念
  • Python中的进制转换——bin/oct/hex函数与int函数
  • RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践
  • 力扣刷题第十天 美丽塔 一
  • c# ADODB.Recordset实例调用Fields报错
  • windows和linux下SHA1,MD5,SHA256校验办法
  • 高新技术企业申报需要具备哪些条件?
  • 测试不拘一格——掌握Pytest插件pytest-random-order
  • DophineScheduler通俗版
  • 企业如何稳步开启SASE实施之路
  • 【Oracle】收集Oracle数据库内存相关的信息
  • MySQL也开始支持JavaScript了