2 Star 2 Fork 0

董玏麒 / 基于transformer与EfficientNet_B4的Image_Caption

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

项目背景

项目介绍与用途

项目通过爬虫获取高质量带标准图片的数据集为原始训练数据集与验证集,再对训练集进行数据清洗与数据增广,之后通过迁移学习,使用了基于EfficientNet B4的预训练CNN模型对输入数据进行特征提取和微调,最后使用多模态的方法将CNN与Transformer结合,在经过选取多个CNN预训练模型进行实验,优化transformer模型后,最终使得验证集准确率达到0.701,基本满足AI看图说话的需要。

项目硬件

NVIDIA GeForce GTX 1650

项目语言

Python

项目环境

Package Version


aiobotocore 2.4.2
aiofiles 22.1.0
aiohttp 3.8.3
aioitertools 0.7.1
aiosignal 1.2.0
aiosqlite 0.18.0
alabaster 0.7.12
anaconda-catalogs 0.2.0
anaconda-client 1.11.3 anaconda-navigator 2.4.2
anaconda-project 0.11.1
anyio 3.5.0
appdirs 1.4.4
argon2-cffi 21.3.0
argon2-cffi-bindings 21.2.0
arrow 1.2.3
astroid 2.14.2
astropy 5.1
asttokens 2.0.5
async-timeout 4.0.2
atomicwrites 1.4.0
attrs 22.1.0
Automat 20.2.0
autopep8 1.6.0
Babel 2.11.0
backcall 0.2.0
backports.functools-lru-cache 1.6.4
backports.tempfile 1.0
backports.weakref 1.0.post1
bcrypt 3.2.0
beautifulsoup4 4.12.2
binaryornot 0.4.4
black 0.0
bleach 4.1.0
bokeh 3.1.1
boltons 23.0.0
boto3 1.24.28
botocore 1.27.59
Bottleneck 1.3.5
brotlipy 0.7.0
certifi 2023.5.7
cffi 1.15.1
chardet 4.0.0
charset-normalizer 2.0.4
click 8.0.4
cloudpickle 2.2.1
clyent 1.2.2
colorama 0.4.6
colorcet 3.0.1
comm 0.1.2
conda 23.5.0
conda-build 3.25.0
conda-content-trust 0.1.3
conda_index 0.2.3
conda-libmamba-solver 23.5.0
conda-pack 0.6.0
conda-package-handling 2.1.0
conda_package_streaming 0.8.0
conda-repo-cli 1.0.41
conda-token 0.4.0
conda-verify 3.4.2
constantly 15.1.0
contourpy 1.0.5
cookiecutter 1.7.3
cryptography 39.0.1
cssselect 1.1.0
cycler 0.11.0
cytoolz 0.12.0
daal4py 2023.1.1
dask 2023.6.0
datashader 0.15.0
datashape 0.5.4
debugpy 1.5.1
decorator 5.1.1
defusedxml 0.7.1
diff-match-patch 20200713
dill 0.3.6
distributed 2023.6.0
docstring-to-markdown 0.11
docutils 0.18.1
entrypoints 0.4
et-xmlfile 1.1.0
executing 0.8.3
fastjsonschema 2.16.2
filelock 3.9.0
flake8 6.0.0
Flask 2.2.2
fonttools 4.25.0
frozenlist 1.3.3
fsspec 2023.3.0
future 0.18.3
gensim 4.3.0
glob2 0.7
greenlet 2.0.1
h5py 3.7.0
HeapDict 1.0.1
holoviews 1.16.2
hvplot 0.8.4
hyperlink 21.0.0
idna 3.4
imagecodecs 2021.8.26
imageio 2.26.0
imagesize 1.4.1
imbalanced-learn 0.10.1
importlib-metadata 6.0.0
incremental 21.3.0
inflection 0.5.1
iniconfig 1.1.1
intake 0.6.8
intervaltree 3.1.0
ipykernel 6.19.2
ipython 8.12.0
ipython-genutils 0.2.0
ipywidgets 8.0.4
isort 5.9.3
itemadapter 0.3.0
itemloaders 1.0.4
itsdangerous 2.0.1
jaraco.classes 3.2.1
jedi 0.18.1
jellyfish 0.9.0
jieba 0.42.1
Jinja2 3.1.2
jinja2-time 0.2.0
jmespath 0.10.0
joblib 1.2.0
json5 0.9.6
jsonpatch 1.32
jsonpointer 2.1
jsonschema 4.17.3
jupyter 1.0.0
jupyter_client 8.1.0
jupyter-console 6.6.3
jupyter_core 5.3.0
jupyter-events 0.6.3
jupyter_server 2.5.0
jupyter_server_fileid 0.9.0
jupyter_server_terminals 0.4.4
jupyter_server_ydoc 0.8.0
jupyter-ydoc 0.2.4
jupyterlab 3.6.3
jupyterlab-pygments 0.1.2
jupyterlab_server 2.22.0
jupyterlab-widgets 3.0.5
keyring 23.13.1
kiwisolver 1.4.4
lazy_loader 0.2
lazy-object-proxy 1.6.0
libarchive-c 2.9
libmambapy 1.4.1
linkify-it-py 2.0.0
llvmlite 0.40.0
lmdb 1.4.1
locket 1.0.0
lxml 4.9.2
lz4 4.3.2
Markdown 3.4.1
markdown-it-py 2.2.0
MarkupSafe 2.1.1
matplotlib 3.7.1
matplotlib-inline 0.1.6
mccabe 0.7.0
mdit-py-plugins 0.3.0
mdurl 0.1.0
menuinst 1.4.19
mistune 0.8.4
mkl-fft 1.3.6
mkl-random 1.2.2
mkl-service 2.4.0
more-itertools 8.12.0
mpmath 1.2.1
msgpack 1.0.3
multidict 6.0.2
multipledispatch 0.6.0
munkres 1.1.4
mypy-extensions 0.4.3
navigator-updater 0.4.0
nbclassic 0.5.5
nbclient 0.5.13
nbconvert 6.5.4
nbformat 5.7.0
nest-asyncio 1.5.6
networkx 2.8.4
nltk 3.7
notebook 6.5.4
notebook_shim 0.2.2
numba 0.57.0
numexpr 2.8.4
numpy 1.24.3
numpydoc 1.5.0
openpyxl 3.0.10
packaging 23.0
pandas 1.5.3
pandocfilters 1.5.0
panel 1.1.0
param 1.13.0
paramiko 2.8.1
parsel 1.6.0
parso 0.8.3
partd 1.2.0
pathlib 1.0.1
pathspec 0.10.3
patsy 0.5.3
pep8 1.7.1
pexpect 4.8.0
pickleshare 0.7.5
Pillow 9.4.0
pip 23.1.2
pkginfo 1.9.6
platformdirs 2.5.2
plotly 5.9.0
pluggy 1.0.0
ply 3.11
pooch 1.4.0
poyo 0.5.0
prometheus-client 0.14.1
prompt-toolkit 3.0.36
Protego 0.1.16
psutil 5.9.0
ptyprocess 0.7.0
pure-eval 0.2.2
py-cpuinfo 8.0.0
pyarrow 11.0.0
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycodestyle 2.10.0
pycosat 0.6.4
pycparser 2.21
pyct 0.5.0
pycurl 7.45.2
PyDispatcher 2.0.5
pydocstyle 6.3.0
pyerfa 2.0.0
pyflakes 3.0.1
Pygments 2.15.1
PyJWT 2.4.0
pylint 2.16.2
pylint-venv 2.3.0
pyls-spyder 0.4.0
PyNaCl 1.5.0
pyodbc 4.0.34
pyOpenSSL 23.0.0
pyparsing 3.0.9
PyQt5 5.15.7
PyQt5-sip 12.11.0
PyQtWebEngine 5.15.4
pyrsistent 0.18.0
PySocks 1.7.1
pytest 7.3.1
python-dateutil 2.8.2
python-json-logger 2.0.7
python-lsp-black 1.2.1
python-lsp-jsonrpc 1.0.0
python-lsp-server 1.7.2
python-slugify 5.0.2
python-snappy 0.6.1
pytoolconfig 1.2.5
pytz 2022.7
pyviz-comms 2.3.0
PyWavelets 1.4.1
pywin32 305.1
pywin32-ctypes 0.2.0
pywinpty 2.0.10
PyYAML 6.0
pyzmq 25.1.0
QDarkStyle 3.0.2
qstylizer 0.2.2
QtAwesome 1.2.2
qtconsole 5.4.2
QtPy 2.2.0
queuelib 1.5.0
regex 2022.7.9
requests 2.29.0
requests-file 1.5.1
requests-toolbelt 0.9.1
rfc3339-validator 0.1.4
rfc3986-validator 0.1.1
rope 1.7.0
Rtree 1.0.1
ruamel.yaml 0.17.21
ruamel-yaml-conda 0.17.21
s3fs 2023.3.0
s3transfer 0.6.0
sacremoses 0.0.43
scikit-image 0.20.0
scikit-learn 1.2.2
scikit-learn-intelex 20230426.121932
scipy 1.10.1
Scrapy 2.8.0
seaborn 0.12.2
Send2Trash 1.8.0
service-identity 18.1.0
setuptools 67.8.0
sip 6.6.2
six 1.16.0
smart-open 5.2.1
sniffio 1.2.0
snowballstemmer 2.2.0
sortedcontainers 2.4.0
soupsieve 2.4
Sphinx 5.0.2
sphinxcontrib-applehelp 1.0.2
sphinxcontrib-devhelp 1.0.2
sphinxcontrib-htmlhelp 2.0.0
sphinxcontrib-jsmath 1.0.1
sphinxcontrib-qthelp 1.0.3
sphinxcontrib-serializinghtml 1.1.5
spyder 5.4.3
spyder-kernels 2.4.3
SQLAlchemy 1.4.39
stack-data 0.2.0
statsmodels 0.13.5
sympy 1.11.1
tables 3.8.0
tabulate 0.8.10
TBB 0.2
tblib 1.7.0
tenacity 8.2.2
terminado 0.17.1
text-unidecode 1.3
textdistance 4.2.1
threadpoolctl 2.2.0
three-merge 0.1.1
tifffile 2021.7.2
tinycss2 1.2.1
tldextract 3.2.0
toml 0.10.2
tomli 2.0.1
tomlkit 0.11.1
toolz 0.12.0
tornado 6.2
tqdm 4.65.0
traitlets 5.7.1
transformers 2.1.1
Twisted 22.10.0
twisted-iocpsupport 1.0.2
typing_extensions 4.6.3
uc-micro-py 1.0.1
ujson 5.4.0
Unidecode 1.2.0
urllib3 1.26.16
w3lib 1.21.0
watchdog 2.1.6
wcwidth 0.2.5
webencodings 0.5.1
websocket-client 0.58.0
Werkzeug 2.2.3
whatthepatch 1.0.2
wheel 0.38.4
widgetsnbextension 4.0.5
win-inet-pton 1.1.0
wrapt 1.14.1
xarray 2022.11.0
xlwings 0.29.1
xyzservices 2022.9.0
y-py 0.5.9
yapf 0.31.0
yarl 1.8.1
ypy-websocket 0.8.2
zict 2.2.0
zipp 3.11.0
zope.interface 5.4.0
zstandard 0.19.0
PS:因为在做的过程中是实验性的,很多包后来弃用了,但是我懒得甄别到底什么包是无用的,索性都扔上来了。

数据集

实验过程使用的数据集是很多个数据集拼起来的,最初设想是从视觉中国上扒来带有标注的图片做训练,但是它的数据质量太差了,只好再去找国外友人的数据集。如果我没记错的话应该用到了以下几个:
caption_validation_images
3K等

项目整体架构

项目架构

项目整体架构

数据爬取与预处理

数据爬取与预处理 通过keyword保存待获取目标类的中文字符,并使用quote函数将keyword的中文格式转为%xx格式,存入keywords中;
通过循环实现获取每页的网址URL,URL来自网站检查获得。
合成目标URL,并加入keywords和page,配合header获取自视觉中国网站的包里;
使用Request函数,获得网站图片资源及描述内容,并使用decode进行UTF-8编码;
通过正则表达库的compile函数,进行正则匹配获取图片及描述;
获取当前工作路径,以及图像保存目录,检测目录是否存在,不存在则创建目录,再获取图像的绝对路径,依据路径存入图片及描述;
图片文件保存在同级目录下,用os库的listdir获取文件夹下所有文件,包括图片及其名称;
将图片的名字保存到列表,方便后期存入字典,再使用rename函数对图片重命名;
将新的图片名字作为键值存入字典,图片描述作为值存入字典,得到字典后,用json库的dump函数把描述存为json文件。\

运行截图: 数据处理运行截图

数据清洗与数据增强

数据清洗与数据增强 数据分析是对数据进行观测的一个手段,在数据分析过程中,需要根据数据的分布情况,为后期的数据使用提供一些比较重要的超参数,在这次小组合作中,我们曾多次变动过数据集,我也多次进行数据分布观测,提供最大句子长度,词库数。
数据清洗是数据分析过程中非常重要的一个步骤。由于数据可能非常杂乱无章,并且难以理解,因此需要对其进行清理和整理,以便更好地处理和使用。数据清洗通常包括数据去重、空值处理和数据格式转换等等,虽然这一项工作看起来并不困难,但实际操作起来是比较难以处理的,例如我在字符串匹配时,虽然在理论上(.*?)的正则匹配模式可以解决几乎所有问题,但如果只使用这一种方法,会导致匹配结构变得十分复杂,这个时候就需要使用先行断言等结构来简化匹配模式。

CNN预训练模型

CNN预训练模型

transformer

transformer 将 Transformer 的 Encoder 替换为 BERT 模型能够带来更强大的句子表示能力、更好的上下文感知和更广泛的应用领域。通过预训练和微调的方式,BERT 能够为不同的自然语言处理任务提供高质量的特征表示,是当前自然语言处理领域的重要技术突破之一。
但,我没研究明白

训练反馈与参数调节

训练反馈与参数调节

调整过程

调整过程1 调整过程2 调整过程3 调整过程4 调整过程5

总结

整个项目开始的时候是抱着试一试的态度做的,只是在做的过程中遇到很多难题,也解决了很多因为自己脑残写出来的bug,越做越有意思,所以最后捣鼓出来个成品,但项目并不完美,CNN的微调也仅仅是因为知道有这么一个技术而强行微调的,没有明确的目的性,对于transformer的改造真的是要了我半条命,但是最后却没有一个好的成果,想要换bred也没成功。项目大概是三个月前写的,今天心血来潮把它部署上来,但是很多技术细节已经忘记了,(我不相信你能记住自己三个月前写的代码(手动狗头)),估计以后也没精力再改进它了,就当做小小的纪念吧!

鸣谢:

感谢在项目中给予我莫大帮助的@陈@臧@罗同学 & 看了很多文章,懒得一篇一篇粘地址了,统统在此献上小弟最真诚的鸣谢!!!

--于IMU卓越楼

空文件

简介

基于transformer与EfficientNet_B4的Image_Caption 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/dongleqi/Image_caption.git
git@gitee.com:dongleqi/Image_caption.git
dongleqi
Image_caption
基于transformer与EfficientNet_B4的Image_Caption
master

搜索帮助