用ChatGPT全自動開發(fā)安全頭盔佩戴檢測項目
哈嘍,大家好。
今天給大家分享用ChatGPT開發(fā)安全頭盔佩戴檢測。代碼完全用GPT4完成。
首先,給ChatGPT設(shè)定角色,告訴我們要完成的任務(wù),然后讓ChatGPT給出詳細(xì)的步驟。
圖片
從數(shù)據(jù)準(zhǔn)備與標(biāo)注、模型選擇與設(shè)計到模型部署,ChatGPT給出非常具體、詳細(xì)、可執(zhí)行的步驟。
這里,我們主要關(guān)注數(shù)據(jù)準(zhǔn)備和模型選擇訓(xùn)練。
如果自己收集數(shù)據(jù),再標(biāo)注費(fèi)時費(fèi)力,我們可以讓ChatGPT幫我們查找一下是否有現(xiàn)成的資源
圖片
他沒有直接給我們找到數(shù)據(jù)集,但是提供了可以搜索資源的網(wǎng)站,如:Kaggle、GitHub,我們可以在這些網(wǎng)站搜索。
我在Kaggle和GitHub上查找后,都能找到已經(jīng)標(biāo)注好的數(shù)據(jù)集,最后,我選擇了Kaggle上的一個數(shù)據(jù)集
圖片
數(shù)據(jù)集包含戴頭盔和未戴頭盔兩種分類,標(biāo)注文件是PASCAL格式。
圖片
下載數(shù)據(jù)集,讓 ChatGPT寫代碼解析標(biāo)注文件,在原圖上繪制標(biāo)注結(jié)果
圖片
代碼是正確的,只要修改下輸入文件的路徑,就可以直接運(yùn)行,看到標(biāo)注的檢測框
import cv2
import xml.etree.ElementTree as ET
import random
# 隨機(jī)生成一個顏色
def random_color():
return (0, random.randint(0, 255), random.randint(0, 255))
# 讀取PASCAL VOC格式的XML標(biāo)注文件
def read_annotations(xml_file):
tree = ET.parse(xml_file)
root = tree.getroot()
boxes = []
for obj in root.iter('object'):
name = obj.find('name').text
xmlbox = obj.find('bndbox')
x1 = int(xmlbox.find('xmin').text)
y1 = int(xmlbox.find('ymin').text)
x2 = int(xmlbox.find('xmax').text)
y2 = int(xmlbox.find('ymax').text)
boxes.append([name, x1, y1, x2, y2])
return boxes
# 讀取圖片
image_path = "./archive (1)/images/BikesHelmets38.png" # 更改為你的圖片路徑
image = cv2.imread(image_path)
# 讀取標(biāo)注
xml_path = "./archive (1)/annotations/BikesHelmets38.xml" # 更改為你的XML文件路徑
annotations = read_annotations(xml_path)
# 在圖片上畫出標(biāo)注框
for annotation in annotations:
name, x1, y1, x2, y2 = annotation
color = random_color()
cv2.rectangle(image, (x1, y1), (x2, y2), color, 2)
cv2.putText(image, name, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1)
# 顯示圖片
cv2.imshow('Annotated Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
圖片
有了數(shù)據(jù)集,我們再在ChatGPT選擇合適的模型
圖片
圖片
ChatGPT在經(jīng)過了一番對比說明之后,最終選擇了YOLO。
但由于數(shù)據(jù)集的標(biāo)注文件是PASCAL格式,因此,我們還需要讓ChatGPT將其轉(zhuǎn)為YOLO格式
圖片
為了節(jié)省篇幅,我就不貼代碼了。這里,ChatGPT只拿1個文件做實例進(jìn)行轉(zhuǎn)換,你也可以讓ChatGPT寫一個遍歷目錄的程序,來批量轉(zhuǎn)換。
至此,數(shù)據(jù)集已經(jīng)完全準(zhǔn)備好了,剩下的就是ChatGPT訓(xùn)練模型。
圖片
剛開始ChatGPT自己編寫了YOLO網(wǎng)絡(luò)架構(gòu),我估計把握住不住,弄不好得陪他調(diào)一天的BUG,所以,我讓他改成用開源的方案完成,他選擇了YOLOv5。
安裝依賴,配置yaml文件,執(zhí)行訓(xùn)練命令三步走即可。
因為我事前沒有告訴ChatGPT有多少分類,所以他默認(rèn)生成的yaml配置文件類別是1,大家根據(jù)自己的業(yè)務(wù)靈活調(diào)整即可。
訓(xùn)練命令也沒有問題,使用yolov5s模型作為預(yù)訓(xùn)練模型,執(zhí)行命令的時候會自動下載yolov5s.pt,如果你已經(jīng)下載好了,可以添加--weights參數(shù)本地的權(quán)重文件即可。
模型訓(xùn)練完成后,可以查看訓(xùn)練效果
圖片
最后,讓ChatGPT生成推理代碼,就可以應(yīng)用。
圖片
圖片
ChatGPT生成的代碼基本都是能直接用的,但還是需要要了解一些深度學(xué)習(xí)的知識,用起來會更高效。不然一報錯,直接貼給ChatGPT容易越走越偏。