【全網首發】雙字重疊語序驗證碼識別

在這里插入圖片描述

【省流:打算直接測試效果的可以訪問這個網址】

http://decaptcha.ai?project_name=netease_zh_overlap

【實現方案】

如圖所示,我們能看到,比起以往的“單個字”語序點選,這個驗證碼的難點在于“重疊漢字“,我們知道,一般的深度學習訓練單個漢字的圖像分類,我們假設一般的漢字常用字有3500個漢字。我們的輸出層維度一般是(1, 3500)

而對于重疊漢字的問題,我們有兩種建模形態,一種是兩個重疊的字作為一個整體,另一種是把兩個重疊的漢字分開,作為兩個獨立的分類任務。

我當前選擇的方案是前者,作為一個整體,為什么我不選擇后者呢?因為后者的重疊目標雖然區分開來,但是遮擋部分的特征太過隨機了,對于下層漢字被遮擋缺失的特征,很難識別出來具體的內容,而如果我們把它作為一個整體看待,我們特征既提取了上層漢字的特征,也能利用上層的特征推測下層漢字被遮擋部分的特征的可能性,能夠幫助網絡更加精準的推測出來具體的內容。

那么我們把大致的方向確立好了之后,就可以開始進一步的方案設計了,我們已經確立了把兩個重疊的漢字作為一個整體之后,我們就需要開始考慮如何對兩個漢字的識別建模了,首先我們有以下幾種方案的選擇:

  1. 作為多標簽分類,建模就是(1, 3500)一樣的輸出,只不過值是0-1范圍,作為概率,那么兩個重疊的漢字概率可以設置為0.5,0.5,或者1, 1。其余的分類都是0,如果我們使用這種方式建模,那么我們會遇到一個問題,因為絕大多數分類都是0,模型很容易收斂,即使忽略我們1的部分,損失一樣可以很小,在數學層面上,使用BCE損失很難達到預測出來我們需要的兩個重疊漢字的目的,所以我們需要對損失函數進行改進,設計一種能夠針對極端的正負樣本不平衡情況的損失函數。需要標注每張圖中的兩個漢字的內容,標注成本一般。
  2. 第二種就是我們把它作為兩個獨立的分類情況,區分上下層,建模就是(1, 2, 3500)這樣的話,我們可以把它作為兩個獨立的多分類任務,只不過這種方案對于標注的要求很高,需要區分上下層,人工外包單獨標注單個樣本的時候如果沒有其他組圖進行范圍參照的話,錯誤率挺高。
  3. 我們可以端到端的把四組圖作為一個批次的輸入(batch_size, 4, 224, 224, 3),這樣能夠加強每一組圖彼此之間的約束,我們的輸出可以有多個,結合上面兩種方案,順序輸出:(batch_size, 4,2,4),分類輸出(batch_size, 4,2, 3500)/(batch_size, 4,3500)。對于端到端的順序輸出,如果我們加入一個小型語言模型的多模態,或者直接單獨訓練這個語言模型再嵌入端到端模型中,都可以達到比較好的端到端效果,因為現實中我們挺難直接從樣本中獲取到盡可能多的成語的可能,我們單獨訓練語料庫的難度更低一些。網上有很多開源的語料庫可以下載作為訓練樣本。如果我們只保留順序輸出的話,樣本的成本最低,只需要對接人工標注平臺打碼的同時,采集驗證通過的圖,我們就能通過得到的順序坐標,結合一點點(500-1000張左右)目標檢測的成本,推理出四組圖的順序,自動化產生樣本標注。

有了以上的思路,我們嘗試實現它:

    def forward(self, inputs):batch_size, num_images, height, width, channel = inputs.size()predictions = self.core_net(inputs.view(batch_size, num_images, height, width, channel))predictions = predictions.view(batch_size, num_images, self.core_num_classes)embedded = self.embedding(predictions)batch_size, num_groups, embedding_dim = embedded.size()suit_gru, _ = self.pair_gru(embedded)global_gru, hidden_gru = self.global_gru(suit_gru)hidden_gru = hidden_gru.permute(1, 0, 2).contiguous()hidden_gru = hidden_gru.view(batch_size, self.hidden_dim)ranks = self.rank_dense(hidden_gru)ranks = ranks.view(batch_size, 2, num_groups).sigmoid()return ranks

再根據我們選擇的建模方案,來設計它對應的損失函數,可以根據我們已知的信息增加多維度的約束,比如我們得到的排序結果的因果關系,結果本身的取值范圍的數學規律,場景中存在的某些隱性規則,我們都可以把它作為損失中的加權的影響因子。如果是使用多標簽分類我們甚至可以設計一個專用的topk2損失。

除此之外,我們可以使用增強手段,比如把標注的樣本相同標注的可以隨機配對組合成語,作為一組新的樣本等等,損失計算也可以設計階梯式,引導網絡先學習某個容易學習的特征,學習好了再學習另一個特征,加速模型收斂。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38788.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38788.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38788.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python機器學習】模型評估與改進——簡單的網格搜索

為了提升模型的泛化性能,我們可以通過調參來實現。 在嘗試調參之前,重要的是理解參數的含義,找到一個模型的重要參數(提供最佳泛化性能的參數)的取值是一項棘手的任務,但對于幾乎所有模型和數據集來說都是…

API-Window對象

學習目標: 掌握Window對象 學習內容: BOM(瀏覽器對象模型)定時器-延時函數JS執行機制location對象navigation對象history對象 BOM(瀏覽器對象模型): BOM是瀏覽器對象模型。 window對象是一個全…

Windows 11的市場份額越來越大了,推薦你升級!

7月1日,系統之家發布最新數據,顯示Windows 11操作系統的市場份額正在穩步上升。自2021年10月Windows 11發布以來,Windows 10一直占據著市場主導地位,當時其市場份額高達81.44%。然而,隨著時間的推移,Window…

鴻蒙學習1:ArkTS基礎入門

1 變量和常量 1.1 變量 常見的基礎數據類型: string 字符串、number 數字、boolean布爾 判斷。 變量:專門用來存儲數據的容器。 語法:let 變量名: 數據類型 值。例如:let name: 張三;let price:number 12.4; let isSuccess …

【triton-inference-server】 官方python_backend 文檔及例子

https://github.com/triton-inference-server/python_backend#building-from-source 一。 從源碼構建python_backend root@ubuntu-server:/home/ubuntu/hzh# sudo apt-get install rapidjson-dev libarchive-dev zlib1g-dev Reading package lists... Done Building dependency…

vue3中的自定義指令

全局自定義指令 假設我們要創建一個全局指令v-highlight,用于高亮顯示元素。這個指令將接受一個顏色參數,并有一個可選的修飾符bold來決定是否加粗文本。 首先,在創建Vue應用時定義這個指令:(這里可以將指令抽離成單…

昂科燒錄器支持BPS晶豐明源半導體的多相Buck控制器BPD93004E

芯片燒錄行業領導者-昂科技術近日發布最新的燒錄軟件更新及新增支持的芯片型號列表,其中BPS晶豐明源半導體的多相Buck控制器BPD93004E已經被昂科的通用燒錄平臺AP8000所支持。 BPD93004E是一款多相Buck控制器,支持原生1~4相,數字方式控制&am…

科普文:一文搞懂jvm原理(二)類加載器

概敘 科普文:一文搞懂jvm(一)jvm概敘-CSDN博客 前面我們介紹了jvm,jvm主要包括兩個子系統和兩個組件: Class loader(類裝載器) 子系統,Execution engine(執行引擎) 子系統;Runtime data area (運行時數據區域)組件&am…

Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs

摘要 https://arxiv.org/pdf/2406.16860v1 我們介紹了Cambrian-1,這是一系列以視覺為中心的多模態大型語言模型(MLLMs)。盡管更強大的語言模型可以增強多模態能力,但視覺組件的設計選擇往往沒有得到充分的探索,并且與…

學習筆記(linux高級編程)9

void pthread_cleanup_push(void (*routine)(void *), void *arg); 功能:注冊一個線程清理函數 參數,routine,線程清理函數的入口 arg,清理函數的參數。 返回值,無 void pthread_cleanup_pop(int execute)…

Perl語言入門指南

一、緒論 1.1 Perl語言概述 1.2 Perl的特色 1.3 Perl面臨的問題 1.4 Perl語言的應用領域 二、Perl語言基礎 2.1 Perl語言的歷史發展 2.2 Perl語言的基本語法 2.3 Perl語言的數據類型 三、Perl語言控制結構 3.1 條件語句 3.2 循環結構 3.3 函數和子程序 四、Perl語…

OpenStack開源虛擬化平臺(一)

目錄 一、OpenStack背景介紹(一)OpenStack是什么(二)OpenStack的主要服務 二、計算服務Nova(一)Nova組件介紹(二)Libvirt簡介(三)Nova中的RabbitMQ解析 OpenS…

MySQL-數據操作類型的角度理解 S鎖 X鎖

文章目錄 1、S鎖和S鎖互相兼容2、S鎖和X鎖互斥3、X鎖和X鎖也互斥4、X鎖和S鎖也互斥5、select * from account for update;6、select * from account for update nowait;7、select * from account for update skip locked; 1、S鎖和S鎖互相兼容 2、S鎖和X鎖互斥 3、X鎖和X鎖也互…

20240702 每日AI必讀資訊

🔍GPTPdf:使用類似GPT-4o的多模態LLM分析PDF文件 - 使用類似 GPT-4o 多模態模型解析 PDF 文件,轉換為 Markdown 格式。 - 代碼簡潔高效,僅293行。 - 解析結果幾乎完美包括排版、數學公式、表格、圖片、圖表等內容。 &#x1…

【記錄】IDEA2023的激活與安裝

前言: 記錄IDEA2023的激活與安裝 第一步:官網下載安裝包: 下載地址:https://www.jetbrains.com/idea/download/other.html 這個最好選擇2023版本,用著很nice。 安裝步驟就不詳解了,無腦下一步就可以了…

(四十七)Vue Router之路由守衛

文章目錄 概念全局路由守衛全局前置守衛全局解析守衛全局后置路由守衛 獨享路由守衛組件內的守衛beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave 完整的導航解析流程 上一篇:(四十六)Vue Router組件所獨有的兩個鉤子activate、deactivat…

VLAN原理與配置

AUTHOR :閆小雨 DATE:2024-04-28 目錄 VLAN的三種端口類型 VLAN原理 什么是VLAN 為什么使用VLAN VLAN的基本原理 VLAN標簽 VLAN標簽各字段含義如下: VLAN的劃分方式 VLAN的劃分包括如下5種方法: VLAN的接口鏈路類型 創建V…

Android system.img掛載和解除掛載

Android system.img掛載和解除掛載 解包后的super.img,里面最重要的是system.img文件,如何對system.img進行掛載和解除掛載是需要掌握的能力 基礎知識 system.img、vendor.img 都存在兩種格式raw,sparse ,在ubuntu命令窗口下執行下執行&am…

深度學習之生成對抗網絡 BigGAN

BigGAN(Big Generative Adversarial Networks)是生成對抗網絡(GAN)的一種變體,專注于生成高質量、大尺寸的圖像。BigGAN 是由 DeepMind 的研究人員于 2018 年提出的。其核心思想是通過增加模型的規模(更深的網絡和更多的參數)來提高生成圖像的質量,同時引入一些新的技術…

便簽 Pro(Mac 智能便簽工具)專業版怎么樣,值得購買嗎?

使用 Mac 的小伙伴平時都是怎么記錄工作生活中的碎片信息?用聊天軟件,還是系統備忘錄呢? 實際體驗下來,其實都難以稱得上好用。 趕緊來了解一下 Mac 多彩思維速記工具便簽 Pro!擁有智能邊框大小、iCloud 同步、歷史記…