4 Star 18 Fork 17

zhaomingming / CVFundamentals

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

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的几种跟踪器,以及跟踪所需要的数据集。

Repository Comments ( 0 )

Sign in to post a comment

About

核心基础课课后作业同步地址 expand collapse
Python
MIT
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
Python
1
https://git.oschina.net/anjiang2020_admin/CVFundamentals.git
git@git.oschina.net:anjiang2020_admin/CVFundamentals.git
anjiang2020_admin
CVFundamentals
CVFundamentals
master

Search