国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

幫網(wǎng)貸做網(wǎng)站會判刑嗎網(wǎng)站加速器

幫網(wǎng)貸做網(wǎng)站會判刑嗎,網(wǎng)站加速器,wordpress 商品 模板,263企業(yè)郵箱登錄登錄1. 簡介 YOLOv8 是一種用于目標檢測的深度學習模型,它是 YOLO(You Only Look Once)系列的最新版本之一。YOLO 系列因其高效和準確性而在計算機視覺領(lǐng)域非常受歡迎,特別是在需要實時目標檢測的應用中,如視頻監(jiān)控、自動…

1. 簡介

YOLOv8 是一種用于目標檢測的深度學習模型,它是 YOLO(You Only Look Once)系列的最新版本之一。YOLO 系列因其高效和準確性而在計算機視覺領(lǐng)域非常受歡迎,特別是在需要實時目標檢測的應用中,如視頻監(jiān)控、自動駕駛汽車、機器人視覺等。

以下是 YOLOv8 的一些關(guān)鍵特點:

  • 實時性能:YOLOv8 旨在提供實時目標檢測,即使在資源受限的設(shè)備上也能快速運行。
  • 準確性:YOLOv8 在多個標準數(shù)據(jù)集上展示了其準確性,能夠檢測圖像中的多種對象。
  • 單階段檢測器:與多階段檢測器相比,YOLOv8 采用單階段檢測方法,這意味著它在網(wǎng)絡(luò)的前向傳播過程中只需一次即可完成檢測任務(wù)。
  • 端到端對象識別:YOLOv8 能夠同時預測邊界框、對象類別和每個框的置信度。
  • 泛化能力:YOLOv8 在不同大小和形狀的對象上都表現(xiàn)出良好的泛化能力。
  • 易于部署:YOLOv8 支持轉(zhuǎn)換為不同的格式,如 TensorFlow Lite,使得它可以輕松部署在移動設(shè)備和嵌入式系統(tǒng)中。
  • 自定義訓練:YOLOv8 允許用戶使用自己的數(shù)據(jù)集進行自定義訓練,以適應特定的檢測任務(wù)。

2.模型轉(zhuǎn)換

2.1 tflite模型

TensorFlow Lite (tflite) 是一種用于移動和嵌入式設(shè)備上的機器學習模型的格式。它允許開發(fā)者將訓練好的 TensorFlow 模型轉(zhuǎn)換為一個更小、更快、更高效的格式,以便于在資源受限的環(huán)境中運行,比如智能手機和微控制器。

  • 模型優(yōu)化:TensorFlow Lite 支持將模型量化,以減少模型的大小和提高運行效率。
  • 跨平臺:tflite 模型可以在多種設(shè)備上運行,包括 Android、iOS 和一些嵌入式設(shè)備。
  • 實時性能:由于模型體積小,加載快,非常適合需要實時響應的應用,如圖像識別、語音識別等。
  • 轉(zhuǎn)換過程:TensorFlow 提供了工具來將 TensorFlow 模型(例如 SavedModel 或 HDF5)轉(zhuǎn)換為 tflite 格式。
  • 硬件加速:tflite 支持一些硬件加速器,如 GPU、Edge TPU,可以進一步提高運行速度。
  • 使用 TensorFlow Lite Interpreter:在應用中,通常使用 TensorFlow Lite Interpreter 來加載和運行 tflite 模型。
  • 兼容性:tflite 模型與 TensorFlow.js 類似,但專為不同的運行環(huán)境設(shè)計。tflite 適用于移動和嵌入式設(shè)備,而 TensorFlow.js 適用于瀏覽器和 Node.js 環(huán)境。
  • 部署:在 Android 或 iOS 應用中,tflite 模型可以作為資源文件被打包和部署。
  • 更新和維護:tflite 模型可以像其他資源一樣被更新,無需重新構(gòu)建整個應用。

2.2 Pytorch 格式轉(zhuǎn)換為 tflite 格式

YOLOv8 是以 pytorch 格式構(gòu)建的。將其轉(zhuǎn)換為 tflite,以便在 Android 上使用。
安裝 Ultralytics 框架
使用 pip 安裝 Ultralytics 框架,該框架包含了 YOLOv8:

conda create -n yolov8 python=3.8
activate ylolv8
pip install ultralytics

轉(zhuǎn)換模型為 tflite 格式
使用 Ultralytics 框架提供的 YOLO 類來加載 PyTorch 格式的 YOLOv8 模型,并導出為 tflite 格式:

  from ultralytics import YOLOmodel = YOLO('yolov8s.pt')  # 這里 'yolov8s.pt' 是模型權(quán)重文件model.export(format="tflite")

這將生成一個 tflite 文件,例如 yolov8s_saved_model/yolov8s_float16.tflite

處理轉(zhuǎn)換過程中的錯誤
如果在轉(zhuǎn)換過程中遇到錯誤,特別是與 TensorFlow 版本相關(guān)的問題,需要安裝一個特定版本的 TensorFlow 來解決兼容性問題:

  pip install tensorflow==2.13.0

3.創(chuàng)建項目

3.1 創(chuàng)建項目

創(chuàng)建一個安卓項目,語言選擇Kotlin,如下圖所示:
在這里插入圖片描述
然后在 Android Studio 項目的 app 目錄中創(chuàng)建一個 assets 目錄(文件 → 新建 → 文件夾 → 資產(chǎn)文件夾),并將 tflite 文件(例如 yolov8s_float32.tflite)和 labels.txt 添加進去。labels.txt其中描述了 YOLOv8 模型的類別名稱。

  1. 打開 Android Studio 項目。
  2. 在項目瀏覽器中,定位到 app 目錄。
  3. 右鍵點擊 app 目錄,選擇 New > Folder > Asset Folder
  4. 輸入文件夾名稱 assets 并確認創(chuàng)建。
  5. 打開新創(chuàng)建的 assets 文件夾。
  6. 通過復制和粘貼的方式,將 yolov8s_float32.tflite 文件和 labels.txt 文件添加到此文件夾中。

3.2 添加依賴

將以下內(nèi)容添加到 app/build.gradle.kts 中的依賴項以安裝 tflite 框架。

implementation("org.tensorflow:tensorflow-lite:2.14.0")
implementation("org.tensorflow:tensorflow-lite-support:0.4.4")

導入所需的模塊

import org.tensorflow.lite.DataType
import org.tensorflow.lite.Interpreter
import org.tensorflow.lite.gpu.CompatibilityList
import org.tensorflow.lite.gpu.GpuDelegate
import org.tensorflow.lite.support.common.FileUtil
import org.tensorflow.lite.support.common.ops.CastOp
import org.tensorflow.lite.support.common.ops.NormalizeOp
import org.tensorflow.lite.support.image.ImageProcessor
import org.tensorflow.lite.support.image.TensorImage
import org.tensorflow.lite.support.tensorbuffer.TensorBuffer
import java.io.BufferedReader
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader

3.3 初始化模型

private val modelPath = "yolov8s_float32.tflite"
private val labelPath = "labels.txt"
private var interpreter: Interpreter? = null
private var tensorWidth = 0
private var tensorHeight = 0
private var numChannel = 0
private var numElements = 0
private var labels = mutableListOf<String>()
private val imageProcessor = ImageProcessor.Builder().add(NormalizeOp(INPUT_MEAN, INPUT_STANDARD_DEVIATION)).add(CastOp(INPUT_IMAGE_TYPE)).build() // preprocess input
companion object {private const val INPUT_MEAN = 0fprivate const val INPUT_STANDARD_DEVIATION = 255fprivate val INPUT_IMAGE_TYPE = DataType.FLOAT32private val OUTPUT_IMAGE_TYPE = DataType.FLOAT32private const val CONFIDENCE_THRESHOLD = 0.3Fprivate const val IOU_THRESHOLD = 0.5F
}

初始化 tflite 模型。獲取模型文件并將其傳遞給 tflite 的 Interpreter。選擇推理使用的線程數(shù)。

val model = FileUtil.loadMappedFile(context, modelPath)
val options = Interpreter.Options()
options.numThreads = 4
interpreter = Interpreter(model, options)

從 Interpreter 獲取 yolov8s 輸入和輸層:

val inputShape = interpreter.getInputTensor(0).shape()
val outputShape = interpreter.getOutputTensor(0).shape()tensorWidth = inputShape[1]
tensorHeight = inputShape[2]
numChannel = outputShape[1]
numElements = outputShape[2]

3.4 從 label.txt 文件中讀取類名稱

try {val inputStream: InputStream = context.assets.open(labelPath)val reader = BufferedReader(InputStreamReader(inputStream))var line: String? = reader.readLine()while (line != null && line != "") {labels.add(line)line = reader.readLine()}reader.close()inputStream.close()
} catch (e: IOException) {e.printStackTrace()
}

3.5 對圖像進行推理

在 Android 應用中,輸入是位圖(Bitmap),需要根據(jù)模型的輸入格式進行預處理:

  • 調(diào)整圖片大小:將位圖調(diào)整為模型所需的輸入尺寸。YOLOv8 模型通常有固定的輸入尺寸,例如 416x416 或 608x608。
  • 轉(zhuǎn)換為張量:將調(diào)整大小后的位圖轉(zhuǎn)換為一個多維數(shù)組(張量),這是模型可以處理的格式。
  • 歸一化像素值:將像素值從 0 到 255 歸一化到 0 到 1 范圍內(nèi)。這通常通過將每個像素值除以 255 來實現(xiàn)。
  • 轉(zhuǎn)換為模型的輸入類型:根據(jù)模型的需要,將張量轉(zhuǎn)換為特定的數(shù)據(jù)類型(如 float 或 uint8)。
  • 輸入到 Interpreter:將預處理后的張量作為輸入傳遞給 TensorFlow Lite Interpreter 進行推理。
import android.graphics.Bitmap;
import android.graphics.ImageFormat;
import org.tensorflow.lite.Interpreter;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.WritableByteChannel;// 假設(shè) tflite 已經(jīng)初始化,且 bitmap 是您要處理的位圖
Bitmap bitmapval resizedBitmap = Bitmap.createScaledBitmap(bitmap, tensorWidth, tensorHeight, false)
val tensorImage = TensorImage(DataType.FLOAT32)
tensorImage.load(resizedBitmap)
val processedImage = imageProcessor.process(tensorImage)
val imageBuffer = processedImage.buffer

創(chuàng)建一個與模型輸出層匹配的輸出張量緩沖區(qū),并將其與上面的輸入 imageBuffer 一起傳遞給解釋器以執(zhí)行。

val output = TensorBuffer.createFixedSize(intArrayOf(1 , numChannel, numElements), OUTPUT_IMAGE_TYPE)
interpreter.run(imageBuffer, output.buffer)

3.6 處理輸出

輸出框被視為 BoudingBox 類。這是一個具有類別、框和置信度級別的類。其中x1,y1 是起始點。x2, y2 是終點,cx, cy 是中心。w 寬度,h 是高度。

data class BoundingBox(val x1: Float,val y1: Float,val x2: Float,val y2: Float,val cx: Float,val cy: Float,val w: Float,val h: Float,val cnf: Float,val cls: Int,val clsName: String
)

提取置信度高于置信度閾值的框,在重疊的框中,留下置信度最高的框。(nms)

private fun bestBox(array: FloatArray) : List<BoundingBox>? {val boundingBoxes = mutableListOf<BoundingBox>()for (c in 0 until numElements) {var maxConf = -1.0f        var maxIdx = -1        var j = 4        var arrayIdx = c + numElements * jwhile (j < numChannel){if (array[arrayIdx] > maxConf) {maxConf = array[arrayIdx]maxIdx = j - 4}j++arrayIdx += numElements}if (maxConf > CONFIDENCE_THRESHOLD) {val clsName = labels[maxIdx]val cx = array[c] // 0            val cy = array[c + numElements] // 1            val w = array[c + numElements * 2]val h = array[c + numElements * 3]val x1 = cx - (w/2F)val y1 = cy - (h/2F)val x2 = cx + (w/2F)val y2 = cy + (h/2F)if (x1 < 0F || x1 > 1F) continue            if (y1 < 0F || y1 > 1F) continue            if (x2 < 0F || x2 > 1F) continue            if (y2 < 0F || y2 > 1F) continueboundingBoxes.add(BoundingBox(x1 = x1, y1 = y1, x2 = x2, y2 = y2,cx = cx, cy = cy, w = w, h = h,cnf = maxConf, cls = maxIdx, clsName = clsName))}}if (boundingBoxes.isEmpty()) return null    return applyNMS(boundingBoxes)
}private fun applyNMS(boxes: List<BoundingBox>) : MutableList<BoundingBox> {val sortedBoxes = boxes.sortedByDescending { it.cnf }.toMutableList()val selectedBoxes = mutableListOf<BoundingBox>()while(sortedBoxes.isNotEmpty()) {val first = sortedBoxes.first()selectedBoxes.add(first)sortedBoxes.remove(first)val iterator = sortedBoxes.iterator()while (iterator.hasNext()) {val nextBox = iterator.next()val iou = calculateIoU(first, nextBox)if (iou >= IOU_THRESHOLD) {iterator.remove()}}}return selectedBoxes
}private fun calculateIoU(box1: BoundingBox, box2: BoundingBox): Float {val x1 = maxOf(box1.x1, box2.x1)val y1 = maxOf(box1.y1, box2.y1)val x2 = minOf(box1.x2, box2.x2)val y2 = minOf(box1.y2, box2.y2)val intersectionArea = maxOf(0F, x2 - x1) * maxOf(0F, y2 - y1)val box1Area = box1.w * box1.hval box2Area = box2.w * box2.hreturn intersectionArea / (box1Area + box2Area - intersectionArea)
}

將獲得 yolov8 的輸出。

val bestBoxes = bestBox(output.floatArray)

將輸出框繪制到圖像上

fun drawBoundingBoxes(bitmap: Bitmap, boxes: List<BoundingBox>): Bitmap {val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)val canvas = Canvas(mutableBitmap)val paint = Paint().apply {color = Color.REDstyle = Paint.Style.STROKEstrokeWidth = 8f}val textPaint = Paint().apply {color = Color.WHITEtextSize = 40ftypeface = Typeface.DEFAULT_BOLD}for (box in boxes) {val rect = RectF(box.x1 * mutableBitmap.width,box.y1 * mutableBitmap.height,box.x2 * mutableBitmap.width,box.y2 * mutableBitmap.height)canvas.drawRect(rect, paint)canvas.drawText(box.clsName, rect.left, rect.bottom, textPaint)}return mutableBitmap
}

運行結(jié)果:
在這里插入圖片描述

http://aloenet.com.cn/news/28049.html

相關(guān)文章:

  • 個人網(wǎng)站營業(yè)執(zhí)照百度搜索引擎地址
  • WordPress P站優(yōu)化二十條
  • 如何做資源論壇網(wǎng)站百度推廣和優(yōu)化哪個好
  • 南昌網(wǎng)站建設(shè)費用四川seo優(yōu)化
  • 做網(wǎng)站的要多錢百度關(guān)鍵詞優(yōu)化
  • 網(wǎng)站開發(fā)難點站長工具seo查詢
  • wordpress添加文章副標題谷歌seo服務(wù)商
  • 泰興網(wǎng)站制作網(wǎng)絡(luò)營銷策劃方案模板
  • 搭建網(wǎng)站做財務(wù)系統(tǒng)網(wǎng)站建設(shè)流程步驟
  • 網(wǎng)友seo排名賺掛機
  • 成功網(wǎng)站管理系統(tǒng)十大網(wǎng)絡(luò)推廣公司排名
  • 做網(wǎng)站宣傳多少錢如何快速網(wǎng)絡(luò)推廣
  • 做網(wǎng)站的外包能學到什么磁力蜘蛛
  • 大連網(wǎng)站建設(shè)seo怎么去優(yōu)化
  • 重慶市衛(wèi)生健康委員會福州短視頻seo網(wǎng)站
  • 天津重型網(wǎng)站建設(shè)推薦沈陽網(wǎng)站seo公司
  • 國內(nèi)外網(wǎng)站建設(shè)長沙關(guān)鍵詞優(yōu)化平臺
  • 手機打開網(wǎng)站自動跳轉(zhuǎn)網(wǎng)站優(yōu)化排名推薦
  • 做生意必定紅火的公司名字win10優(yōu)化
  • 網(wǎng)站favicon.ico 大小做網(wǎng)站用什么軟件
  • 做網(wǎng)站公司名字應該用圖片嗎網(wǎng)站seo優(yōu)化工具
  • 聯(lián)通營業(yè)廳做網(wǎng)站維護知乎營銷平臺
  • 東莞網(wǎng)站維護網(wǎng)站制作費用一覽表
  • 廣安網(wǎng)站制作設(shè)計掃描圖片找原圖
  • 濟寧網(wǎng)站建設(shè)關(guān)鍵字是什么意思
  • 企業(yè)管理軟件是什么杭州seo博客
  • 微信網(wǎng)站制作價格競價防惡意點擊
  • 做爰視頻無風險網(wǎng)站廣告有限公司
  • 服裝店網(wǎng)站模板網(wǎng)站快速建站
  • 深圳龍崗網(wǎng)站維護阿里域名購買網(wǎng)站