NKUCS.ICU
NKUCS.ICU copied to clipboard
COSC0029 计算机视觉基础
https://nkucs.icu/#/courses/grade-3/COSC0029
NKUCS,一个充满了「神仙」和「神仙」课程的专业,本网站旨在记录 NKUCS 的信息以及历届学生的评价
一门很硬核的课,早有耳闻这课的难度较高,我抱着感兴趣+挑战自己的心态选了课,收获也是比较多的:
没事不要旷课,不要不交作业,不要违反学术规范(一学期见到很多个同学因为类似的原因被口头给了挂科),课上有随堂测验(选择or主观)一定要听讲。开学前几周比较轻松,会给大家时间配置OpenCV相关环境,熟悉基本操作等。之后就是5次平时作业,每2周交一个,不可延期,是上课提到的内容(作业比课堂进度慢2-3周左右),个人按照从1到3给出我认为的难度分:
- Hybrid Image (1)
- Canny Edge Detection (2)
- Feature Match (2)
- SIFT Feature Detector (3)
- Depth Estimation (2)
尽管调用OpenCV的实现可能没几行就能得到结果,但是老师要求的是使用C++自己实现,最好还能有自己的探索改进,有的题目范围说得比较大,比如深度检测,包含了特征配准、相机参数标定、立体匹配等多个流程,不可能都做,本社恐人就默默地查资料、翻论文、最后才确定一篇做立体匹配阶段的论文复现(事实上如果张开嘴问老师应该没那么麻烦); 大作业是小组完成一个自选题目的探究,从学期初就有一次开题报告,期末时再小组结题汇报,并提交小论文,老师要求比较严格,抱着锻炼学习的心态面对吧;
关于打分,我本身就没有抱有太高的期待,因为有两次的平时作业我给自己留的时间太少,复现效果不咋地,结果分数给的比我自己预期的高,满足了。
P.S. 感觉学弟学妹们越来越厉害了,我觉得如果对计算机视觉经典算法感兴趣的话,还是值得一试的。
一门很硬核的课,早有耳闻这课的难度较高,我抱着感兴趣+挑战自己的心态选了课,收获也是比较多的:
没事不要旷课,不要不交作业,不要违反学术规范(一学期见到很多个同学因为类似的原因被口头给了挂科),课上有随堂测验(选择or主观)一定要听讲。开学前几周比较轻松,会给大家时间配置OpenCV相关环境,熟悉基本操作等。之后就是5次平时作业,每2周交一个,不可延期,是上课提到的内容(作业比课堂进度慢2-3周左右),个人按照从1到3给出我认为的难度分:
- Hybrid Image (1)
- Canny Edge Detection (2)
- Feature Match (2)
- SIFT Feature Detector (3)
- Depth Estimation (2)
尽管调用OpenCV的实现可能没几行就能得到结果,但是老师要求的是使用C++自己实现,最好还能有自己的探索改进,有的题目范围说得比较大,比如深度检测,包含了特征配准、相机参数标定、立体匹配等多个流程,不可能都做,本社恐人就默默地查资料、翻论文、最后才确定一篇做立体匹配阶段的论文复现(事实上如果张开嘴问老师应该没那么麻烦); 大作业是小组完成一个自选题目的探究,从学期初就有一次开题报告,期末时再小组结题汇报,并提交小论文,老师要求比较严格,抱着锻炼学习的心态面对吧;
关于打分,我本身就没有抱有太高的期待,因为有两次的平时作业我给自己留的时间太少,复现效果不咋地,结果分数给的比我自己预期的高,满足了。
P.S. 感觉学弟学妹们越来越厉害了,我觉得如果对计算机视觉经典算法感兴趣的话,还是值得一试的。
第一个给无人区课程留下详细评论的同学!赞!
这个课无论课堂还是作业都蛮硬核的。内容主要包括一些经典的图像处理算法,同时也会引入一些老师之前的工作。老师水平很高,每个知识点都信手拈来,课堂密度在中后期还是挺大的。老师的 PPT 和讲解都很到位,认真听的话不会有太大问题,实在不懂的可以多看看论文或者直接问老师。每节课都有签到,随堂测试计入总成绩,一般报的人相对较少,旷课迟到很容易就会被发现。作业主要是实现一些经典算法,OpenCV只能用来干一些基础操作,今年作业源码都不需要提交,也不用写报告,直接和老师1v1,抄袭、运行bug、原理错误、展示效果不佳等问题都会影响分数,建议至少提前三天开始写。
之前学长说的已经很完整了,我根据个人情况再给出一些补充,适合像我一样的CVnoob:
- 需要复/预习的知识(按照难度排序)
- 卷积
- 基本的DP和图论算法
- 矩阵运算
- 数字信号处理中频域时域转换和对应关系
- 传统机器学习和深度学习(入门级别就行)
- 射影几何(入门级别就行)
- 作业难度和可扩展点(每次作业占总评10分,大作业占40分,实现基础部分给75,实现了但是有问题可能会给60,基础之上加拓展可能会到90+?除了SIFT其余的基础实现都很简单,我根据基础+拓展也按照1-3给出难度分)
- OpenCV环境配置(5): 不多解释。
- Hybrid Image(1): 基础实现不难,可做的拓展不是很多,手写卷积等一些基础工作可能不会给太高的分数,可以试试把卷积过程用二维FFT写出来,也可以试试并行优化。(核心代码量大概300)
- Canny Edge Detector(2): 基础实现有点难,容易出现各种各样不好的效果,可以考虑输出一下中间结果,比如连边的时候可以把每条边用一种颜色标出来看看连续性(老师教的)。拓展的话可以把之前的手写FFT迁移过来,然后写写floodfill什么的(写起来简单,不容易出错),还可以考虑一下自适应阈值(里面还可以加点二维前缀和之类的小优化)。(核心代码量大概500-600)
- Feature Match(1): 基础实现很简单,直接ratio test即可。拓展的也不是很困难,可以实现一下课上提到的GMS。(核心代码量大概300)
- SIFT(3): 基础实现就非常难,需要结合作业3检验特征点质量。拓展反倒不困难,可以试试ASIFT,也可以试着换一下descriptor,当然还可以并行优化。(核心代码量大概800-1000+)
- Depth Estimation(3): 我和队友都是视差匹配,基础的可以基于ssd或者ncc。拓展的话可以试试sgm、sgbm、adcensus、graphcut等算法(选一个就行)。每一个都不是很容易,建议尽早做,gc算法我只给自己留了一晚上,网络流建图建错了,寄得彻底。(核心代码量大概500-800+)
- Final(3): 首先建议找靠谱的队友,不求带飞,但是要有输出。其次建议基于传统算法做,既能体现工作量同时也容易有创新。基于深度学习的太简单容易给低分(比如backbone),太复杂了时间不够卡不够训不完结果还不一定能保证,解释性也很差。老师的代码功底和理论功底都非常强大,基本一眼就能看出工作量和难度,大伙要认真对待。我们队是直接调研拓展了视差匹配,两个人各拓展一类传统算法,另一个人整了深度学习算法,最后给分还不错。
- 新手(我)使用OpenCV常常遇见的问题
- 数据类型: 尽量使用浮点类型(CV_64F或者CV_32F),直接用整型最后效果可能会非常差,浮点整型混着用容易出一些未知错误,建议写几个宏统一精度。
- 坐标系选取: 注意一下col/row和x/y,容易混。
- 内存管理: 莫名其妙有些Mat被析构了,我认为这个主要是编译器优化的bug,建议写的时候省去没有用的中间变量传递。
- 图片显示: 有时候imshow了发现是全黑的,一方面可以用老师推荐的Image Watch(确实好用,强烈推荐)看一下像素值,另一方面可以给Mat乘一个较大的数值(比如100)增加亮度,之后还有问题再找程序的bug。
大伙如果有充足的时间,并且对CV方向感兴趣的话,一定不要错过这门课!
非常好程明明,使我的选修挂了,爱来自南开 这门课看上去是选修,实际上完全建议当成一节必修课来对待,时间不够建议别选 如果你希望在课上有所收获,建议在每节课前先预习,课后倒是不用复习,作业会帮你复习。以及,程明明会每节课点名。 作业是复现某些经典的图像分析算法,量说大不大说小不小,前几次作业大致是一晚上工作量,后面大概是三到四晚上。以及,程明明对抄袭非常反感(并且真的会查),宁可迟交,不要抄袭。 个人的血泪教训是一定要留充足的时间给大作业,起码把它当做必修课大作业来对待。 最后,不得不说这门课可以说是对我的帮助最大的一门选修课了,如果你想学习计算机视觉方面,还是推荐选课的