YOLOv3物體/目標(biāo)檢測(cè)之實(shí)戰(zhàn)篇(Windows系統(tǒng)、Python3、TensorFlow2版本)

      網(wǎng)友投稿 1806 2022-05-25

      前言

      基于YOLO進(jìn)行物體檢測(cè)、對(duì)象識(shí)別,在搭建好開發(fā)環(huán)境后,先和大家進(jìn)行實(shí)踐應(yīng)用中,體驗(yàn)YOLOv3物體/目標(biāo)檢測(cè)效果和魅力;同時(shí)逐步了解YOLOv3的不足和優(yōu)化思路。

      開發(fā)環(huán)境參數(shù)

      系統(tǒng):Windows? ? ???編程語言:Python 3.8

      深度學(xué)習(xí)框架:TensorFlow 2.3? ? ? ??整合開發(fā)環(huán)境:Anaconda? ? ? ??開發(fā)代碼IDE:PyCharm

      主要使用TensorFlow2.3、opencv-python4.4.0、Pillow、matplotlib?等依賴庫。

      詳情請(qǐng)參考我的另一篇博客:https://bbs.huaweicloud.com/blogs/206824

      目錄

      前言

      開發(fā)環(huán)境參數(shù)

      體驗(yàn)YOLOv3物體/目標(biāo)檢測(cè)

      1)下載代碼,打開工程

      2)下載權(quán)重文件

      3)權(quán)重文件應(yīng)用到工程

      4)進(jìn)行目標(biāo)檢測(cè)

      調(diào)用模型的核心代碼

      YOLOv3的物體/目標(biāo)檢測(cè)效果:

      1)有四只小貓被檢測(cè)出來:

      使用淺藍(lán)色的框框,把小貓的所在位置框出來,并在框框上方注釋標(biāo)簽(類別 置信度)。比如第一只小貓檢測(cè)出的標(biāo)簽是cat ,置信度是0.95,即有95%的把握認(rèn)為是cat 貓。

      YOLOv3物體/目標(biāo)檢測(cè)之實(shí)戰(zhàn)篇(Windows系統(tǒng)、Python3、TensorFlow2版本)

      2)一只小狗和一只小貓同時(shí)被檢測(cè)出來:

      小貓被檢測(cè)出是cat,1.00;有100%的把握認(rèn)為是cat 貓;

      小狗被檢測(cè)出是dog,0.97;有97%的把握認(rèn)為是cat 貓;

      3)在復(fù)雜的十字路口,有許多行人和車輛被檢測(cè)出來了:

      大家可以看到大部分的行人、小汽車和公交車是被檢測(cè)出來了,存在小部分沒有被檢測(cè)出來;如果是做特定場(chǎng)景的目標(biāo)檢測(cè),建議大家后續(xù)采購特定場(chǎng)景的數(shù)據(jù),重新訓(xùn)練網(wǎng)絡(luò),生成穩(wěn)定且高精度的模型,保存權(quán)重文件,便于后續(xù)使用。

      體驗(yàn)YOLOv3物體/目標(biāo)檢測(cè)

      1)下載代碼,打開工程

      先到githug下載代碼,然后解壓工程,然后使用PyCharm工具打開工程;

      githug代碼-:https://github.com/guo-pu/yolov3-tf2

      說明:此倉庫代碼源于zzh8829/yolov3-tf2?進(jìn)行修改的,zzh8829/yolov3-tf2代碼倉庫地址?:https://github.com/zzh8829/yolov3-tf2

      使用PyCharm工具打開工程:

      打開后的頁面是這樣的:

      【選擇開發(fā)環(huán)境】

      文件(file)——>設(shè)置(setting)——>項(xiàng)目(Project)——>Project Interpreters? ?選擇搭建的開發(fā)環(huán)境;

      然后先點(diǎn)擊Apply,等待加載完成,再點(diǎn)擊OK;

      2)下載權(quán)重文件

      方式1:使用wget 來下載

      前提:需要支持wget命令;

      yolov3.weights、yolov3-tiny.weights都是預(yù)先訓(xùn)練好的Darknet網(wǎng)絡(luò)權(quán)重;

      yolov3.weights? ?是默認(rèn)的權(quán)重,支持識(shí)別目標(biāo)的類別更多更精準(zhǔn);

      yolov3-tiny.weights? 是應(yīng)用在輕量級(jí)設(shè)備的權(quán)重,對(duì)設(shè)備的性能要求沒這么高,相對(duì)yolov3.weights響應(yīng)速度更快;

      進(jìn)入windows管理員命令窗口:

      下載yolov3.weights權(quán)重文件】

      進(jìn)入存放數(shù)據(jù)的目錄,比如e盤的data目錄,然后執(zhí)行如下命令進(jìn)行下載權(quán)重值:

      wget https://pjreddie.com/media/files/yolov3.weights? -O? .\yolov3.weights

      然后就會(huì)開始下載了;

      【下載yolov3-tiny.weights權(quán)重文件】

      wget https://pjreddie.com/media/files/yolov3-tiny.weights??-O .\yolov3-tiny.weights

      下載好后,來到存放的目錄檢測(cè)是否下載成功和完整;

      方式2:在我網(wǎng)盤提取

      鏈接: https://pan.baidu.com/s/1TK4EEWsCHPyunNkJ98Mhjw

      提取碼: urad

      然后把數(shù)據(jù)復(fù)制到下載工程包中,yolov3-tf2-master\data

      3)權(quán)重文件應(yīng)用到工程

      執(zhí)行如下命令,把訓(xùn)練好的權(quán)重進(jìn)行轉(zhuǎn)換,并應(yīng)用到工程中。

      在Pycharm的命令終端進(jìn)入YOLO3-GPU-TensorFlow2開發(fā)環(huán)境:

      conda activate YOLO3-GPU-TensorFlow2

      【yolov3.weights】

      python convert.py --weights ./data/yolov3.weights --output ./checkpoints/yolov3.tf

      執(zhí)行命令成功后,能看到在checkpoints目錄下有三個(gè)新增文件

      【yolov3-tiny.weights】(可選)

      python convert.py --weights ./data/yolov3-tiny.weights --output ./checkpoints/yolov3-tiny.tf --tiny

      4)進(jìn)行目標(biāo)檢測(cè)

      檢測(cè)圖片中的目標(biāo):

      python detect.py --image ./data/cat.jpg

      有四只小貓被檢測(cè)出來:使用淺藍(lán)色的框框,把小貓的所在位置框出來,并在框框上方注釋標(biāo)簽(類別 置信度)。比如第一只小貓檢測(cè)出的標(biāo)簽是cat ,置信度是0.95,即有95%的把握認(rèn)為是cat 貓。

      我們可以指定目標(biāo)檢測(cè)后生成的圖片:

      python detect.py --image ./data/cat-dog2.png? ??--output ./data/cat-dog2-output.png

      一只小狗和一只小貓同時(shí)被檢測(cè)出來:小貓被檢測(cè)出是cat,1.00;有100%的把握認(rèn)為是cat 貓;小狗被檢測(cè)出是dog,0.97;有97%的把握認(rèn)為是cat 貓;

      我們還可以嘗試使用攝像頭實(shí)時(shí)目標(biāo)檢測(cè),或?qū)σ曨l文件進(jìn)行目標(biāo)檢測(cè),詳細(xì)參看如下:

      目標(biāo)檢測(cè)執(zhí)行命令匯總:

      #?yolov3?檢測(cè)圖片的對(duì)象 python?detect.py?--image?./data/cat.jpg ? #?yolov3-tiny python?detect.py?--weights?./checkpoints/yolov3-tiny.tf?--tiny?--image?./data/street.jpg ? #?webcam??攝像頭實(shí)時(shí)檢測(cè)對(duì)象 python?detect_video.py?--video?0 ? #?video?file???檢測(cè)視頻文件的對(duì)象 python?detect_video.py?--video?path_to_file.mp4?--weights?./checkpoints/yolov3-tiny.tf?--tiny ? #?video?file?with?output python?detect_video.py?--video?path_to_file.mp4?--output?./output.avi

      調(diào)用模型的核心代碼

      detect.py 代碼:??# yolov3 檢測(cè)圖片的對(duì)象

      import?time from?absl?import?app,?flags,?logging from?absl.flags?import?FLAGS import?cv2 import?numpy?as?np import?tensorflow?as?tf from?yolov3_tf2.models?import?( ????YoloV3,?YoloV3Tiny ) from?yolov3_tf2.dataset?import?transform_images,?load_tfrecord_dataset from?yolov3_tf2.utils?import?draw_outputs ? flags.DEFINE_string('classes',?'./data/coco.names',?'path?to?classes?file') flags.DEFINE_string('weights',?'./checkpoints/yolov3.tf', ????????????????????'path?to?weights?file') flags.DEFINE_boolean('tiny',?False,?'yolov3?or?yolov3-tiny') flags.DEFINE_integer('size',?416,?'resize?images?to') flags.DEFINE_string('image',?'./data/girl.png',?'path?to?input?image') flags.DEFINE_string('tfrecord',?None,?'tfrecord?instead?of?image') flags.DEFINE_string('output',?'./output.jpg',?'path?to?output?image') flags.DEFINE_integer('num_classes',?80,?'number?of?classes?in?the?model') ? ? def?main(_argv): ????physical_devices?=?tf.config.experimental.list_physical_devices('GPU') ????for?physical_device?in?physical_devices: ????????tf.config.experimental.set_memory_growth(physical_device,?True) ? ????if?FLAGS.tiny: ????????yolo?=?YoloV3Tiny(classes=FLAGS.num_classes) ????else: ????????yolo?=?YoloV3(classes=FLAGS.num_classes) ? ????yolo.load_weights(FLAGS.weights).expect_partial() ????logging.info('weights?loaded') ? ????class_names?=?[c.strip()?for?c?in?open(FLAGS.classes).readlines()] ????logging.info('classes?loaded') ? ????if?FLAGS.tfrecord: ????????dataset?=?load_tfrecord_dataset( ????????????FLAGS.tfrecord,?FLAGS.classes,?FLAGS.size) ????????dataset?=?dataset.shuffle(512) ????????img_raw,?_label?=?next(iter(dataset.take(1))) ????else: ????????img_raw?=?tf.image.decode_image( ????????????open(FLAGS.image,?'rb').read(),?channels=3) ? ????img?=?tf.expand_dims(img_raw,?0) ????img?=?transform_images(img,?FLAGS.size) ? ????t1?=?time.time() ????boxes,?scores,?classes,?nums?=?yolo(img) ????t2?=?time.time() ????logging.info('time:?{}'.format(t2?-?t1)) ? ????logging.info('detections:') ????for?i?in?range(nums[0]): ????????logging.info('\t{},?{},?{}'.format(class_names[int(classes[0][i])], ???????????????????????????????????????????np.array(scores[0][i]), ???????????????????????????????????????????np.array(boxes[0][i]))) ? ????img?=?cv2.cvtColor(img_raw.numpy(),?cv2.COLOR_RGB2BGR) ????img?=?draw_outputs(img,?(boxes,?scores,?classes,?nums),?class_names) ????cv2.imwrite(FLAGS.output,?img) ????logging.info('output?saved?to:?{}'.format(FLAGS.output)) ? ? if?__name__?==?'__main__': ????try: ????????app.run(main) ????except?SystemExit: ????????pass

      希望對(duì)你有幫助。( ?? ω ?? )?

      AI

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:基于小熊派光強(qiáng)傳感器BH1750狀態(tài)機(jī)驅(qū)動(dòng)項(xiàng)目再度升級(jí)(帶上位機(jī)曲線顯示)
      下一篇:cacti安裝步驟文檔(基于centos6.5環(huán)境)&備份恢復(fù)cacti0.8.8b數(shù)據(jù)庫-測(cè)試成功的
      相關(guān)文章
      亚洲精品福利网泷泽萝拉| 久久亚洲中文字幕无码| 亚洲av永久中文无码精品| 亚洲中文字幕无码中文字| 亚洲狠狠狠一区二区三区| 亚洲成人免费电影| 精品亚洲成a人片在线观看少妇 | 国产综合激情在线亚洲第一页| 亚洲乱码中文字幕在线| 亚洲日韩精品无码AV海量| 亚洲无人区码一二三码区别图片| 亚洲一级特黄特黄的大片 | 亚洲自偷自偷在线制服| 亚洲日本在线观看视频| 久久久久亚洲AV无码专区桃色| 久久精品国产精品亚洲下载| MM131亚洲国产美女久久| 国产亚洲美女精品久久久| 亚洲夜夜欢A∨一区二区三区| 亚洲熟妇无码AV在线播放| 亚洲欧洲自拍拍偷午夜色无码| 亚洲人成色777777在线观看| 亚洲成AV人片在线观看ww| 亚洲今日精彩视频| 亚洲精品永久www忘忧草| 亚洲午夜精品在线| 亚洲一区二区三区写真 | 亚洲av日韩av高潮潮喷无码| 亚洲AV无码1区2区久久| 久久精品亚洲一区二区三区浴池 | 亚洲国产天堂久久久久久| 精品国产亚洲男女在线线电影| 在线A亚洲老鸭窝天堂| 亚洲成A人片在线观看无码不卡| 亚洲AV综合色一区二区三区| 久久国产亚洲高清观看| 亚洲首页国产精品丝袜| 国产成人亚洲精品播放器下载 | 亚洲一区在线视频| 亚洲欧美日韩久久精品| 亚洲成AⅤ人影院在线观看|