【面试复盘】猿辅导计算机视觉算法工程师一面

来源:投稿 作者:LSC
编辑:学姐

总共时长45分钟,首先是自我介绍,然后开始面试。

1.旋转数组[1,2,3,4,5,6,7]--->[5,6,7,1,2,3,4],找出k是否存在一个旋转数组中,旋转数组一开始是有序的。

二分:

int search(vector& arr, int target) {
        int start=0 ,end=arr.size()-1,mid;
        while(start<=end){
            if(arr[start] == target) {return start;}
            mid=(start+end)/2;
            if(arr[mid]==target)
            {   
                while(mid >= 1 && arr[mid - 1] == arr[mid]) {mid--;}
                return mid;
            }
            if(arr[start]==arr[mid])  /*无法判断左右区间的增序性*/

            {
                while(start <= mid && arr[start]==arr[mid])
                    {++start;}             }
            else if(arr[mid]>=arr[start])  // 一定要先左再右
            {
                /*左区间增序*/ 
                if(target>=arr[start]&&target<=arr[mid]){ end = mid-1;}
                else{ start=mid+1;}
            }
            else
            {
                /*右区间增序*/
                if(target>=arr[mid]&&target<=arr[end]){ start = mid+1;}
                else { end=mid-1; }
            }
        }
        return -1;
    }

2.字符串a,能不能在1步内(增加、删除、修改)变成字符串b,都只含有小写字母,但是不能改变原来a b各个字符的顺序

Eg:a=”abcdfgd” b=”abcdffd” yes
a=”bbiiom” b=”abiion” no
a=”ccaabb” b=”aabbcc” no

法1: 动态规划 编辑距离

def minDistance(word1, word2):
        n, m = len(word1), len(word2)
        dp = [[0 for i in range(m + 1)] for i in range(n + 1)]
        for i in range(1, n + 1):
            dp[i][0] = i
        for i in range(1, m + 1):
            dp[0][i] = i
        for i in range(1, n + 1):
            for j in range(1, m + 1):
                if word1[i - 1] == word2[j - 1]:
                    dp[i][j] = dp[i - 1][j - 1]
                else:
                    dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1
        return (dp[-1][-1] <= 1)

法2: 直接判断:

  • (1)先判断两个字符串的长度相差是否大于1,是no,否继续

  • (2)统计每个字符串中每个字母的个数,再计算相同字母每个字符串的差,用字典来统计,一旦有差大于1,是no,否继续

  • (3)如果两个字符串等长,遍历两个字符串,是否存在超过1相同位置的值不同的,是no,否yes,不一样长的话,遍历,如果相同位置不同,长的指针向后移动,再次字符不相同就是no,否则yes。

3.介绍项目

主要介绍项目的数据、任务、模型、参数、优化和结果。

4.为什么这个项目要用到光照数据增强,为什么选择yolov5模型

因为我项目的数据收到光照这个因素的影响比较大,所以特地进行数据增强,增加模型的泛化性。

5.熟悉OCR算法吗?比较了解的有哪些?

对CRNN比较熟悉,入门ocr必学的经典算法。

CRNN=CNN+RNN+CTC,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,就是基于图像的序列识别,使用 CTC 损失,把从循环层获取的一系列标签分布转换成最终的标签序列。

此外还有SVTR,是PaddleOCR的PP-OCRv3的主要模型, 模型小, 效果好,主要就是利用Transformer替代了RNN, 得益于self-attention机制, 这样面对不规则文本图像的时候应该有更好的信息抽取能力, 可以更好的抽取有序后验概率矩阵。

6.常用的ocr框架

PaddleOCR和mmocr框架,这两个都是当下最流行的ocr框架,两种框架的文本检测和识别的代码结构相似,PaddleOCR更全面,我使用频率较高,支持多种语言文本,mmocr对中文支持行较差,总的来说准确率大体都差不多。

关注下方《学姐带你玩AI》

算法工程师万能简历公式+200多个简历模板(中英文)

回复“简历”轻松获取!

码字不易,欢迎大家点赞评论收藏!

你可能感兴趣的:(粉丝的投稿,深度学习干货,算法工程师,计算机视觉,面试)