小熊飞桨练习册-06Paddlex垃圾分类,本项目开发和测试均在 Ubuntu 20.04 系统下进行。
项目最新代码查看主页:小熊飞桨练习册
百度飞桨 AI Studio 主页:小熊飞桨练习册-06Paddlex垃圾分类
Ubuntu 系统安装 CUDA 参考:Ubuntu 百度飞桨和 CUDA 的安装
| 文件 | 说明 |
|---|---|
| train.py | 训练程序 |
| quant.py | 量化程序 |
| prune.py | 裁剪程序 |
| test.py | 测试程序 |
| infer.py | 预测程序 |
| onekey.sh | 一键获取数据到 dataset 目录下 |
| onetasks.sh | 一键训练,量化脚本 |
| get_data.sh | 获取数据到 dataset 目录下 |
| check_data.sh | 检查 dataset 目录下的数据是否存在 |
| mod/args.py | 命令行参数解析 |
| mod/pdxconfig.py | PaddleX 配置 |
| mod/config.py | 配置 |
| mod/utils.py | 杂项 |
| mod/report.py | 结果报表 |
| dataset | 数据集目录 |
| output | 训练参数保存目录 |
| result | 预测结果保存目录 |
数据集来源于百度飞桨公共数据集:垃圾分类训练集
如果运行在本地计算机,下载完数据,文件放到 dataset 目录下,在项目目录下运行下面脚本。
如果运行在百度 AI Studio 环境,查看 data 目录是否有数据,在项目目录下运行下面脚本。
bash onekey.sh
可以查看修改 mod/pdxconfig.py 文件,有详细的说明
运行 train.py 文件,查看命令行参数加 -h
python3 run/train.py \
--dataset ./dataset/train \
--epochs 32 \
--batch_size 16 \
--learning_rate 0.01 \
--lr_decay_epochs "16"\
--lr_decay_gamma 0.25 \
--model MobileNetV3_large_ssld \
--pretrain_weights "IMAGENET"
-h, --help show this help message and exit
--cpu 是否使用 cpu 计算,默认使用 CUDA
--num_workers 线程数量,默认 auto,为CPU核数的一半
--epochs 训练几轮,默认 4 轮
--batch_size 一批次数量,默认 16
--learning_rate 学习率,默认 0.025
--early_stop 是否使用提前终止训练策略。默认为 False
--early_stop_patience
当使用提前终止训练策略时,如果验证集精度在early_stop_patience 个 epoch
内连续下降或持平,则终止训练。默认为 5
--save_interval_epochs
模型保存间隔(单位: 迭代轮数)。默认为 1
--log_interval_steps
训练日志输出间隔(单位:迭代次数)。默认为 10
--resume_checkpoint 恢复训练时指定上次训练保存的模型路径, 默认不会恢复训练
--save_dir 模型保存路径。默认为 ./output/
--dataset 数据集目录,默认 ./dataset/
--train_list 训练集列表,默认 '--dataset' 参数目录下的 train_list.txt
--eval_list 评估集列表,默认 '--dataset' 参数目录下的 val_list.txt
--label_list 分类标签列表,默认 '--dataset' 参数目录下的 labels.txt
--warmup_steps 默认优化器的 warmup 步数,学习率将在设定的步数内,从 warmup_start_lr
线性增长至设定的 learning_rate,默认为 0
--warmup_start_lr 默认优化器的 warmup 起始学习率,默认为 0.0
--lr_decay_epochs 默认优化器的学习率衰减轮数。默认为 30 60 90
--lr_decay_gamma 默认优化器的学习率衰减率。默认为 0.1
--use_ema 是否使用指数衰减计算参数的滑动平均值。默认为 False
--opti_scheduler 优化器的调度器,默认 auto,可选 auto,cosine,piecewise
--opti_reg_coeff 优化器衰减系数,如果 opti_scheduler 是 Cosine,默认是 4e-05,如果
opti_scheduler 是 Piecewise,默认是 1e-04
--pretrain_weights 若指定为'.pdparams'文件时,从文件加载模型权重;若为字符串’IMAGENET’,则自动下载在Ima
geNet图片数据上预训练的模型权重;若为字符串’COCO’,则自动下载在COCO数据集上预训练的模型权重;
若为None,则不使用预训练模型。默认为'IMAGENET'
--model PaddleX 模型名称
--model_list 输出 PaddleX 模型名称,默认不输出,选择后只输出信息,不会开启训练
--backbone 目标检测模型的 backbone 网络
python3 run/train.py --model_list
'PPLCNet', 'PPLCNet_ssld', 'ResNet18', 'ResNet18_vd', 'ResNet34', 'ResNet34_vd', 'ResNet50', 'ResNet50_vd', 'ResNet50_vd_ssld', 'ResNet101', 'ResNet101_vd', 'ResNet101_vd_ssld', 'ResNet152', 'ResNet152_vd', 'ResNet200_vd', 'DarkNet53', 'MobileNetV1', 'MobileNetV2', 'MobileNetV3_small', 'MobileNetV3_small_ssld', 'MobileNetV3_large', 'MobileNetV3_large_ssld', 'Xception41', 'Xception65', 'Xception71', 'ShuffleNetV2', 'ShuffleNetV2_swish', 'DenseNet121', 'DenseNet161', 'DenseNet169', 'DenseNet201', 'DenseNet264', 'HRNet_W18_C', 'HRNet_W30_C', 'HRNet_W32_C', 'HRNet_W40_C', 'HRNet_W44_C', 'HRNet_W48_C', 'HRNet_W64_C', 'AlexNet'
运行 test.py 文件,查看命令行参数加 -h
python3 run/test.py --model_dir ./output/best_model \
--epochs 4 \
--dataset ./dataset/train \
--test_list ./dataset/train/test_list.txt
-h, --help show this help message and exit
--cpu 是否使用 cpu 计算,默认使用 CUDA
--epochs 测试几轮,默认 4 轮
--dataset 数据集目录,默认 ./dataset/
--test_list 训练集列表,默认 '--dataset' 参数目录下的 test_list.txt
--model_dir 读取训练后的模型目录,默认 ./output/best_model
运行 infer.py 文件,查看命令行参数加 -h
python3 run/infer.py --dataset ./dataset/train --model_dir ./output/best_model
-h, --help show this help message and exit
--cpu 是否使用 cpu 计算,默认使用 CUDA
--dataset 数据集目录,默认 ./dataset/
--infer_list 预测集列表,默认 '--dataset' 参数目录下的 infer_list.txt
--model_dir 读取训练后的模型目录,默认 ./output/best_model
--result_info 显示预测结果详细信息,默认 不显示
--result_path 预测结果文件路径,默认 ./result/result.csv
--split 数据分隔符,默认 ','
visualdl --logdir ./output/vdl_log
1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析: 在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1: print(k)k=k/2A.1000 B.10C.11D.9解析: 按照题意每次循环K/2,直到K值小于等
使用facebook登录后,我被重定向到/#_=_,其中显示主页。这种垃圾也出现在其他URL中,例如当注册失败并被重定向到/users/sign_in#_=_为什么会发生这种情况,我该如何解决? 最佳答案 如果你真的不想要它,一些简单的javascript就可以了:if(window.location.hash=="#_=_"){window.location.hash="";} 关于ruby-on-rails-为什么Devise/Omniauth会向URL添加垃圾?,我们在StackO
我有UTF-8字符串:Website•Facebook那是中间的一颗子弹又名•或0xE20x800xA2此值已正确存储在数据库中,并使用默认设置使用Rails3和ruby1.9.3正确显示在屏幕上。我正在尝试通过HTML电子邮件发送此邮件,但是当一切都说完之后,接收端看到的是垃圾:这背后的代码很简单,我有一个ActionMailer子类(默认使用UTF-8)设置以在布局中发送带有UTF-8内容编码的HTML电子邮件:email.html.erb布局文件:"all"%>内容使用与呈现网页相同的View,重要的一行是:我已经尝试了很多很多force_encoding的排列,e
所以从Ruby2.2+版本开始引入了符号垃圾回收。我在irb中编写了以下代码片段:before=Symbol.all_symbols.size#=>3331100_000.timesdo|i|"sym#{i}".to_symendSymbol.all_symbols.size#=>18835GC.startSymbol.all_symbols.size#=>3331因此,正如预期的那样,它收集了使用to_sym动态生成的所有符号。那么GC是如何知道收集哪些符号的呢?即使它们在程序中被引用,它会收集符号吗?符号垃圾回收是如何工作的?如果我创建的其中一个符号在程序中被引用,它还会收集它吗?
如果我使用类似的方法defself.get_service_clientreturn@service_clientif!@service_client.nil?@service_client=#initializelogicend现在@service_client是一个类的实例变量。它在内存中有多长时间?只要类在内存中(即像静态变量一样),我可以指望它不会被重新初始化吗? 最佳答案 类也是Ruby中的实例,但是当您以通常的方式定义类时,它会被分配给一个常量,并且该常量会被其他常量引用,从而阻止其被收集。因此,该类将无限期地存储在内存
当我将项目添加到我的Postgres数据库时,一切似乎都运行良好。在不做任何更改的情况下,只要在我的应用程序中的任何位置启动Madeleine,我的Rails应用程序就会开始失败:EncodingErrorinEventsController#updateinvalidencodingsymbolapp/controllers/events_controller.rb:137:in`update'137是问题行:135defupdate136@event=Event.find(params[:id])137m=SnapshotMadeleine.new("bayes_data")...
我正尝试在我的RubyonRails应用程序中运行带外垃圾收集(一旦请求完成响应)。我在config.ru中添加了以下内容:#ThisfileisusedbyRack-basedserverstostarttheapplication.require::File.expand_path('../config/environment',__FILE__)beginrequire'unicorn/oob_gc'rescueLoadError,NameErrorend#Out-of-bandGC,runsGCafterevery10threquestandaftertheresponse#h
我遇到了错误“2013-03-06”的未定义方法`strftime':String当尝试使用strftime从字符串2013-03-06正常显示日期(2013年6月3日或类似日期)时。在我的index.html.erb中执行此操作的行看起来像这样我只是在学习Rails,所以我确信这只是一个愚蠢的初学者错误,我们将不胜感激。谢谢 最佳答案 当strftime是时间/日期类的方法时,您的截止日期看起来是一个字符串。你可以试试这个:Date.parse(task.duedate).strftime("%B%e,%Y")
我正在开发一个Rails2.3、Ruby1.9.1网络应用程序,它在每个请求之前执行大量计算。对于每个请求,它都必须计算一个包含300个节点和约1000条边的图。该图及其所有节点、边和其他对象针对每个请求(~2000个对象)进行初始化-实际上,它们是使用Marshal.load(Marshal.dump())从未计算的缓存图中克隆的。性能在这里是一个很大的问题。现在整个请求平均需要150毫秒。然后我看到在请求期间,部分计算随机花费更长的时间。假设这可能是GarbageCollector启动,我将请求包装在GC.disable和GC.enable中,以便请求等待垃圾收集,直到计算和渲染完
我正在使用rubyclassifiergem其分类方法返回根据训练模型分类的给定字符串的分数。分数是百分比吗?如果有,最大差值是100分吗? 最佳答案 这是概率的对数。对于大型训练集,实际概率是非常小的数字,因此对数更容易比较。从理论上讲,分数的范围从接近零的无穷小到负无穷大。10**score*100.0会给出实际概率,确实最大相差100。 关于ruby-贝叶斯分类器分数代表什么?,我们在StackOverflow上找到一个类似的问题: https://st