哈嘍,大家好。
之前曾給大家分享過摔倒識別、打架識別,今天以摔倒識別為例,我們看看能不能完全交給ChatGPT來做。
讓ChatGPT來做這件事,最核心的是如何向ChatGPT提問,把問題一股腦的直接丟給ChatGPT,如:用Python 寫個摔倒檢測代碼 是不可取的, 而是要像擠牙膏一樣,一點一點引導ChatGPT得到準確的答案,才能真正讓ChatGPT提高我們解決問題的效率。
今天分享的摔倒識別案例,與ChatGPT對話的思路清晰,代碼可用度高,按照GPT返回的結果完全可以開發一個摔倒識別的項目了,並且還有一些延伸的話題,如:畢設的改進點。
下面開始正式的分享。
1. 角色設定
向ChatGPT提問首先要給他一個角色設定,在演算法領域這叫prompt,有了進入了角色,才能更好地回答問題。所以,我提問的第一句是:
假如你是AI工程師,我想辨識影片中是否有跌倒行為,有哪些辦法
沒必要剛上來就讓他直接寫程式碼,先問他有哪些辦法或思路。
我們來看看ChatGPT的答案
給了3個方案,有傳統的圖像方法,也有深度學習方法。
2. 想法引導
我們當然是對深度學習感興趣了,所以繼續詢問關於深度學習的方法
使用深度學習的方法有哪些
ChatGPT回答
從卷積神經網路到卷積循環神經網路說了個遍。
看起來循環神經網路RNN更簡單、可靠,接下來我的提問是
我需要循環神經網路(RNN) 的方法
ChatGPT回答
給出了非常詳細的、實操性非常強的步驟,我簡單歸類一下,大致是兩步:
第一步,對視訊預處理,用卷積神經網絡(如:ResNet)提取視頻動作特徵(類似wordembedding) 第二步,用動作特徵作為lstm 模型的輸入,訓練lstm 循環神經網絡,對動作特徵分類,從而識別出摔倒行為
3. 寫程式碼
到目前,ChatGPT 提供給我們的,解決問題的想法非常清晰,可執行性非常強。
所以,這時候我們可以讓ChatGPT寫程式了。
按照我上面分割的步驟,我請他一次把第一步程式碼寫出來,所以,我的提問是:
寫一下影片預處理的程式碼,並用pytorch resnet擷取影片特徵
ChatGPT的回答
好的,下面是通过 Pytorch 的 ResNet 提取视频特征的代码,以及视频预处理的示例代码: 视频预处理: import cv2 import numpy as np def preprocess_video(video_path, n_frames=16, resize=(224, 224)): # 读取视频 cap = cv2.VideoCapture(video_path) frames = [] while True: ret, frame = cap.read() if not ret: break # 强制转换为 RGB frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 图像缩放 frame = cv2.resize(frame, resize) # 图像增强等操作 # ... frames.append(frame) cap.release() # 取固定帧数 n_frames,超过后从中间开始截取 n_frames = min(len(frames), n_frames) start = (len(frames) - n_frames) // 2 end = start + n_frames # 截取帧数后堆叠成四维数组 frames = np.stack(frames[start:end], axis=0) # 转换为支持 Pytorch 模型的格式 (B, C, T, H, W) frames = np.transpose(frames, (0, 3, 1, 2)) return frames 提取视频特征: import torch import torchvision.models as models def extract_features(frames): # 加载 ResNet 模型 resnet = models.resnet50(pretrained=True) # 去掉最后的全连接层 resnet = torch.nn.Sequential(*list(resnet.children())[:-1]) # 将 ResNet 设置为评估模式 resnet.eval() # 将预处理后的视频序列转化为 Tensor,并调整为指定的数据类型和范围 frames = torch.from_numpy(frames).float() / 255.0 # 减去 ImageNet 数据集的均值和标准差 normalize = torch.nn.Normalize( mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] ) frames = normalize(frames) # 前向预测,输出 2048 维特征向量 with torch.no_grad(): features = resnet(frames) return features.reshape(-1, 2048) 在上面这两块代码中,preprocess_video() 函数将读取视频,并将其转换为指定大小的图像帧,返回处理后的数据;extract_features() 函数将接受上一步处理后的数据,并将其转化为 Pytorch 的 Tensor,使用训练好的 ResNet 模型对每一帧图像进行特征提取,并返回一个形状为 (B, 2048) 的 Tensor,其中 B 为帧数。
圖片太長了,為了大家能更好的感受ChatGPT的回答,我直接把程式碼文字貼出來了。
定義了兩個獨立函數,分別完成了第一步中的兩小步驟內容。
程式碼沒有問題,先呼叫preprocess_video函數對視訊預處理,再呼叫 extract_features卷積操作,就可以將一個向量embedding成一個2048維的向量。
第二步,我拆分成了兩小步,先搭建lstm模型,再訓練
基於上面產出的結果,用pytorch lstm搭建視訊分類模型
ChatGPT的回答
寫一下模型訓練的程式碼
ChatGPT的答案
好的,下面是使用 Pytorch 训练视频分类模型的代码: import torch import torch.nn as nn import torch.optim as optim # 训练函数 def train(model, criterion, optimizer, dataloader, num_epochs=10): device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device)# 将模型移动到 GPU 或 CPU 上 for epoch in range(num_epochs): running_loss = 0.0 correct_predictions = 0 total_predictions = 0 for inputs, labels in dataloader: inputs = inputs.to(device) labels = labels.to(device) optimizer.zero_grad() with torch.set_grad_enabled(True): outputs = model(inputs) _, preds = torch.max(outputs, 1) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() * inputs.size(0) correct_predictions += torch.sum(preds == labels.data) total_predictions += labels.size(0) epoch_loss = running_loss / len(dataloader.dataset) epoch_acc = correct_predictions.double() / total_predictions print("Epoch {}: Loss {:.4f} Acc: {:.4f}".format(epoch + 1, epoch_loss, epoch_acc)) # 定义超参数 BATCH_SIZE = 4 NUM_EPOCHS = 20 # 定义数据集,假设已经准备好了训练数据集和测试数据集 train_dataset = ... test_dataset = ... # 定义数据加载器 train_dataloader = torch.utils.data.DataLoader( train_dataset, batch_size=BATCH_SIZE, shuffle=True ) test_dataloader = torch.utils.data.DataLoader( test_dataset, batch_size=BATCH_SIZE, shuffle=False ) # 定义模型 input_size = 2048 hidden_size = 512 num_layers = 1 num_classes = 2 model = VideoLSTM(input_size, hidden_size, num_layers, num_classes) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters()) # 训练模型 train(model, criterion, optimizer, train_dataloader, num_epochs=NUM_EPOCHS) 在代码中,首先定义了模型的超参数,如 BATCH_SIZE 和 NUM_EPOCHS。接着定义了训练数据集和测试数据集,并使用 Pytorch 的 DataLoader 将数据加载为 batch。然后定义了模型、损失函数和优化器。最后调用 train() 函数进行模型训练。 在训练过程中,每个 epoch 循环训练所有的视频帧,计算损失函数,计算准确率,并输出当前 epoch 的平均损失和准确率。训练完成后,可以将模型的参数保存到磁盘上,以便以后使用。
程式碼的可用性非常高。除了程式碼串聯有一些成本,各個獨立模組基本上不需要動,開發效率非常有效率。
也可以讓ChatGPT找一些資料集
也可以讓他寫模型推理的程式碼
他可以自動幫我們把影片預處理、特徵提取和推理三部分都串起來,形成一個完整的項目。
4. 擴充
到這裡,我們就完全用ChatGPT把專案做完了。
我們還可以聊一些擴充性的話題,如:
也可以讓ChatGPT幫我們想一些能突顯學術價值的點
看到這裡,說明我的文章對你多少有一丟丟的幫助。不管是否加入星球,我都感謝對大家對我的認同與信任。
以上是摔倒偵測-完全用ChatGPT開發,分享如何正確地向ChatGPT提問的詳細內容。更多資訊請關注PHP中文網其他相關文章!

軟AI(被定義為AI系統,旨在使用近似推理,模式識別和靈活的決策執行特定的狹窄任務 - 試圖通過擁抱歧義來模仿類似人類的思維。 但是這對業務意味著什麼

答案很明確 - 只是雲計算需要向雲本地安全工具轉變,AI需要專門為AI獨特需求而設計的新型安全解決方案。 雲計算和安全課程的興起 在

企業家,並使用AI和Generative AI來改善其業務。同時,重要的是要記住生成的AI,就像所有技術一樣,都是一個放大器 - 使得偉大和平庸,更糟。嚴格的2024研究O

解鎖嵌入模型的力量:深入研究安德魯·NG的新課程 想像一個未來,機器可以完全準確地理解和回答您的問題。 這不是科幻小說;多虧了AI的進步,它已成為R

大型語言模型(LLM)和不可避免的幻覺問題 您可能使用了諸如Chatgpt,Claude和Gemini之類的AI模型。 這些都是大型語言模型(LLM)的示例,在大規模文本數據集上訓練的功能強大的AI系統

最近的研究表明,根據行業和搜索類型,AI概述可能導致有機交通下降15-64%。這種根本性的變化導致營銷人員重新考慮其在數字可見性方面的整個策略。 新的

埃隆大學(Elon University)想像的數字未來中心的最新報告對近300名全球技術專家進行了調查。由此產生的報告“ 2035年成為人類”,得出的結論是,大多數人擔心AI系統加深的採用


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器