计算机毕设指导师
⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。
⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!也可以在主页上或文末下与博主交流~~
⚡⚡Java、Python、小程序、大数据实战项目集](https://blog.csdn.net/2301_80395604/category_12487856.html)
⚡⚡文末获取源码
温馨提示:文末有CSDN平台官方免费提供的博客联系方式!
温馨提示:文末有CSDN平台官方免费提供的博客联系方式!
温馨提示:文末有CSDN平台官方免费提供的博客联系方式!
动物图像识别方法研究-简介
这套系统名字叫基于深度学习的动物图像识别方法研究,做的事情一句话能说清:训练一个能认出15类动物的模型,再给它配上一个能用的网站。先说数据侧。数据来自Kaggle的公开动物数据集,1944个文件、每类一百多张,全部是224×224的标准尺寸。拿到手不是直接开训,而是先做了六维数据画像:类别分布是否均衡、有没有坏图、分辨率统计、cleanlab错标检测(扫出6张疑似标错的图,错标率0.31%,记录在案不清洗,训练时用label smoothing容噪)。划分数据集时有个关键处理:这批数据里很多图是同一张原图的裁剪翻转变体,要是随机划分,相近的图会同时出现在训练集和测试集里,指标看着漂亮实际是虚的。所以按原图分组切分,70%、15%、15%,每组只进一个集合,机器核验组不跨集。再说训练侧。用的是PyTorch迁移学习,加载ImageNet预训练权重再微调。正式训练前做了两件事:实测显存定下batch=128,12个试验臂短扫学习率定稿0.0003加AdamW。主模型ResNet-50正式训练只跑一次,配合EMA、warmup余弦调度和早停,42个epoch出结果。另外两个对比模型ViT-B/16和EfficientNet-B0用完全相同的协议训练和评估,测试集全程冻结只在收尾用一次,出宏平均F1、混淆矩阵、参数量、推理速度的对比报告,还画了Grad-CAM热力图和t-SNE可视化。最后是网站侧。后端Django 2.0加MySQL,前端Vue2加ElementUI,三个模型都导出成ONNX和PT双格式挂到识别接口上。识别页有三种方式:图片上传识别、本地视频抽帧识别(结果按时间戳匹配)、摄像头定时截帧识别,每个页面都能选模型,主模型和对比模型有徽标区分,识别完自动落库。配上识别历史(画廊图墙、搜索分页、软删除)、六路聚合的统计大屏、账号注册登录和角色权限,整个系统就能真实跑起来给别人用了。
动物图像识别方法研究-背景
选题背景
图像识别是计算机视觉里最基础的一类任务,动物识别又是其中很有代表性的场景,物种监测、科普展示这些地方都用得上。这几年深度学习的思路基本定型:找一批带标签的图片,拿预训练模型做迁移学习,微调之后就能得到一个能用的分类器,对数据量和算力的要求也比从零训练友好得多。对本科毕设来说,这类课题的边界比较清楚:数据公开、方法成熟、评估指标明确,不用自己发明东西,又能把数据集处理、模型训练、指标评估和网页部署这些环节完整走一遍。所以这次就定下这个题目,用一个15类的公开数据集,把从训练到网站展示的整条链路做扎实。
选题意义
坦白讲,这就是一个规模不大的毕业设计,谈不上有多少学术上的突破。对我自己来说,意义主要在于把课堂上散着学的知识串了起来:以前学卷积、学训练技巧都是单独的题,这次要自己处理真实数据、定超参、看指标,才知道每个环节实际做起来是什么样子。动手过程中也体会到,好的实验习惯比多试几个模型更重要,比如按原图分组划分数据、给对比模型用同样的训练条件,这些在论文里一句话带过的事,做起来全是细节。对情况差不多的同学来说,这套流程留了完整的记录和脚本,如果同样选了图像识别方向,多少能省一点摸索的时间。总的来说,它更像一次认真的练手,把一个小课题从头到尾做规范,本身就是收获。
动物图像识别方法研究-核心功能
功能一:图片识别。 上传图片后可选模型,后端完成压缩、预处理、推理,返回Top-5识别结果和置信度,带中文类名,识别原图与结果自动生成两档缩存图落库。
功能二:视频识别。 本地视频播放的同时后台按间隔抽帧识别,识别结果按时间戳和播放进度匹配展示,一路视频下来能看出动物在哪些时间点出现。
功能三:摄像头识别。 浏览器getUserMedia直接开流,定时截帧送推理,实时出结果,适合现场演示。
功能四:识别历史。 画廊图墙展示所有识别记录,支持搜索和分页,点进详情可以回看原图、识别结果和画框回放,管理员看全部、普通用户只看自己的,删除走软删除。
功能五:统计大屏。 一次请求聚合六路数据,配五张echarts图表加KPI数字卡,按日趋势、类别分布、模型使用占比一眼看清,带缓存和角色分流。
功能六:账号与权限。 注册登录、Token校验、角色菜单分流,管理员多一个用户管理入口,可以增删改查演示账号。
动物图像识别方法研究-视频
计算机毕设推荐:深度学习动物图像识别
动物图像识别方法研究-图片展示









动物图像识别方法研究-代码展示
python
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("AnimalImageRecognition").master("local[*]").getOrCreate()
MEAN = np.array([0.485, 0.456, 0.406], dtype=np.float32)
STD = np.array([0.229, 0.224, 0.225], dtype=np.float32)
def do_predict_image(upload_path, model_dir):
img = Image.open(upload_path).convert("RGB").resize((224, 224))
arr = np.array(img).astype(np.float32) / 255.0
tensor = ((arr - MEAN) / STD).transpose(2, 0, 1)[np.newaxis, ...]
sess = get_onnx_session(model_dir)
logits = sess.run(None, {sess.get_inputs()[0].name: tensor})[0][0]
probs = np.exp(logits - logits.max())
probs = probs / probs.sum()
labels = load_labels(model_dir)
top5 = probs.argsort()[::-1][:5]
result = [{"cls_zh": labels[str(i)]["zh"], "cls_en": labels[str(i)]["en"], "conf": round(float(probs[i]) * 100, 2)} for i in top5]
save_preview(upload_path)
DetectionRecord.objects.create(user_id=request.session["uid"], image_path=upload_path, top1=result[0]["cls_zh"], top1_conf=result[0]["conf"], model_tag=model_dir, result_json=json.dumps(result, ensure_ascii=False))
return JsonResponse({"code": 0, "data": result})
def do_predict_video(video_path, model_dir, interval_sec=1):
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS) or 25.0
step = max(int(fps * interval_sec), 1)
frame_idx, results = 0, []
sess = get_onnx_session(model_dir)
labels = load_labels(model_dir)
while True:
ok, frame = cap.read()
if not ok:
break
if frame_idx % step == 0:
rgb = cv2.cvtColor(cv2.resize(frame, (224, 224)), cv2.COLOR_BGR2RGB).astype(np.float32) / 255.0
tensor = ((rgb - MEAN) / STD).transpose(2, 0, 1)[np.newaxis, ...]
logits = sess.run(None, {sess.get_inputs()[0].name: tensor})[0][0]
idx = int(np.argmax(logits))
conf = round(float(np.exp(logits[idx] - logits.max()) / np.exp(logits - logits.max()).sum()) * 100, 2)
results.append({"time": round(frame_idx / fps, 2), "cls": labels[str(idx)]["zh"], "conf": conf})
frame_idx += 1
cap.release()
merged = merge_nearby_results(results)
DetectionRecord.objects.create(user_id=request.session["uid"], video_path=video_path, model_tag=model_dir, result_json=json.dumps(merged, ensure_ascii=False))
return JsonResponse({"code": 0, "data": merged})
def dashboard_data(request):
role = request.session.get("role")
qs = DetectionRecord.objects.filter(is_delete=0)
if role != 1:
qs = qs.filter(user_id=request.session["uid"])
rows = list(qs.values("create_time", "top1", "model_tag", "top1_conf"))
df = spark.createDataFrame(rows)
df.createOrReplaceTempView("detection")
by_day = spark.sql("SELECT DATE_FORMAT(create_time,'yyyy-MM-dd') AS d, COUNT(*) AS c FROM detection GROUP BY d ORDER BY d").collect()
by_class = spark.sql("SELECT top1, COUNT(*) AS c FROM detection GROUP BY top1 ORDER BY c DESC").collect()
by_model = spark.sql("SELECT model_tag, COUNT(*) AS c FROM detection GROUP BY model_tag").collect()
hour_dist = spark.sql("SELECT HOUR(create_time) AS h, COUNT(*) AS c FROM detection GROUP BY h ORDER BY h").collect()
avg_conf = spark.sql("SELECT ROUND(AVG(top1_conf) * 100, 2) AS a FROM detection").collect()[0]["a"]
total = sum(r["c"] for r in by_day)
data = {"total": total, "avg_conf": avg_conf, "by_day": [r.asDict() for r in by_day], "by_class": [r.asDict() for r in by_class], "by_model": [r.asDict() for r in by_model], "hour_dist": [r.asDict() for r in hour_dist]}
cache.set("dashboard_" + str(request.session["uid"]), data, 60)
return JsonResponse({"code": 0, "data": data})
动物图像识别方法研究-结语
这篇整理得比较细,一遍未必记得全,建议先收藏再慢慢看。做毕设要是卡在某个环节,比如数据划分或者模型对接,可以来主页找技术员聊聊,很多问题一句话就能说明白。觉得内容有帮助的话,顺手点个赞、加个关注,后面还会更新同系列的讲解。有想法也欢迎在评论区留言,大家一起把课题做得更顺一些。
实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!
如果遇到具体的技术问题或其他需求,你也可以问我,我会尽力帮你分析和解决问题所在,支持我记得点赞、收藏,再点个关注,学习不迷路!~~