Skip to content

Commit 85d74ab

Browse files
iu5gitiu5git
iu5git
authored and
iu5git
committed
中文+Yolo segment
1 parent 4c554b4 commit 85d74ab

11 files changed

+3510
-51
lines changed

.DS_Store

0 Bytes
Binary file not shown.

README.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,23 @@
4848
- [Web-приложение и сбор датасета](https://github.com/iu5git/Deep-learning/blob/main/homework/homework1.md)
4949

5050
### Домашнее задание №2
51-
Сохраняется тема ДЗ-1. Требуется разработать `SPA` приложение для object detection ваших классов. Разметить изображения набора данных и обучить модель `Yolo`.
52-
- [Инструкция по разметке в cvat.ai](cvat)
51+
Сохраняется тема ДЗ-1. Требуется разработать `SPA` приложение для object detection ваших классов. Разметить изображения набора данных и обучить модель `Yolo` не менее 4 раз.
52+
- [Инструкция](cvat) по разметке в cvat.ai
5353
- [Обучение YOLOv7](/notebooks/YOLOv7.ipynb)
5454
- [Приложение на React для onnx YOLO](yolov7_ts). Демо-версия [приложения](https://iu5git.github.io/Deep-learning/) и файл обученной [модели](https://drive.google.com/file/d/1lpZMGNB9mYqHvFl_i6YU_U1sOLK0NDj_/view?usp=share_link) для 3 классов (Чайник для газовой плиты, Заварочный чайник, Электрический чайник)
5555

56+
5657
## Дополнительные материалы
5758
- [Генерация текста](https://github.com/iu5git/Deep-learning/blob/main/notebooks/Text_generation.ipynb)
5859
- [Машинный перевод](https://github.com/iu5git/Deep-learning/blob/main/notebooks/Machine_Translation.ipynb)
5960
- [Телеграм-бот](https://github.com/iu5git/Deep-learning/blob/main/homework2/task.md)
61+
- Обучить модель yolov8-segment и преобразовать ее в файл ONNX: [yolov8+onnx.ipynb](/yolov8_segment/yolov8%2Bonnx.ipynb). Приложение на React для onnx YOLO [react.md](/yolov8_segment/react.md)
6062

6163
## 中文
6264
1. [实验 №1](/notebooks/实验一.ipynb). 神经网络
63-
2. [cvat.ai](cvat/中文.md)
65+
2. [作业的实验和应用](/homework/homework1-中文.md)
66+
3. [使用cvat.ai标记数据集](cvat/中文.md)
67+
4. 训练 yolov8实例分割模型并将其转换为 ONNX 文件:[yolov8+onnx.ipynb](/yolov8_segment/yolov8%2Bonnx.ipynb)。为yolov8-segment创建React应用的中文教程:[react.md](/yolov8_segment/react.md)
6468

6569
## Вопросы к экзамену
6670
1. Опишите алгоритм обучения с учителем.

homework/homework1-中文.ipynb

+1,026
Large diffs are not rendered by default.

homework/homework1-中文.md

+230
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
# 作业 №1
2+
3+
## 任务
4+
需要创建并标注一个包含图像的数据集。该数据集应包含不少于3个类别,每个类别不少于100个样本。图像可以从互联网上下载或结合多个现有数据集。创建一个用于对该数据集进行图像分类的Web应用程序。使用数据增强、正则化和迁移学习。
5+
6+
## 控制问题
7+
1. 数据集的结构和数据增强。
8+
2. 迁移学习和微调。
9+
3. 卷积神经网络的架构。
10+
11+
## 第1部分. 在Google Colab中训练的模型并保存
12+
13+
### 图像下载
14+
+ **选项 1**. 需要在某个搜索引擎中查找所需类别的图片,然后手动下载到3个不同的文件夹中。
15+
+ **选项 2**. 需要安装Chrome浏览器的扩展程序:[Image downloader - Imageye](https://chrome.google.com/webstore/detail/image-downloader-imageye/agionbommeaifngbhincahgmoflcikhm?hl=en-US//)[Image Downloader](https://chrome.google.com/webstore/detail/image-downloader/cnpniohnfphhjihaiiggeabnkjhpaldj?hl=en-US//). 安装后,在某个搜索引擎中查找图像,然后使用之前下载的扩展程序下载图片。
16+
![image](images.png)
17+
18+
#### 第一步
19+
在任意搜索引擎中搜索感兴趣的图片主题。
20+
21+
#### 第二步
22+
打开先前安装的扩展程序。
23+
24+
#### 第三步
25+
选择图像类型为JPG。
26+
27+
#### 第四步
28+
选择所有图片并下载。
29+
+ **选项 3**. 需要安装Python库:[yandex-images-download](https://pypi.org/project/yandex-images-download/?msclkid=b0148afab45011ec8358c9751dabcf63//) ([GitHub](https://github.com/doevent/yandex-images-downloader/?msclkid=b0155486b45011eca4a25458cfa90a0e//)). 安装库后,需要下载适合您版本的Google Chrome的 [ChromeDriver](https://chromedriver.chromium.org/?msclkid=c622b0f0b45011ec8c6768a6d02ae314//) ChromeDriver,并解压文件 chromedriver.exe. 在PyCharm的命令行中输入以下命令: *yandex-images-download Chrome --keywords "Торт, Ласточка, Кошка" --limit 100* (另一种命令示例: *yandex-images-download Chrome --keywords "ласточка, орёл, торты" -o путь_для_скачивания -l количество фотографий -dp путь_к_chromedriver.exe*).
30+
31+
### 图像验证
32+
成功下载图像后,需要手动清理多余的对象,以排除可能的错误(重复、错误主题)。
33+
34+
### 将图像导入到Google Colab
35+
36+
#### 第一步
37+
需要点击链接进入预先准备的项目[проект](homework1-中文.ipynb) 并将其副本保存到您的Google云端硬盘。
38+
39+
#### 第二步
40+
在Colab文件系统中的“content”文件夹里,根据您图像类别的主题创建三个文件夹(例如:“蛋糕”、“燕子”、“猫”),并将之前下载的图像上传到这些文件夹中。
41+
![image](colab.png)
42+
43+
在Colab中打开文件系统(将自动打开“content”文件夹)。右键单击空白区域,并根据类别主题创建文件夹。
44+
45+
#### 第三步
46+
将类别变量修改为您自己的主题。
47+
### 在Colab中优化原始模型
48+
需要进行数据增强、正则化和迁移学习,并将模型保存为ONNX格式。
49+
50+
## 第2部分.图像分类Web应用程序
51+
52+
## 安装IDE VS Code
53+
为完成作业需要安装 [VS Code](https://code.visualstudio.com).
54+
55+
### 创建用于分类获得的数据集图像的Web应用程序
56+
57+
#### 第一步
58+
在VS Code中创建Django项目的示例可以通过此链接[ссылке](https://github.com/iu5git/Web/blob/main/tutorials/lab1-py/lab1_tutorial.md)查看。
59+
60+
#### 第二步
61+
创建项目后,需要在项目根目录中创建一个名为media的文件夹,以便后续保存图像和ONNX格式文件。在media文件夹内创建“images”和“models”文件夹。
62+
63+
![image](folders.png)
64+
65+
#### 第三步
66+
在settings.py文件中添加到先前创建的media文件夹的路径。在文件末尾添加以下代码块:
67+
68+
```python
69+
import os
70+
71+
MEDIA_URL = '/media/'
72+
MEDIA_ROOT = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'media')
73+
```
74+
为了让Django知道在哪里查找我们的模板,请检查文件settings.py。在变量TEMPLATES中的DIRS字段中指定您的模板路径。
75+
76+
```python
77+
TEMPLATES = [
78+
{
79+
# ...
80+
"DIRS": [BASE_DIR / "DZ1/templates"],
81+
# ...
82+
},
83+
]
84+
```
85+
86+
#### 第四步
87+
在与settings.py文件相同的文件夹中添加一个名为views.py的Python文件。
88+
89+
![image](views.png)
90+
91+
```python
92+
from django.shortcuts import render
93+
from django.core.files.storage import FileSystemStorage
94+
import onnxruntime
95+
import numpy as np
96+
from PIL import Image
97+
98+
imageClassList = {'0': 'Торт', '1': 'Ласточка', '2': 'Кошка'} #此处标明类别
99+
100+
def scoreImagePage(request):
101+
return render(request, 'scorepage.html')
102+
103+
def predictImage(request):
104+
fileObj = request.FILES['filePath']
105+
fs = FileSystemStorage()
106+
filePathName = fs.save('images/'+fileObj.name,fileObj)
107+
filePathName = fs.url(filePathName)
108+
modelName = request.POST.get('modelName')
109+
scorePrediction = predictImageData(modelName, '.'+filePathName)
110+
context = {'scorePrediction': scorePrediction}
111+
return render(request, 'scorepage.html', context)
112+
113+
def predictImageData(modelName, filePath):
114+
img = Image.open(filePath).convert("RGB")
115+
img = np.asarray(img.resize((32, 32), Image.ANTIALIAS))
116+
sess = onnxruntime.InferenceSession(r'C:\DZ1\media\models\cifar100.onnx') #<-此处必填указать свой путь к модели
117+
outputOFModel = np.argmax(sess.run(None, {'input': np.asarray([img]).astype(np.float32)}))
118+
score = imageClassList[str(outputOFModel)]
119+
return score
120+
```
121+
122+
##### 第4.1步
123+
在views.py文件中,根据您的主题修改类别,并指定ONNX模型的路径。
124+
125+
```python
126+
imageClassList = {'0': 'Торт', '1': 'Ласточка', '2': 'Кошка'} #在此指定类别
127+
```
128+
129+
```python
130+
sess = onnxruntime.InferenceSession(r'C:\DZ1\media\models\cifar100.onnx') #<-在这里您需要指定模型的路径
131+
```
132+
133+
#### 第五步
134+
在urls.py文件中,将内容替换为以下代码块:
135+
136+
```python
137+
from django.contrib import admin
138+
from django.urls import path
139+
from django.conf.urls.static import static
140+
from django.conf import settings
141+
from . import views
142+
urlpatterns = [
143+
path('admin/', admin.site.urls),
144+
path('', views.scoreImagePage, name='scoreImagePage'),
145+
path('predictImage', views.predictImage, name='predictImage'),
146+
]
147+
148+
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
149+
```
150+
151+
#### 第六步
152+
安装以下库:onnx, onnxruntime, numpy, pillow。
153+
可以使用以下命令在终端中安装每个库:
154+
![image](shell.png)
155+
#### 第七步
156+
在templates文件夹中添加一个名为scorepage.html的文件。
157+
158+
```html
159+
<!DOCTYPE html>
160+
<html lang="ru">
161+
<head>
162+
<meta charset="windows-1251">
163+
<title>Домашнее задание 1</title>
164+
<style>
165+
/* 在文档主体上添加一些填充,以防止内容进入页眉和页脚下方 */
166+
body{
167+
padding-top: 60px;
168+
padding-bottom: 40px;
169+
}
170+
.fixed-header, .fixed-footer{
171+
width: 100%;
172+
position: fixed;
173+
background: #333;
174+
padding: 10px 0;
175+
color: #fff;
176+
}
177+
.fixed-header{
178+
top: 0;
179+
}
180+
.fixed-footer{
181+
bottom: 0;
182+
}
183+
.container{
184+
width: 80%;
185+
margin: 0 auto; /* 将 DIV 水平居中 */
186+
}
187+
nav a{
188+
color: #fff;
189+
text-decoration: none;
190+
padding: 7px 25px;
191+
display: inline-block;
192+
}
193+
</style>
194+
</head>
195+
<body>
196+
<div class="fixed-header">
197+
<div class="container">
198+
199+
</div>
200+
</div>
201+
<div class="container">
202+
<form action="predictImage" method="post" enctype="multipart/form-data">
203+
{% csrf_token %}
204+
205+
<div class="col-md-4 col-sm-4">
206+
<label for="FilePath">Загрузить изображение:</label>
207+
</div> <input name="filePath" type="file"><br><br>
208+
<input type="submit" value="Submit" >
209+
</form>
210+
</div>
211+
<div>
212+
<br>
213+
{% if scorePrediction %}
214+
<h3>The classification is : {{scorePrediction}}</h3>
215+
{% endif %}
216+
217+
</div>
218+
<div class="fixed-footer">
219+
<div class="container"></div>
220+
</div>
221+
</body>
222+
</html>
223+
```
224+
#### 第八步
225+
在PyCharm的终端中运行以下命令以启动项目:"python3 manage.py runserver".
226+
227+
#### 第九步
228+
上传图像并点击“submit”按钮.
229+
230+
![image](page.png)

0 commit comments

Comments
 (0)