文檔標(biāo)尺怎么弄出來?(怎么把標(biāo)尺弄出來)
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 貓。
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)容。