Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 61
Server version: 10.3.22-MariaDB-1ubuntu1 Ubuntu 20.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> Bye
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *
Mdb() # reinitialise la base de donnees / le modele
YOLOv4 算是目前比较强悍的一种目标检测算法,其全称是 You Only Look Once: Unified, Real-Time Object Detection,它在速度和精度都很有优势,Real-Time Object Detection 意味着它可以实时进行目标检测(检测摄像头或者是视频文件等)。
下图中显示了不同目标检测算法准确度和速度之间的比较。可以看到 YOLOv4 在 MS COCO 数据集上获得了较高的 AP 值(average precision 平均精度),即在同FPS值(帧率)下有较高的AP值。
MS COCO 是一种数据集,包含了80种物体分类、33万张图片、150万个目标对象。相比而言,本文使用到的数据集仅只有1种物体(观赏鱼)、122张图片(大多数来自b站萌宠区直播视频截图)、大约1000个不到目标对象(观赏鱼)。本文所使用的数据集(图片和标注数据)和训练结果(.weight文件,约250Mb)可以在本文最底部链接中下载。
本篇文章主要内容如下图所示:首先使用 Labelimg 制作自己的数据集,然后白嫖 Google Colab (以下简称 Colab) 或 百度 Ai Studio (以下简称 Ai Studio)的服务器和显卡。在使用 Darknet 框架下,制作自己的数据集并训练自己的 YOLOv4 模型,得到 .weights 权重文件。
使用了哪些工具?
首先是使用到的软件,软件工具包括了以下这些(注意下列列表中的软件,仅针对使用 Ai Studio 或者是 Colab。若使用自己的电脑进行训练,则需要更复杂的步骤来配置环境。):
后来分别使用了 Ai Studio 和 Colab 的分别进行数据训练。两者实际上没有优劣之分,只不过在使用 Ai Studio 的时候,在编译 Darknet 的时候始终遇到错误;而在使用 Colab 训练时间过长之后,会发生丢失文件的情况。Colab 提供的服务器、包括磁盘都是临时的,而不是永久的。所以在服务器上的任何改动,在关闭或者将服务器闲置时,上面所有的资料将会清空。在使用完这些服务器训练之后,要及时地将训练过后的权重文件以及配置文件下载下来。
这个 TP 的背景是这样的:有一个商务旅行团需要去 n 个城市,怎样安排他们的行程可以使行程变得更短?行程的起点和终点都在巴黎。为了解决这个问题,可以使用两种算法:第一种就是最简单的求解 n 个城市 n!种行程的各个距离,然后选取最短的行程;第二种使用la méthode du recuit simulé 模拟退火算法。
# 输入:h>0 计算参数,浮点数。h越小,算法越有风险;越大算法收敛时间越长。
# 输入:k 算法参数,整数。
# 输入:ind 算法的迭代次数,整数。
# 输入:Temp 当前算法的温度
# 输出:新的参数k
# 输出:新的温度Temp
while ind <= np.exp((k-1)*h) or ind>np.exp(k*h):
k+=1
Temp=1.0/k
return k,Temp
绘图函数
chemin=['Paris']+chemin+['Paris']
plt.plot([dico[ville]['x'] for ville in chemin],[dico[ville]['y'] for ville in chemin],'bo-') # 其他城市用蓝色表示
plt.plot(dico['Paris']['x'],dico['Paris']['y'],'ro') # 巴黎用红色表示
plt.xlim([-500.0,500.0]) # 坐标范围
plt.ylim([-800.0,300.0])
plt.title("Trajet")
ax=plt.gca()
ax.set_aspect('equal')
def plot_temp(Temp_list):
plt.figure()
plt.plot(Temp_list)
plt.xlabel('$n$')
plt.ylabel('$T$')
plt.title(u'Profil de température')
plt.grid()
# 计算所有的可能路线,如果是5个城市就是5!种情况;如果是10个城市就是10!种情况。
t1=time.time() #计时开始
permutations=list()
for i in itertools.permutations(parcours): #排列顺序可变,元素不重复:每一项用长度为r的元组表示
permutations.append(i) #所有的可能情况,一种种情况往上叠。
print('Nombre de trajets étudiés : ', len(permutations))
cost=list()
for i in range(0,len(permutations)-1):
parcours_chaque=list(permutations[i])
parcours_chaque=['Paris']+parcours_chaque+['Paris']
print(parcours_chaque)
print(cost_function(parcours_chaque,dico)) #传到上方的cost_function算法里
cost.append(cost_function(parcours_chaque,dico)) #所有的可能情况,一种种情况往上叠。
t2=time.time() # 计时结束
# 打印结果
cost=np.asarray(cost)
print('Trajet le plus court :')
for ind, item in zip(range(1,len(parcours)+1),permutations[cost.argmin()]):
print(ind,' ',item)
print('Distance totale : ', cost.min())
print('Temps de calcul : ',t2-t1)
用模拟退火法
candidate=parcours
# 先设置参数
itermax=10000
hpar=3.0
kpar=1
Temp=1.0/kpar
Temp_list=[Temp]
t1=time.time() #计时开始
for ind in range(itermax):
#计算新的行程尝试(就是根据现有行程随机生成一个新的)
new_candidate=compute_new_candidate(candidate)
#计算新的行程和旧的行程的路程差距
delta=cost_function(new_candidate,dico)-cost_function(candidate,dico)
#如果新的候选路线更长,则仍可以一定的概率接受它。
if delta <= 0:
candidate = new_candidate
else:
u=np.random.uniform(0,1) # 产生一个0到1之间的随机数
if np.exp(-delta/Temp) >= u :
candidate = new_candidate
# 降温
kpar, Temp = compute_Temp(hpar,kpar,ind+2,Temp)
Temp_list.append(Temp)
t2=time.time()
# 打印结果
print('Trajet le plus court :')
for ind, item in zip(range(1,len(parcours)+1),candidate):
print(ind,' ',item)
print('Distance totale : ', cost_function(candidate,dico))
print('Temps de calcul : ',t2-t1)
# 绘制图表
plot_chemin(parcours,dico)
plot_chemin(candidate,dico)
plot_temp(Temp_list)
plt.show()