1 Star 0 Fork 16

happyabc / CVFundamentals

forked from zhaomingming / CVFundamentals 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

CVFundamentals

CV核心基础WEEK1 :  基本图像处理
https://gitee.com/anjiang2020_admin/CVFundamentals
Pipeline:
0.职业规划
1.Computer Vision 的由来
2.计算机如何看到图像
3.计算机处理图像的方式,方法

作业:
   1 用滤波操作给图片去除噪声,
     选做:将自己的logo水印打到经过滤波后的照片上。
   目的:感受滤波操作的作用,用数字上的滤波操作模拟老照片真实镜头的滤波功能。
   参考步骤:
   1 拿到老师给定的图片:week1/week1_homework.png。
   2 对图片进行滤波操作。参考week1/week1_class_code_after_class.py
   3 修改滤波核的数值和滤波核的大小,调整出最好的效果。
   4 制作自己的logo水印的照片
   5 将水印添加到图片上。参考week1/week1_class_code_after_class.py
  • week2
 CV核心基础WEEK2 :认识计算机视觉
 Pipeline:
 1.    图像处理与计算机视觉
 2.    计算机视觉的输入与输出
 3.    如何解决计算机视觉的几个问题
 4.    计算机视觉第一步:图像描述子

 作业:
  
  编写计算机视觉的第0版程序。
  步骤
  1 生成10张图片,对应0,1,2,3,4,5,6,7,8,9.
  2 对这10张图片提取特征x。
  3 用一个判别器f(x)来决策输出结果y。
    这个判别器达到作用:
    当x是 “0”图片对应的特征时,y=f(x)=0
    当x是 “1”图片对应的特征时,y=f(x)=1
    当x是 “2”图片对应的特征时,y=f(x)=2
    当x是 “3”图片对应的特征时,y=f(x)=3
    当x是 “4”图片对应的特征时,y=f(x)=4
    当x是 “5”图片对应的特征时,y=f(x)=5
    当x是 “6”图片对应的特征时,y=f(x)=6
    当x是 “7”图片对应的特征时,y=f(x)=7
    当x是 “8”图片对应的特征时,y=f(x)=8
    当x是 “9”图片对应的特征时,y=f(x)=9
 4 参考代码:week2/recognize_computer_vision.py
  • week3[github:https://github.com/anjiang2016/CVFundamentals]
CV核心基础WEEK3 :经典机器学习(一)
Pipeline:
1    监督学习与非监督学习
2    第一个可训练的监督学习模型:线性回归模型的3类解法
3    使用线性模型,解决字符分类问题
4    逻辑回归模型


作业:
编写计算机视觉的第1版程序:用线性回归模型,解决数字图片分类问题,
要求:用pytorch 的auto_grad功能。

步骤:
  1 生成10张图片,对应0,1,2,3,4,5,6,7,8,9.
  2 对这10张图片提取特征x。
  3 用一个线性判别器f(x)来决策输出结果y。
  4 判别器的训练要使用梯度下降法,写代码的时候要用到pytorch 的auto_grad功能。
 达到作用:
    当x是 “0”图片对应的特征时,y=f(x)=0
    ...
    当x是 “9”图片对应的特征时,y=f(x)=9
可参考代码:
  /week3/recognize_computer_vision_linear_model.py,线性模型解决图片识别问题课程代码
  /week3/how_to_use_auto_grad.py,测试pytorch auto_grad使用方法
  /week3/data_display.ipynb 数据显示
  /week3/week2作业答案课堂讲解.ipynb
  /week3/auto_grad使用时的注意事项.ipynb
  /week3/auto_grad形式的梯度下降.ipynb
  /week3/running_jupyter.pdf,jupyter运行命令
  jupyter常用效率快捷键:https://zhuanlan.zhihu.com/p/143919082
  • week4[github:https://github.com/anjiang2016/CVFundamentals]
CV核心基础WEEK4 :经典机器学习(二)
Pipeline:
1    线性模型的局限性,以及改进方法 
2    用二分类来进行多分类:感知机
3    用逻辑回归进行多分类
4    神经网络:反向传播网络
5    【遗留】 欠拟合,过拟合与正则化
6    【遗留】 支持向量机SVM推导


作业:
已经刷爆hct66 dataset,这周就开始mnist数据集的挑战;
编写计算机视觉的的第2版程序:用3层反向传播网络来训练mnist中的100张图片。
要求:
   1 使用pytorch的auto_grad功能来编写
   2 要求随着epoch的增加,给出训练的准确度acc,和测试的准确度acc
步骤:
  1 下载并调用mnist数据集:https://github.com/anjiang2016/CVFundamentals/blob/master/week4/mnist/readme.md
  2 对mnist中的数据提取特征x。投影法可以用,但是效果不好,可以尝试用opencv 提取hog/lbp等特征
  3 用反向传播网络来决策输出结果y。
  4 反向传播网络的训练要使用梯度下降法,写代码的时候要用到pytorch 的auto_grad功能。
 期望达到精度:
    训练精度:60%
    测试精度:60%
可参考代码:
  /week4/assignment_week03_answer.py: week3作业参考答案
  /week4/recognize_computer_vision_nonlinear_model.py:用非线性模型来识别数字
  /week4/use_2class_on_multiclass.py:在htc66数据集上使用二分类进行多分类
  /week4/use_2class_on_multiclass_sigmoid.py:在htc66数据集上使用逻辑回归二分类进行多分类:w
  /week4/mnist/readme.md:mnist数据下载,读取,显示代码
  /week4/mnist_use_2class_on_multicalss.py:在mnist上使用二分类进行多分类
  /week4/mnist_bp.py:精度不好得一版bp代码
  /week4/homework_dataset: hct1000数据集【选用】
  • week5[https://gitee.com/anjiang2020_admin/CVFundamentals/blob/master/README.md]
CV核心基础WEEK5 :经典机器学习(三)
Pipeline:
5(week4遗留)欠拟合,过拟合与正则化
1    决策树中的Decision Tree,ID3,C4.5,CART 
2    无导师学习中的kmeans++

作业:
必做:使用kmeans++ 对hct66数据集聚三类
可选:使用kmeans++ 对mnist数据集聚10类,查看聚类效果。
要求:
   1 编写名字为keamspp.py的代码,实现hct66数据集三聚类。 
步骤:
  0 数据集hct66.py,可以用from hct66 import * 的方式使用
  1 先编写kmeans代码:kmeans.py,观察kmeans的结果
  2 在kmeans.py的基础上,将kmeans的算法的初始化部分做优化,按照kmeas++的理论思路进行编写
注意:kmeans原理比较清晰,没有提供参考例子,是首次需要大家把算法从原理落地到实际代码,意义非凡。自己编写的过程中,会遇到一些原理细节上实现问题,有的需要用近似得方法实现。不确定的地方要及时的提出来。

课程同步参考代码:
week5/__init__.py
week5/assignment04_code.py:week4参考作业
week5/decision_tree.py: 手动实现得决策树代码,可以看到决策树实现细节
week5/desition_tree.py: 编写decision_tree.py 的中间文件
week5/desition_tree_number.py :中间文件
week5/dt_for_num.py :临时中间文件
week5/dt_sk.py:使用sklearn库,调用数据集iris,并调用决策树工具包,实现分类。然后汇出决策树的图
week5/dt_sk_hct66.py:在hct66数据集上使用sklearn进行分类
week5/dt_sk_regressor.py :使用sklearn进行连续值预测(回归)
week5/dt_sk_regressor1.py:
week5/hct66.py :数据集hct66
week5/landmark_xgboost.py : 使用工具包xgboost完成简单人脸关键点回归
week5/load_mnist_use_xgboost.py: 使用xgboost实现mnist数据集的分类
  • week6 [http://yann.lecun.com/exdb/lenet/]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals/tree/一期]
CV核心基础WEEK6 :神经网络的卷积化
Pipeline:
1    对客观世界的建模:卷积 
2    从感知机到卷积神经网络 
3    CNN:统一了题特征+决策
4。  如何加速CNN

作业:完成week6/mnist_lenet_homework.py代码的填空,采用Lenet结构的CNN对mnist数据集进行分类训练,并测试

要求:
   1 用pytorch中的nn来实现
   2 采用Lenet结构复现出结果
步骤:
  对week6/mnist_lenet_homework.py填空
  1 89行 完成lenet网络中的C1:第一个卷积层得声明
  2 94行 填入lenet网络中的C3:第二个卷积层得声明
  3 99行 填入lenet网络中的C5:第三个卷积层得声明
  4 25-29行 完成lenet的前向计算过程
  5 运行办法:python week6/mnist_lenet_homework.py 0.00001
其它参考代码:
  1 数据集mnist:参考代码:week6/conv.py 32行
  2 卷积层用nn.conv2d来实现,相关参考代码:week6/conv.py
  3 卷积的声明,更改默认weight,默认bias,对图片进行卷积,示例子代码在:week6/conv.py 的14行,27行,29行,55行
  4 图像滤波器:filter.py
  5 kmeans++资料:kmeans++.pdf
  6 kmeans参考代码1:kmeansAndkmeansPP.py
  7 kmeans参考代码2:kmeans_and_kmeansPlusPlus.py
  • week7 [alexnet]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals/tree/一期]
CV核心基础WEEK7 :Lenet之后的CNN优化之路
Pipeline:
1    关于优化方向的探讨
2    看看经典模型是如何做的 

作业:完成week7/week7_homework_mnist_alexnet.py代码的填空,主要为熟悉alexnet的网络结构,并掌握flops和参数量的计算方法。

要求:
   1 实现alexnet网络的正向计算过程
   2 实现参数量计算函数:print_params_num
   3 实现计算量flops计算函数:get_flops
步骤:
  对week7/week7_homework_mnist_alexnet.py填空
  1 184-209行 完成alexnet网络结构的构建
  2 162行完成一个层参数量的计算,注意区分卷积层与全连接层
  3 25行完成一个层的flops计算。
  5 运行办法:python week7/week7_homework_mnist_alexnet.py 0.00001
其它参考材料:
  1 week7/初探alexnet网络结构.pdf
  2 week7/Alexnet-imagenet2012.pdf
  3 conv2d的参数意义以及写法参考:week6/conv.py
  4 conv,pool 函数说明:week7/pytorch_api_conv_pool.pdf
  • week8 [梯度下降算法一网打尽]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals/tree/一期]
CV核心基础WEEK8 :Lenet之后的CNN优化之路(二)
Pipeline:
1  BGD/SGC/mini-batch GD
2  momentum/NAG
3  Ada-grad/RMS-Prop/Ada-delta
4  Ada-m

作业:比较几种optim方法:momentum,Adagrad,RMSRrop,Adadelta,Adam

要求:
   1 使用pytorch函数调用一上优化方法/或者自己按照原理实现
   2 要求,打印出loss,top1 acc,epoch,制作曲线进行比较,横轴eposh,纵轴loss&top1 acc
   3 数据使用 cifar10 dataset
建议步骤:
  1 Common_gradient_optimization_algorithms.py有比较完整的工程训练代码。
  2 参考Common_gradient_optimazation_algorithms.py 写出所需要的optim方法
  3 自己完成loss,top1_acc,epoch的记录并用matplotlib绘图
  4 cifar10的数据我传到baidudisk上了一份:链接:https://pan.baidu.com/s/1VFkX4YLiq4NmDi3hA62KVw  密码:hbr1

其它参考材料:
  1. 优化算法原理参考:An_overview_of_gradient_descent_optimization_algorithms.pdf
  2. 优化算法torch代码实现:torch.optm使用办法.pdf
  3. week7作业参考:week7_homework_mnist_alexnet_answer.py
  • week9 [依赖硬件算力提升模型性能:cuda编程]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals/tree/一期]
CV核心基础WEEK9 :依赖硬件算力提升模型性能:cuda编程
Pipeline:
1  Alexnet之后的积木模块 
2  GPU Schema
3  认识pycuda
4  pycuda实现矩阵乘法

作业:使用pycuda完成VGG模型的以下模块:
        1. [必做]conv
        2. pooling
        3. relu
        4. bn
        5. linear
        6. dropout
        7. backward

要求:
   1 要求用pycuda库利用gpu的多线程技术,完成卷积层的计算。
   2 可以用自己定义的kernel函数,也可以用pycuda提供的核函数
   3 自己定义核函数的时候,可以参考week9_pycuda_example_6.py来实现
   4 cifar10的数据我传到baidudisk上了一份:链接:https://pan.baidu.com/s/1VFkX4YLiq4NmDi3hA62KVw  密码:hbr1
其它参考材料:
    1. pycuda-master: pycuda源码
    2. week9_pe_5.py : 自定义核函数,打印出“hello world"
    3. week9_pe_4.py : 自定义核函数,掌握threadIdx,blockIdx等内置变量的意义。
    4. week9_pycuda_example_2.py : 自定义加法核函数
    5. week9_pycuda_example_3.py :  自定义乘法核函数
    6. week9_pycuda_example_6.py :  自定义矩阵乘法核函数
    7. week9_pycude_example_1.py :  利用gpuarray来调用gpu进行计算。
    8. week9_cvf.py : pycuda 自带api使用,gpuarray,以及自带核函数的使用
    9. week8作业参考:cifar10/cifar10_alex.py,cifar10/cifar10_alex_.ipynb
  • week10 [图像分类的决策层设计总结与实战]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals]
CV核心基础WEEK10:图像分类决策层的设计总结与实践
Pipeline:
1  CNN提特征层的设计:搭积木 
2  决策功能的实现:output层的设计
3  边验证边搭建模型
4  生成output需要的groundtruth
5  经典模型Resnet/mobilenet

作业:自己完成一个分类项目:数据采集,标注,设计网络(可从头开始,也可fineturn).
       1. 每人提交10张矿泉水瓶\可乐瓶的图片到邮箱:471106585qq.com
            ![输入图片说明](https://images.gitee.com/uploads/images/2020/0715/135022_28d7b639_7401441.png "屏幕截图.png")
             ![输入图片说明](https://images.gitee.com/uploads/images/2020/0715/135042_997cd525_7401441.png "屏幕截图.png")
       2. 这次分类的图片由老师标注。统一传到modelarts标注平台标注。[检测类的项目时,老师会将图片统一传到modelarts标注平台,交给大家标注]
       3. 自行完成分类网络的决策层。体特征层可从零设计,也可使用其他网络。建议resnet18,在week10/resnet.py中有其实现,可参考
       4. 此次数据集明名为week10_dataset,永远开放的学习型数据集。

要求:
   1 提交作业时,需要提交代码,训练超参数(学习率策略,优化方法,优化epoch数,train acc,test acc)
  
其它参考材料:
    1. mobilenets论文:mobilenets_paper.pdf
    2. week9作业参考答案:pycuda_conv_week9_homework.py
    3. resnet网络搭建代码参考:resnet.py

数据采集示意: 输入图片说明 输入图片说明

  • week11 [图像检测决策层设计总结与实战(一)]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals]
CV核心基础WEEK11:图像检测决策层设计总结与实战(一)
Pipeline:
1  检测任务输出得数据表示 
2  用分类器做检测
3  用CNN直接回归出一个目标位置
4  用CNN直接回归出多个目标位置
5  去除冗余框:NMS
6  用CNN直接回归出多个不同种类的目标位置

作业:1 使用modelarts平台对week10-datasets进行标注,形成week10-datasets-detect 数据集.
     2 在分类模型的基础上,加上检测层,对week10-datasets进行回归检测
     说明:
       1. 检测类的项目时,老师会将图片统一传到modelarts标注平台,交给大家标注,大家需要提供一个跟modelarts平台绑定的邮箱给我,这个邮箱会是登录标注平台的账号。
       2. 自行完成检测层。自行决定:检测头的检测区域个数,每个检测区域内输出框数,类别数。
       3. 网络得backbone可以是你week10使用得网络,也可以与加载一些经典网络,也可以自行设计从头训练。
       4. IoU的实现可参考ppt.代码可自己写,网上有很多。
       5. NMS得实现可参考ppt.代码可自己写,网上代码一般含有IoU.
       4. 此次数据集明名为week10-dataset-detect ,永远开放的学习型数据集。

要求:
   1 提交作业时,需要提交代码,训练超参数(学习率策略,优化方法,优化epoch数,给出10张图片以及其对应检测结果。)
  
其它参考材料:
    1. week11/矿泉水瓶分类/bcnn_iccv15.pdf 
    2. 矿泉水瓶分类.ipynb 
    3. YOLO_V1论文:YOLO_V1.pdf 
    4. YOLO_V2论文:YOLO_V2.pdf 
    5. YOLO_V3论文:YOLO_V3.pdf 
    6. 2016CVPR会议上,作者的PPT:YOLO_CVPR_2016_ppt.pdf
    
  • week12 [YOLO之前:图像检测决策层设计总结与实战(二)]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals]
CV核心基础WEEK12:YOLO之前:图像检测决策层设计总结与实战(二)
Pipeline:
1  如何评价检测器性能? 
2  深度学习初次用于检测:RCNN
3  比CRNN快213倍:Fast RCNN
4  真正得端到端:Faster RCNN 
遗留问题:
        SSD得卷积层过程
        BCNN 
        week11课后作业数据处理部分代码

作业:
     1. 计算week11所设计检测器得mAP,先把每个子类别得AP算出来,然后计算mAP
     2. [选做]用region based得方法【rpn】,可能会更好  
要求:
   1. 提交作业时,需要与自己检测器相适配得mAP代码,以及总得mAP值,分类别得AP值。
  
其它参考材料:
   1. mAP 代码可参考https://github.com/Cartucho/mAP 
    
  • week13 [分割网络的设计]
[gitee:https://gitee.com/anjiang2020_admin/CVFundamentals]
CV核心基础WEEK13:分割网络的设计
Pipeline:
1  Bilinear CNN: for fine classify
2  设计第一个深度学习分割器:FCN
3  经典分割模型
 
遗留问题:
        SSD得卷积层过程
        BCNN:双线性的意义 
        week11课后作业数据处理部分代码
        支持向量机SVM推导
        deconv
        week12作业

作业:编写一个语义分割器(建议FCN),对图像进行分割

要求:
     1. week10_dataset标注,标注文件在https://gitee.com/anjiang2020_admin/week10-dataset
     2. dataloader的编写
     3. 按照Deeplab的思路,重新设计一个网络
FCN 参考步骤:
     1. 编写网络结构文件week13/homework_reference/fcn.py
          18行,补齐FCN32s网络各层得定义:
          [可选] 52行,补齐FCN8s各层得定义
          [可选] 71行,实现跳级结构

       2. 待准备pennfudan数据集https://www.cis.upenn.edu/~jshi/ped_html/
       车道线总体数据将会有16G,这个数据量太大,调错时间成本太高。
       所以,在一开始我们掌握模型原理阶段,需要一个小数据集
       pennfudan是一个只有52M的小型数据集,我们就用它的验证网络的有效性。尽快掌握FCN
       pennfudan数据下载地址:https://www.cis.upenn.edu/~jshi/ped_html/
       ![输入图片说明](https://images.gitee.com/uploads/images/2020/0706/195021_9b419532_7401441.png "屏幕截图.png")
       ![输入图片说明](https://images.gitee.com/uploads/images/2020/0706/200412_b841b066_7401441.png "屏幕截图.png")

       3. 预先训练好得模型:week13/homework_reference/models/文件夹下
  • week14 [跟踪算法的设计]
CV核心基础WEEK14 :  计算机视觉之跟踪算法的设计
https://gitee.com/anjiang2020_admin/CVFundamentals
Pipeline:
0.week12作业
1.遗留问题处理
2.目标跟踪算法设计思路

作业:
   1 写一个tracker,跟踪水瓶(老师提供视频数据【已标注】:https://gitee.com/anjiang2020_admin/week10-dataset/blob/master/README.md#week14跟踪数据集)
     选做:MOSSE方法或者learning to track 100FPS using DNN。
   目的:掌握基于分类做跟踪的思路;掌握跟踪算法中,在线更新模型的的操作办法。
   其它文件:
        week14/CV_homework_week12
        week14/将相关滤波器跟踪算法的速度做到极致.pdf 
   视频:https://www.bilibili.com/video/BV1Y54y1273C/
  • week15 [项目研讨课]
CV核心基础WEEK15 :  项目研讨课
https://gitee.com/anjiang2020_admin/CVFundamentals
Pipeline:
1.week13分割项目讲解
2.week14:tracker[MOSSE]代码详解
3.week14:tracker[使用opencv]代码详解
4.dataloader的几种写法介绍

文件介绍:
  week13_segmentation,week13作业参考代码,内含数据处理,loss函数,模型等文件,直接python bottle_train.py即可完成训练。python bottle_train_gpu.py可完成gpu版本的训练。数据比较大,需要从week10-data工程上去下载:https://gitee.com/anjiang2020_admin/week10-dataset/tree/master	
  week14_tracker,week14的作业代码,内含mosse跟踪器的代码,含有使用opencv的几种跟踪器,以及跟踪所需要的数据集。
MIT License Copyright (c) 2020 Anjiang Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

核心基础课课后作业同步地址 展开 收起
Python
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/happyabc/CVFundamentals.git
git@gitee.com:happyabc/CVFundamentals.git
happyabc
CVFundamentals
CVFundamentals
master

搜索帮助