關於dnn基於python的實現的信息

本文目錄一覽:

高大上的YOLOV3對象檢測算法,使用python也可輕鬆實現

繼續我們的目標檢測算法的分享,前期我們介紹了SSD目標檢測算法的python實現以及Faster-RCNN目標檢測算法的python實現以及yolo目標檢測算法的darknet的window環境安裝,本期我們簡單介紹一下如何使用python來進行YOLOV3的對象檢測算法

YOLOV3的基礎知識大家可以參考往期文章,本期重點介紹如何使用python來實現

1、初始化模型

14-16 行:

模型的初始化依然使用cv下的DNN模型來加載模型,需要注意的是CV的版本需要大於3.4.2

5-8行:

初始化模型在coco上的label以便後期圖片識別使用

10-12行:

初始化圖片顯示方框的顏色

2、加載圖片,進行圖片識別

輸入識別的圖片進行圖片識別,這部分代碼跟往期的SSD 以及RCNN目標檢測算法類似

19-20行:輸入圖片,獲取圖片的長度與寬度

25-29行:計算圖片的blob值,輸入神經網絡,進行前向反饋預測圖片

只不過net.forward裏面是ln, 神經網絡的所有out層

3、遍歷所有的out層,獲取檢測圖片的label與置信度

遍歷out層,獲取檢測到的label值以及置信度,檢測到這裡YOLOV3以及把所有的檢測計算完成,但是由於yolov3對重疊圖片或者靠的比較近的圖片檢測存在一定的問題,使用YOLOV3使用非最大值抑制來抑制弱的重疊邊界

竟然把墨鏡識別了手機,體現了YOLOV3在重疊圖片識別的缺點

4、應用非最大值抑制來抑制弱的重疊邊界,顯示圖片

56: 使用 非最大值抑制來抑制弱的重疊邊界

58-59行:遍歷所有圖片

61-62行:提取檢測圖片的BOX

64-68行:顯示圖片信息

70-71行:顯示圖片

利用python來實現YOLOV3,與SSD 以及RCNN代碼有很多類似的地方,大家可以參考往期的文章進行對比學習,把代碼執行一遍

進行視頻識別的思路:從視頻中提取圖片,進行圖片識別,識別完成後,再把識別的結果實時體現在視頻中,這部分代碼結合前期的視頻識別,大家可以參考多進程視頻實時識別篇,因為沒有多進程,檢測速度很慢,視頻看着比較卡

1、初始化模型以及視頻流

2、從視頻中提取圖片,進行圖片的blob值計算,進行神經網絡的預測

3、提取檢測到圖片的置信度以及ID值

4、 應用非最大值抑制來抑制弱的重疊邊界,顯示圖片

5、關閉資源,顯示圖片處理信息

每個目標檢測算法都有自己的優缺點,個人感覺,在精度要求不是太高的情況下SSD檢測算法可以實現較快的速度實現,畢竟精度差不多的情況下,我們希望速度越快越好

如何利用 Python 實現 SVM 模型

我先直觀地闡述我對SVM的理解,這其中不會涉及數學公式,然後給出Python代碼。

SVM是一種二分類模型,處理的數據可以分為三類:

線性可分,通過硬間隔最大化,學習線性分類器

近似線性可分,通過軟間隔最大化,學習線性分類器

線性不可分,通過核函數以及軟間隔最大化,學習非線性分類器

線性分類器,在平面上對應直線;非線性分類器,在平面上對應曲線。

硬間隔對應於線性可分數據集,可以將所有樣本正確分類,也正因為如此,受噪聲樣本影響很大,不推薦。

軟間隔對應於通常情況下的數據集(近似線性可分或線性不可分),允許一些超平面附近的樣本被錯誤分類,從而提升了泛化性能。

如下圖:

實線是由硬間隔最大化得到的,預測能力顯然不及由軟間隔最大化得到的虛線。

對於線性不可分的數據集,如下圖:

我們直觀上覺得這時線性分類器,也就是直線,不能很好的分開紅點和藍點。

但是可以用一個介於紅點與藍點之間的類似圓的曲線將二者分開,如下圖:

我們假設這個黃色的曲線就是圓,不妨設其方程為x^2+y^2=1,那麼核函數是幹什麼的呢?

我們將x^2映射為X,y^2映射為Y,那麼超平面變成了X+Y=1。

那麼原空間的線性不可分問題,就變成了新空間的(近似)線性可分問題。

此時就可以運用處理(近似)線性可分問題的方法去解決線性不可分數據集的分類問題。

—————————————————————————————————————————

以上我用最簡單的語言粗略地解釋了SVM,沒有用到任何數學知識。但是沒有數學,就體會不到SVM的精髓。因此接下來我會用盡量簡潔的語言敘述SVM的數學思想,如果沒有看過SVM推導過程的朋友完全可以跳過下面這段。

對於求解(近似)線性可分問題:

由最大間隔法,得到凸二次規劃問題,這類問題是有最優解的(理論上可以直接調用二次規劃計算包,得出最優解)

我們得到以上凸優化問題的對偶問題,一是因為對偶問題更容易求解,二是引入核函數,推廣到非線性問題。

求解對偶問題得到原始問題的解,進而確定分離超平面和分類決策函數。由於對偶問題里目標函數和分類決策函數只涉及實例與實例之間的內積,即xi,xj。我們引入核函數的概念。

拓展到求解線性不可分問題:

如之前的例子,對於線性不可分的數據集的任意兩個實例:xi,xj。當我們取某個特定映射f之後,f(xi)與f(xj)在高維空間中線性可分,運用上述的求解(近似)線性可分問題的方法,我們看到目標函數和分類決策函數只涉及內積f(xi),f(xj)。由於高維空間中的內積計算非常複雜,我們可以引入核函數K(xi,xj)=f(xi),f(xj),因此內積問題變成了求函數值問題。最有趣的是,我們根本不需要知道映射f。精彩!

我不準備在這裡放推導過程,因為已經有很多非常好的學習資料,如果有興趣,可以看:CS229 Lecture notes

最後就是SMO算法求解SVM問題,有興趣的話直接看作者論文:Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines

我直接給出代碼:SMO+SVM

在線性可分數據集上運行結果:

圖中標出了支持向量這個非常完美,支持向量都在超平面附近。

在線性不可分數據集上運行結果(200個樣本):

核函數用了高斯核,取了不同的sigma

sigma=1,有189個支持向量,相當於用整個數據集進行分類。

sigma=10,有20個支持向量,邊界曲線能較好的擬合數據集特點。

我們可以看到,當支持向量太少,可能會得到很差的決策邊界。如果支持向量太多,就相當於每次都利用整個數據集進行分類,類似KNN。

怎樣用python實現深度學習

基於Python的深度學習庫、深度學習方向、機器學習方向、自然語言處理方向的一些網站基本都是通過Python來實現的。

機器學習,尤其是現在火爆的深度學習,其工具框架大都提供了Python接口。Python在科學計算領域一直有着較好的聲譽,其簡潔清晰的語法以及豐富的計算工具,深受此領域開發者喜愛。

早在深度學習以及Tensorflow等框架流行之前,Python中即有scikit-learn,能夠很方便地完成幾乎所有機器學習模型,從經典數據集下載到構建模型只需要簡單的幾行代碼。配合Pandas、matplotlib等工具,能很簡單地進行調整。

而Tensorflow、PyTorch、MXNet、Keras等深度學習框架更是極大地拓展了機器學習的可能。使用Keras編寫一個手寫數字識別的深度學習網絡僅僅需要寥寥數十行代碼,即可藉助底層實現,方便地調用包括GPU在內的大量資源完成工作。

值得一提的是,無論什麼框架,Python只是作為前端描述用的語言,實際計算則是通過底層的C/C++實現。由於Python能很方便地引入和使用C/C++項目和庫,從而實現功能和性能上的擴展,這樣的大規模計算中,讓開發者更關注邏輯於數據本身,而從內存分配等繁雜工作中解放出來,是Python被廣泛應用到機器學習領域的重要原因。

CNN詳解-基於python基礎庫實現的簡單CNN

CNN,即卷積神經網絡,主要用於圖像識別,分類。由輸入層,卷積層,池化層,全連接層(Affline層),Softmax層疊加而成。卷積神經網絡中還有一個非常重要的結構:過濾器,它作用於層與層之間(卷積層與池化層),決定了怎樣對數據進行卷積和池化。下面先直觀理解下卷積和池化

二維卷積

三維卷積

池化

好了,知道卷積池化,下面就來實現最簡單的一個卷積網絡:

原創文章,作者:SYPS,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/134311.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SYPS的頭像SYPS
上一篇 2024-10-04 00:05
下一篇 2024-10-04 00:05

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論