零基础使用深度学习进行目标检测

实验目的

下面这张图像存在9处瑕疵划痕(使用微软画图工具乱画的),就是要检测的目标。经过深度学习的训练,可以预测新图像上是否有瑕疵和这些瑕疵的位置(以下这张图是未参加训练的测试图)。

实验效果

经过深度学习训练后得出一个模型,利用该模型对测试图片进行预测,其预测效果如下图

实验过程

准备训练预测工具

这是一个在Windows下本人基于darknet+qt+opencv制作的一个深度学习快速目标检测平台,可以利用该平台快速进行您自己数据集的标注/训练/预测,下载地址(戳这里)。下载后解压其目录结构如下:

准备数据集

数据集包含训练集和验证集,本实验数据集下载地址(戳这里),也可以使用其他的数据集。

建立工程

a.在darknet_train_tool下进入example目录下,拷贝工程__template_project_not_edit_just_copy__并改名为你的工程名,这里为defect。(e.g. __template_project_not_edit_just_copy__  --> defect)
b.进入defect目录下:
    1.修改class.names文件,目标检测的类别写在这里面一行一类,比如本工程只预测瑕疵划痕,命名为ng。(e.g. ng)
    2.进入defect/images目录下,将训练图片和验证图片对应放入train和valid目录下(图片名字不要有中文)
    3.进入defect/net目录下,选择一个你需要训练的网络模型进行对应的配置修改(这里以YoloV3.cfg为例子,详细配置过程见下面的《网络配置》)
c.到此,你的工程已经建立完毕,接下来就可以开始训练了

网络配置(以YoloV3.cfg为例)

a.进入defect/net目录下,打开YoloV3.cfg(建议使用notepad++打开)
b.按下Ctrl+F搜索关键字符串"kaychan",会看到以下信息(修改所有kaychan字段的下一行的filtersclasses)
    [convolutional]
    size=1
    stride=1
    pad=1
    # {kaychan}filters = 3 * (4 + 1 + classes)(这里只有一类ng类,所以classes=1,filters=18,将filters改为18即可)
    filters=18
    activation=linear
    [yolo]
    mask = 6,7,8
    anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
    # {kaychan}classes = your class number(这里只有一类ng类,所以classes=1,将classes改为1即可)
    classes=1
    num=9
    jitter=.3
    ignore_thresh = .7
    truth_thresh = 1
    random=0                    # random字段在显存或者内存够大的情况可以置为1,开启多尺度,否则会溢出

c.修改以下这些参数以适应你自己的工程
    [net]
    # Testing
    #batch=1
    #subdivisions=1
    # Training
    batch=48                     # 网络积累多少个样本后进行一次BP 
    subdivisions=16        # 将一个batch的图片分subdivisions次完成网络的前向传播
    width=416                   # 网络输入的宽(320/416/608可选)
    height=416                 # 网络输入的高(320/416/608可选)
    channels=3                # 图像的通道数
    momentum=0.9         # 动量 DeepLearning中最优化方法中的动量参数 这个值影响着梯度下降到最优值得速度
    decay=0.0005            # 权重衰减正则项,防止过拟合
    angle=0                       # 数据增强参数,通过旋转角度来生成更多训练样本
    saturation = 1.5          # 数据增强参数,通过调整饱和度来生成更多训练样本
    exposure = 1.5           # 数据增强参数,通过调整曝光量来生成更多训练样本
    hue=.1                         # 数据增强参数,通过调整色调来生成更多训练样本
    learning_rate=0.001  # 学习率
    burn_in=1000             # 在迭代次数小于burn_in时,其学习率的更新有一种方式,大于burn_in时,才采用policy的更新方式
    max_batches = 50000 # 最大迭代次数
    policy=steps
    steps=40000,45000    # steps和scale是设置学习率的变化                  
    scales=.1,.1                 # 迭代到40000次时,学习率衰减十倍,45000次迭代时,学习率又会在前一个学习率的基础上衰减十倍 

开始训练

a.在darknet_train_tool目录下双击quick_train.bat文件开始训练(按照提示进行操作)
b.Please input project name: 输入你的工程名(这里就是defect)
c.Please select train net: 选择你的训练网络(1:YoloV3 / 2:TinyYoloV3,选择对应的编号即可,这里选择1:YoloV3)
d.Make darknet dataset[y/n]: 是否标注数据集(第一次训练肯定是要制作数据集的或者添加新的图片或者删除不要的图片都需要选y制作标注),标注方法可以参考《Darknet Yolo目标快速标注工具》,很简单的就是标注你的目标。
e.Please select train processor[1:CPU / 2:GPU]: 选择cpu或者gpu进行训练(如果没有nvidia-gpu就选择cpu,否则运行会报错)
f.Use pre-trained model[y/n]: 是否使用预训练模型(就是可以基于别的权重模型继续训练或者从新开始训练)
g.Start train[y/n]: 是否开始训练(按下'y'则开始训练,前提是前面的配置正确了,每迭代5000次会在example/defect/model目录下输出权重模型,每100次更新last模型)

整个操作过程如下图所示:

到此已经开始训练了,此时会有一个训练的loss图,如下图:

刚开始的loss值很高1000左右,经过漫长的训练迭代,这边迭代了30000次(元旦整整跑了3天3夜···,本PC的配置为:I78700+1050TI4G),loss值降到0.01左右(0.1以内效果都很不错了),已经拟合了,可以拿模型去预测了,如下图

开始预测

a.在darknet_train_tool目录下双击quick_predict.bat文件开始预测(按照提示进行操作)
b.Please input project name: 输入你的工程名(这里就是defect)
c.Please select predict net[1:YoloV3 / 2:TinyYoloV3]: 选择你的预测网络(本实验选1:YoloV3)
d.Start predict[y/n]: 是否开始预测(按下'y'则弹出预测GUI,在GUI界面中选择你的待预测图片路径便开始预测)

整个操作过程如下图所示:

此时会弹出预测窗口,选择你本地的待预测图片文件夹,便开始轮询预测文件夹里面的所有图片。

直到预测结果符合您的需求,就可以将模型导出去使用了。

注意事项

a.将本工具darknet_train_tool放在没有中文的路径下
b.训练和测试的图片名字不要有中文和其它不规则符号
c.训练时出现内存溢出(out of memory)时可以将random置为0和改小batch
d.如果要使用GPU训练必须有nvidia的显卡并且装了相应的cuda和cudnn
e.如果想单独使用图像标注工具请阅读tools/darknet_dataset_maker/ReadMe.txt
f.使用GPU训练建议安装CUDA8.0+CUDNNv5.1

技术交流

图像处理-深度学习技术交流群:qq群:247270428

如果文章对您有帮助,打赏一包辣条吧,DaLao们。

友情链接

darknet官网:https://pjreddie.com/darknet/yolo/

Windows配置darknet:https://blog.youkuaiyun.com/KayChanGEEK/article/details/84979441

cuda下载地址:https://developer.nvidia.com/cuda-toolkit-archive

cudnn下载地址:https://developer.nvidia.com/rdp/cudnn-archive 

 

### 关于 `pip` 安装过程中由 `urllib3` 引发的异常错误解决方案 在使用 `pip` 进行包管理可能会遇到由于网络连接超时或其他原因导致的 `urllib3` 异常。以下是针对此类问题的具体分析和解决方法。 #### 1. 超时错误 (`ReadTimeoutError`) 当执行命令如 `pip3 install jupyterlab` 或其他依赖下载操作,如果目标服务器响应时间过长,则可能出现如下错误: ``` pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out. ``` 此错误表明客户端未能及接收到来自远程主机的数据流[^1]。可以尝试通过增加超时参数来缓解该问题: ```bash pip --default-timeout=100 install <package_name> ``` 这里设置了一个更大的默认超时(单位为秒),从而允许更长时间等待服务端响应[^4]。 #### 2. 清理旧版本并重新安装 `pip` 有本地环境中残留损坏或不兼容的组件也可能引起类似的异常行为。按照以下步骤清理环境后再试可能有效果: - 删除已有的站点包目录下的所有文件: ```bash rm -rf ~/.local/lib/python<version>/site-packages/* ``` - 下载官方脚本重新部署最新版 `pip` : ```bash curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3 - type pip3 hash -r pip3 ``` 这一步骤能够确保使用的工具链是最新的状态,减少因程序本身缺陷造成的冲突风险[^2]. #### 3. 使用镜像源加速获取资源 考虑到国外某些网站访问速度较慢甚至不可达的情况,在国内推荐切换至阿里云、清华大学开源软件镜像站等提供更快捷稳定的服务地址作为替代方案之一。修改配置方式如下所示: 编辑或者创建名为 `.pip/pip.conf`(Linux/Mac OS X) 的全局配置文档加入下面内容即可生效: ```ini [global] index-url = https://mirrors.aliyun.com/pypi/simple/ trusted-host = mirrors.aliyun.com ``` 对于 Windows 用户来说路径应改为 `%APPDATA%\Python\pip\pip.ini`. 另外还有临指定的方法适用于单次调用场景下无需永久更改设定的情形 : ```bash pip install some-package -i http://pypi.douban.com/simple --trusted-host pypi.douban.com ``` 以上措施均有助于改善因地理因素带来的延迟现象进而规避潜在隐患[^4]. #### 4. 更新或替换底层库 `urllib3` 既然问题是围绕着 `urllib3`, 那么单独升级它也是一个得考虑的方向 。运行下列指令完成更新过程: ```bash pip install --upgrade urllib3 ``` 当然也可以手动卸载再重装一遍确认效果如何变化 : ```bash pip uninstall urllib3 && pip install urllib3 ``` 得注意的是 , 如果项目里头绑定了特定版本号的话记得查阅对应说明文档调整策略适配需求[^3]. --- ### 总结 综上所述,面对 `pip` 和其内部实现所依托的 `urllib3` 出现的各种异常状况可以从多个角度切入排查处理。无论是优化网络条件还是修正自身软硬件设施都不可或缺。希望上述建议能帮助到您解决问题!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值